Friday 15 August 2014

Function of getch function in C language

DOS based TC compiler वापरतांना प्रथमच C language शिकणाऱ्या प्रोग्रॅमरना "getch हे फंक्शन मेन फंक्शन मध्ये शेवटी लिहायचे असते" किंवा फार-फार तर "का लिहायचे" इतकेच माहीत असते. या पलीकडे getch, getche, getchar, gets, fget, इत्यादी एकसारखी फंक्शन्स अंगावर आली की गोंधळ होतोच. म्हणूनच ही पोस्ट. अर्थात हा गोंधळ कमी करण्यासाठी. हा गोंधळ पुर्णपणे जाइल याची शाश्वती मी देत नाही कारण इतक्या वर्षाच्या अनुभवानंतर मला ती पोस्ट लिहायची इच्छा झाली.  

या सर्व फंक्शन बद्दल लिहीण्यासारखे व सांगण्यासारखे खुप असल्यामुळे मी या ठिकाणी एकाच पोस्ट मध्ये सर्व फंक्शन्स न घेता अनेक स्वतंत्र पोस्ट मध्ये लिहीन... 


प्रथम आपण ही कोणती कोणती फंक्शन्स आहेत पाहुया. 
  1. getch
  2. getche
  3. getchar
  4. fgetchar
  5. gets
  6. getc
  7. fgetc
  8. fgets
getch( )
C language programming शिकायला सुरवात केल्यानंतर पहील्या १-२ दिवसातच printf व scanf शिवाय जर कोणते फंक्शन विद्यार्थी वापरत असतील तर ते getch library function. DOS based TC वर प्रोग्रॅम रन करायचा व नंतर output दिसले नाही तर getch function प्रोग्रॅमच्या शेवटी टाकायचे असते अशीच समजूत अनेक जणांची झालेली असते. खरं तर getch function हे get character from the keyboard या मधून तयार झाले आहे... 

या फंक्शनचा prototype तुम्हाला conio.h या header file मध्ये मिळेल म्हणून ही फाइल DOS based TC environment मध्ये stdio.h या हेडर फाइल प्रमाणेच include केली जाते. 

हे फंक्शन आपण ज्या ठिकाणी प्रोग्रॅम मध्ये लिहू व जितके वेळा लिहू त्या-त्या ठिकाणी तेवढ्या वेळा तुम्हाला कि प्रेस करावी लागेल. मगं ते एखादे युझर इनपुट असेल अथवा फक्त स्पेसबार असेल. किबोर्ड कडून कि-प्रेस पर्यंत console वर असलेला कर्सर तुमच्या किप्रेस ची वाट पहात असेल. डॉस बेस्ड TC compiler वर काम करतांना सुरवातीला हे फंक्शन वापरावेच लागते कारण output पहाण्यासाठी कंन्सोल window थोपवुन ठेवण्याचे काम getch कडुन पार पाडले जाते. पण या फंक्शनचे अनेक उपयोग नंतर करता येतात. 



आता या प्रोग्रॅम मध्ये स्पेशल पद्धतीने जो लुप लिहीला आहे त्या मध्ये scanf function हे कॅरेक्टर input घेत आहे. जर तुम्हाला अजून एक नंबर भरायचा असेल तर y enter करायचा व या ठिकाणीच थांबायचे असेल व प्रोग्रॅम मधून बाहेर पडायचे असेल तर n enter करायचा अशा प्रकारची व्यवस्था या ठिकाणी केली आहे. scanf function हे एक कॅरेक्टर (y अथवा n) भरल्यानंतर enter key मारायला लागते. 

अशा प्रकारच्या situation मध्ये तुम्ही scanf function च्या ऐवजी ch = getch() असे स्टेटमेंट जर लिहीले तर युझर ने एंटर केलेले कॅरेक्टर (y अथवा n) getch function कडून immediately accept होइल व त्याच क्षणी ch या व्हेअरेबल ला assign करण्याचे काम करेल. या ठिकाणी getch function च्या वापरांने तुमचे दोन फायदे होतील. एक म्हणजे जे कॅरेक्टर (y अथवा n) भरले आहे ते तुम्हाला दिसणार नाही व ते दिसायची गरज सुद्धा नाही. दुसरा फायदा म्हणजे तुम्हाला enter key प्रेस करण्याची गरज भासत नाही. 
getch या फंक्शनचा prototype जर पाहीला तर तो char getch(void) असा आहे. त्यामुळे getch फंक्शन हे किबोर्ड कडूण accept केलेले character आहे तसे return करण्याचे काम करते. नेमकी हीच सुविधा वापरून हे रिटर्न केलेले कॅरेक्टर आपण ch या कॅरेक्टर व्हेअरेबल मध्ये collect करतो. 

कधी-कधी प्रोग्रॅमचे आउटपुट अर्धी अथवा जवळपास पुर्ण स्क्रीन भरेल असे असते. हे आउटपुट लुपच्या प्रत्येक iteration मध्ये मिळते. अशावेळी पुढील iteration चे आउटपुट स्वतंत्रपणे दिसण्यासाठी सुद्धा तुम्ही clear screen व getch फंक्शनची जोडी loop मध्ये वापरू शकता. 

अर्थात अशा प्रकारचे उपयोग प्रोग्रॅम करतांना कळतात. पुस्तकात असे reference शक्यतो आढळत नाहीत.   

अर्थात ही पोस्ट जे विद्यार्थी DOS based TC compiler वापरतात त्यांच्यासाठीच उपयोगी आहे. Linux अथवा Unix systems वर अशा प्रकारचे फंक्शन आस्तितवात नाही कारण conio.h ही header file अन्य कोणत्याही OS वर त्याचा समावेश नाही. खरं तर conio.h हि header file मुळच्या C च्या compiler library मध्ये नव्हती. Borland International ने TC compiler launch करतांना conio.h चा समावेश केला. पण या फाइल ला standard म्हणून कधी मिळालेच नाही...!

Linux, Unix  अथवा Windows based compiler मध्ये program चे output बघण्यासाठी getch सारख्या फंक्शनची व्यवस्था करण्याची गरज सुद्धा नसते. कारण output window होल्ड करण्याची in-built सुविधा या सर्वांमध्ये आहे. अन्य ठिकाणी कॅरेक्टर input करण्यासाठी मात्र त्या कंपायलर मधील अन्य सुविधा तपासण्याशिवाय तुम्हाला गत्यंतर नाही हे लक्षात असु द्या...!

Linux/Unix मध्ये curses व ncurses अशा काही लायब्ररी उपलब्ध आहेत ज्यामध्ये डोकावुन तुम्हाला नेमके काय हवे तसे फंक्शन वापरावे लागेल...! 


No comments:

Post a Comment

Do you like the C Marathi e-learning concept?