Monday 25 August 2014

Function of getche function in C language

मागील पोस्ट मध्ये मी getch या फंक्शन बद्दल लिहीले होते. एकसारखीच दिसणारी पण वेगवेगळा स्वभाव असणारी ही फंक्शन्स मी जाणीवपुर्वक एकाच पोस्ट मध्ये न समजावून सांगता अनेक स्वतंत्र पोस्ट मध्ये लिहीन असे सांगीतले होते...
या पोस्ट मध्ये getche या फंक्शनचे उद्योग कसे असतात ते पाहू. दिसायला व वागायला getch या फंक्शनचा जणू जुळा भाऊ. 
हे फंक्शन सुद्धा किबोर्ड कडून एक कॅरेक्टर कि-प्रेस accept करण्याचे काम करते. खरं तर getch फंक्शन हेच काम पार पाडते. पण getch फंक्शन कोणती कि accept करून घेतली हे सांगत नाही तर getche हे फंक्शन युझर कडून कोणती कि प्रेस केली ते सांगते... म्हणून तर getch या फंक्शन नावाच्या शेवटी e जोडून टाकला आहे. 
या e चा अर्थ खरं तर echo असा आहे. Science मध्ये echo चा अर्थ reflection of sound waves असा आहे. पण कंप्युटरवाल्यांनी या शब्दाला सुद्धा import केले. किबोर्डकडून टाइप होणारे कॅरेक्टर स्क्रीन वर प्रिंट करण्याच्या सवयीला सुद्धा echo म्हणतात....!

अनेक browsers वर पासवर्ड भरतांना अथवा जवळपास सगळ्या ATM मशीन वर PIN भरतांना password हा डिसप्ले होतांना ****** अशा स्वरुपात दिसतो... 

आता स्ट्रिंग, लुप, इफ-एल्स, आणी त्यासोबत getch, getche या सारखी फंक्शन्स तुम्हाला कळाली असतील तरच तुम्हाला हा प्रोग्रॅम लिहीता येइल. मी प्रोग्रॅम रन झाल्यानंतर कसा रन होइल त्याची output window या ठिकाणी देत आहे. 


करा हवं तर प्रयत्न प्रोग्रॅम लिहीण्याचा... सोर्स कोड मात्र स्वत: लिहायचा प्रयत्न करा. विनाकारण google करत बसू नका... 

मी नंतर काही काळाने सोर्स कोड टाकते तुमच्या साठी.  

उर्वरीत unformatted functions पुढील पोस्ट मध्ये... 
   

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 अशा काही लायब्ररी उपलब्ध आहेत ज्यामध्ये डोकावुन तुम्हाला नेमके काय हवे तसे फंक्शन वापरावे लागेल...! 


Do you like the C Marathi e-learning concept?