Monday, 20 October 2014

Treasures of C language

C programming language मधील माहीत नसलेल्या गमती-जमती…!
सुरवातीच्या म्हणजे Data Types in C पासून थेट file handling पर्यंत सर्व सिंटॅक्स व काही प्रोग्रॅम सोडवून झाले की C language झाली एकदाची शिकुन असे म्हणून सुस्कारा सोडतात. त्या नंतरच खरं तर C language मध्ये काय काय आहे ते पुढच्या आयुष्यात कळायला सुरवात होते. अर्थात करीअर करण्याचा नादामध्ये प्रत्येकाला वेळ मिळेलच असे नाही. त्यांच्यासाठीच हि एक गमतीशीर पोस्ट…

Initialization of array

C च्या program मध्ये array initialize करण्याची पद्धत म्हणजे…
int num[5] = { 11,22,33,44,55 };
Array initialize करण्याचा हा एकमेव मार्ग आहे. पण या Array मधील ठरावीच element initialize करायचे असतील तर…? समजा या array मधील फक्त तिसरा व पाचवा element initialize करायचा असेल तर…? तर तुम्ही array अशा पद्धतीने लिहू शकता…
int num[5] = {[2] = 33, [4] = 55};
गंम्मत आहे ना…? शिवाय array मधील इतर element सुद्धा 0 ला initialize करण्याचे पवित्र कार्य करून टाकतो…! माहीत होत तुम्हाला…? तुम्हाला सुद्धा खरचं असं काही भन्नाट माहीत असेल तर जरूर कळवा मला…

Case inside decision and loop control structure

मेनू ड्रिव्हन प्रोग्रॅमिंग करण्याची डेनीस ने दिलेली अफलातून सुविधा म्हणजे switch-case control structure. याचा एक ठरावीक सिंटॅक्स असतो.. व तो तुम्हाला माहीत असेलच. पण एखाद्या केस च्या आत लुप अथवा if-else block असेल तर त्याच्या आत सुद्धा case असू शकते. कसं काय मॅनेज करत असेल हा कंपायलर…?
हा प्रोग्रॅमच पहा ना दिसायला साधा आहे पण खरं तर चालू आहे…!

Case with range in switch case block

समजा युझर ने एंटर केलेले कॅरेक्टर कॅपिटल आहे की स्मॉल असे आउटपुट हवे आहे व आपण स्विच-केस ब्लॉक वापरून लिहीणार आहोत. तर तुम्ही case ला range देउ शकता…! जसे की हा प्रोग्रॅम कसा लिहीला आहे पहा...
   
अशाच काही अनेक गमती-जमती पुढील काही पोस्ट मध्ये...!



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


Saturday, 24 May 2014

तऱ्हेवाईक चुका...! (Types of Errors in C Language)



अनेक विद्यार्थ्यांची C हीच पहीली प्रोग्रॅमिंग लॅंग्वेज असते. त्यामुळे प्रोग्रॅम लिहीण्यापेक्षा तो कंपाइल व रन करून पुढील प्रोग्रॅमला जाण्याची अतोनात घाई कायम दिसते. नंतर ती घाई कमी होत जाते हा भाग वेगळा…! पण सुरवातीला तर कंपाइल केलेल्या कोड मध्ये zero errors आहेत ना या कडेच सर्व लक्ष केंद्रीत असते. त्यावेळी काही warning असल्या तर अर्थातच त्या दुर्लक्षीत केल्या जातात.

हाच धागा पकडून मी C programming मध्ये कोणत्या स्वरूपाच्या errors असतात हे लिहीणार आहे. आवडले तर वाचा नाहीतर warning सारखे सोडून द्या…!


C programming language मध्ये Errors ची वर्गवारी 3 प्रकारात करता येइल.
  1. Compiler Message 
    1. Compiler Warnings
    2. Compile Time Errors
  2. Linker Errors
  3. Run time errors
    1. Fatal Errors
    2. Logical Errors
Compiler Message
कंपायलर च्या सहाय्याने आपण लिहीलेला सोर्स कोड मशीन कोड मध्ये convert करण्याचा प्रयत्न करतांना जर काही अडचणी आल्या तर युझर ला तो (कंपायलर) message च्या स्वरूपात देण्याचा प्रयत्न करतो
Compiler Warning
Warning अर्थ असा असतो की तुम्ही कोड मध्ये काही तरी चुकला आहात. नियम बाह्य पद्धतीने कोडचा काही भाग लिहीला आहे. पण त्या इतक्याही गंभीर नाहीत की कोड कंपाइल होणार नाही. त्या फक्त सुचना असतात. तुम्ही दुर्लक्ष करून पुढे गेला तर प्रोग्रॅम कंपाइल होतो. पण पुढे अशा काही अडचणी आल्या तर या शोधायला फार वेळ लागतो. म्हणून compiler warning कडे दुर्लक्ष करू नये. समजा तुम्ही main function चा रिटर्न टाईप integer लिहीला आहे व return 0 स्टेटमेंट लिहायचे विसरून गेला तर तुम्हाला warning मिळेल
Compiler Errors
तुमच्या सोर्स कोड मध्ये काही चुका अशा केल्या आहेत ज्या मुळे कोड कंपाइल करायला म्हणजेच मशीन कोड मध्ये convert करायला अडचणी येत आहेत अशा प्रकारच्या सुचनांना compiler errors म्हणतात. या मध्ये तुम्ही कोड दुरूस्त केल्या शिवाय पुढे जाउ शकत नाही. शक्यतो या लॅंग्वेजच्या सिंटॅक्स संबंधी असतात. उदा. semi colon किंवा फंक्शन चा closing brace अथवा अर्धवट double quote pair अशा मुळे त्या येतात. व्हेअरेबल डिक्लेअर न करता जरी वापरण्याचा प्रयत्न केला तर तुम्हाला कंपाइल टाइम एरर मिळेल
Errors आणी warnings या शक्यतो लाइन नंबर्स सहीत देण्याचे काम कंपायलर करतो. प्रत्येक कंपायलरची पद्धत थोडीफार वेगवेगळी असू शकते. शिवाय error अथवा warning शोधतांना message मध्ये असणारा line number व त्या अलीकडील line सुद्धा तपासून पहावी


Linker Errors
प्रोग्रॅम कंपाइल केल्या नंतर execution च्या पुर्वी link करण्याचा exclusive option कंपायलर मध्ये असू शकतो. अथवा execution करतांना सुद्धा linker error मिळु शकते. तुम्ही कॉल केलेल्या फंक्शन ची definition मिळाली नाही अथवा लायब्ररी मधील फाइल अथवा लायब्ररी मिळाली नाही तर तुमच्या तयार झालेल्या object file ला इतर object file शी linking न झाल्यामुळे व executable तयार होत नसल्यामुळे तुम्हाला linker error मिळेल. तुम्ही include केलेल्या library चा path चुकला असेल तरी सुद्धा तुम्हाला linker error मिळू शकते

Run Time Errors
प्रोग्रॅम कंपाइल व लिंक झाल्या नंतर रन करतांना सुद्धा अडचणी येउ शकतात. या वेळी येणाऱ्या अडचणींना व मिळणाऱ्या messages ना run time errors म्हणता येइल. गंमत म्हणजे या प्रोग्रॅम रन होतांना अथवा पुर्णपणे रन झाल्यानंतर सुद्धा येउ शकतात.      
Fatal Error
तुमची executable file crash करण्याची अथवा होण्याची शक्यता असणाऱ्या प्रोग्रॅम मधील काही चुकांमुळे या errors मिळतात. Array चा इंडेक्स, pointer, इत्यादी मुळे जर आल्या तर त्याला आपण segmentation fault म्हणतो. अथवा एखाद्या नंबर ला zero ने divide केल्यामुळे सुद्धा fatal error येते.

Logical Error
तुम्हाला एखादे स्टेटमेंट हवे तसे execute न होता भलत्याच पद्धतीने execute होते व वरील पैकी कोणत्याच प्रकारची error न मिळता output मिळते पण चुकीचे output मिळते. अथवा काहीवेळा बरोबर व काहीवेळा चुकीचे output मिळते अशा प्रकारच्या unpredictable errors ना logical errors म्हणतात. शोधायला सर्वात अवघड म्हणजे या errors कारण याचे कारण शोधुन काढायला लागते. शक्यतो कोणत्याही प्रकारचा message मिळत नाही
For similar interesting notes and audio visual e-contents visit our site C Marathi
For similar notes in Marathi on programming languages visit our blog C Marathi Blog
 

 
 

Friday, 13 December 2013

ASCII text file and Binary File - Part I

File handling शिकतांना तुम्हाला सुरवातीला ASCII Text file आणी Binary File असे काहीतरी शब्द कानावर पडतात. व अनेक विद्यार्थ्यांना नेमका अर्थ काय तेच कळत नाही. कारण विद्यार्थ्याला तो ASCII text file वर काम करतोय कि Binary या मध्येच गोंधळ होतो. खरं तर आपण दोनही वर काम केलेले असते. C/C++/Perl/HTML या सर्व कोड मध्ये आपण text file वरच काम करतो. 


ज्या File मध्ये ASCII characters असतात ती ASCII text file अशी simple definition देता येइल. Notepad किंवा vi editor वापरून आपण जी तयार करतो त्या ASCII text files च असतात. ASCII मधील A हा American असल्यामुळे ASCII text file american-centric च आहे आणी जगभर America देशाचाच Software मध्ये प्रभाव असल्याने अर्थातच ते international standard होउन बसले आहे...!

Computer Scientist हे सर्वात जास्त महत्व कशाला देत असतील तर ते Abstraction ला. हिच philosophy वापरून खरं तर OOP methodology तयार झाली. Text editor हे abstraction चे उत्तम उदाहरण म्हणता येइल. 

Memory मग ती free memory असो अथवा hard disk असो, त्या वरील डेटा हा 0s आणी 1s मध्येच स्टोअर होतो हेच तर खरे abstraction आहे. तर मग Text file असली काय किंवा binary file असली काय, शेवटी काय फरक पडतो असा प्रश्न तुम्हाला पडेल...!

त्या साठी प्रथम file म्हणजे काय ते सांगते. C मध्ये file म्हणजे Collection of bytes stored on secondary storage device like hard disk. त्या मध्ये characters असतील, words असतील, lines असतील, paragraphs असतील अथवा Data base मधील fields आणी records असतील. किंवा Image मधील pixels असतील. 

ASCII Text Files:
  1. हि एक प्रकारची Special Binary file च असते. ASCII हा 7 byte code असलेले character असते कारण एकूण ASCII characters 128 आहेत. त्यामुळे प्रत्येक कॅरेक्टर स्टोअर होतांना त्याचा most significant bit 0 (zero) असतो व तो वापरला जात नाही. Binary file च्या बाबतीत मात्र तशी काही गैरसोय होत नाहॊ व पुर्ण 256 bit patterns वापरले जातात. 
  2. शिवाय ASCII text file हि कायम Sequential स्वरूपात access करता येते. 
  3. या प्रकारची file forward direction नेच access करता येते. 
  4. याच कारणामुळे Text file हि read mode, write mode or append mode या पैकी एकाच mode मध्ये open करता येते. 
  5. ज्यावेळी data store (write) होतो त्यावेळी Newline character in text mode is converted into the carriage return - line feed combination व तशाच प्रकारची process उलट पद्धतीने होते ज्यावेळी file (read) hard disk वरून आणली जाते. अशाच प्रकारची इतर translation सुद्धा programmer च्या अपरोक्ष (background) होत असतात.
  6. फक्त कॅरेक्टर्स handle करण्याच्या पद्धतीमुळे एकावेळी एकच कॅरेक्टर read किंवा write करता येते.    

समजा एखाद्या नोटपॅड मध्ये तुम्ही cat असा word type केला व file save केली तर hard disk वर c, a, t या प्रत्येक alphabet हे corresponding ASCII value च्या स्वरूपात स्टोअर होइल. 




Binary files:
Binary files सुद्धा collection of bytes च असते. C language मध्ये Character आणी Byte एकच represent करत असल्यामुळे Binary files सुद्धा character streams म्हणूनच ओळखल्या जातात. थोडा-फार फरक आहे तो असा कि:

  1. Write किंवा Read operation च्या वेळी डेटाचे special processing होत नाही व गरज सुद्धा नसते. 
  2. C Programmer ला bit level ला काम करता येते. 
  3. Binary files sequentially आणी Randomly प्रोसेस करता येतात. 
  4. Read आणी Write operations हि एकाच वेळी (Simultaneously) करता येतात. 

ज्यावेळी तुम्ही एखादे कॅरेक्टर टाइप केल्यानंतर save होतांना तो entire byte rules प्रमाणे स्टोअर होइल.  
Binary files बरोबर सुद्धा आपण अनेकवेळा काम करतो...उदा. executable file, object files, sound files, image files या सर्व binary files category मध्ये मोडतात. उदा.

Data base files मध्ये file तयार करणे व process करणे Binary files च्या बाबतीत सोपे असते. Record update करायची असेल तर record locate करणे, मेमरी मध्ये fetch करणे, modify करून file मध्ये हव्या त्या ठिकाणी ठेवण्याची कामे सहज शक्य असतात. अशा प्रकारच्या कामाला text file शक्यतो वापरता येत नाही. 

Text आणी Binary files मध्ये broadly फरक केला जातो तो त्यांच्या 
  • new line handle करण्याच्या पद्धतीमुळे  
  • end of line represent करण्याच्या पद्धतीमुळे 
  • number store करण्याच्या पद्धतीमुळे
याच्या पुढील पोस्ट मध्ये मी एक प्रोग्रॅम घेउन सविस्तर सांगते...

Till then Happy Coding...! 

       
            

Thursday, 12 December 2013

sprintf functions in C

printfscanf हि फंक्शंन्स तुम्हाला माहीतच झाली आहेत. मागील पोस्ट मध्ये त्या दोनही फंक्शंन्स विषयी मी थोडे-फार लिहीले होते. पण सर्वच काही जाणीवपुर्वक लिहीले नाही. कारण त्या फंक्शंन्स शी निगडीत अनेक concepts असे आहेत की एकाच पोस्ट मध्ये लिहीले तर वाचायचा कंटाळा करून तुमचे दुर्लक्ष होउ शकते. 

printf व scanf या दोन फंक्शंन्सशी निगडीत अजून दोन फंक्शंन्स मी आज घेते आहे ती म्हणजे sprintf आणी sscanf. अनेकवेळा ती कशी व कधी वापरायची हे न कळाल्यामुळे शिकायची सुद्धा राहून जातात. 

Buffering Video


एकदम सोप्या भाषेत सांगायचे झाले तर printf function ज्यावेळी call करतो त्यावेळी त्याचे output आपल्याला monitor वर दिसते. पण हेच जर आपल्याला monitor वर न पाठवता एकाद्या व्हेअरेबल मध्ये स्टोअर करायचे असेल तर sprintf हे फंक्शन तुम्हाला मदत करेल. आता printf function call करतांना त्याचे पहीले argument string constant असते व त्यामधील formatted contents हे monitor वर पाठवले जात असतील तर हेच contents store करायला लागणाऱ्या व्हेअरेबल चा data type अर्थातच string असायला हवा. त्यामुळे sprintf function चा प्रोटोटाइप सुद्धा 

int sprintf ( char * buffer, const char * format [ , argument , ...] );

असा आहे. या ठिकाणी पहीले argument buffer हा character pointer म्हणजेच string आहे हे लक्षात घ्या. उर्वरीत arguments हि printf function प्रमाणे same आहेत. फरक इतकाच की output हे monitor ला पाठवायच्या ऐवजी buffer point करत असलेल्या string मध्ये स्टोअर करण्याची विनंती आपण sprintf function ला करत आहोत. त्यामुळे प्रोग्रॅम मध्ये buffer साठी एक sufficient size असलेला एक character array declare करून ठेवण्याची गरज असते. जसे की 

char buffermem[100];

व हाच base address तुम्ही sprintf function ला first argument म्हणून पाठवायचा म्हणजे काम भागले...!

समजा आपण एक छोटा प्रोग्रॅम लिहायचा प्रयत्न केला तर कसा असेल...?


व output 

              
असे असेल....

File handling करतांना अशा प्रकारच्या फंक्शंन्स चा उपयोग करता येउ शकतो. किंवा एखादे output आपल्याला नंतर वापरायचे असेल तर sprintf function चा वापर केला जातो. 

printf function ज्या प्रमाणे monitor वर किती characters print केली त्याचा integer number return करते त्याच प्रमाणे sprintf function सुद्धा किती characters array मध्ये टाकली ते return करते. अर्थात त्या मध्ये string terminating character घेत नाही हे लक्षात घ्या...!

एखादा youtube वरचा व्हिडीओ आपण direct न पहाता pause करून buffer memory मध्ये साठवून ठेवतो व नंतर internet connection नसतांना सुद्धा पाहतो तसलाच काहीतरी हा प्रकार आहे असे मला अनेक वेळा वाटते...!

पुढच्या पोस्ट मध्ये मी sscanf बद्द्ल लिहीते...

Till then Happy Coding...!    

Tuesday, 10 December 2013

scanf function in C language

मागील पोस्ट मध्ये मी printf function बद्दल सांगीतले होते. त्या फंक्शनची जोडीदारीण म्हणजे scanf function. अर्थातच printf function जर output साठी वापरण्यात येत असले तर scanf हे input घेण्यासाठी वापरण्यात येते. जवळपास सर्वच program मध्ये जोडीने फीरतांना तुम्हाला हे आढळतील...!

इंग्रजी मध्ये एखाद्याचे inspection किंवा screening करायचे असेल तर scanning हा शब्द वापरला जातो. मला कधी कधी वाटतं युझरने भरलेली व keyboard च्या आत दडलेली value मेमरीमध्ये चपखलपणे नेउन ठेवण्याचे काम करणारे हे फंक्शन आहे म्हणून scanf असे नाव ठेवले आहे. गंम्मत म्हणजे Java मध्ये अशा प्रकारचे फंक्शन जरी नसले तरी Java मध्ये input घेण्यासाठी object तयार करायला लागतो व त्या object च्या class चे नाव Scanner ठेवले आहे...!

printf function व इतर अनेक फंक्शन्स प्रमाणेच input घेण्याची व्यवस्था सुद्धा डेनीसनं C language मध्ये built in केली नव्हती. त्यामुळे हे फंक्शन सुद्धा compiler च्या library मध्ये उपलब्ध आहे व stdio.h या header file मध्ये त्याचा prototype आहे. तो सर्वसाधारणपणे 

int     _Cdecl scanf(const char *__format, ...);

असा आहे. आता याच फंक्शनचे scanning करायचे म्हणले तर 

scanf function integer return करते. 
printf function प्रमाणेच याचे calling convention _Cdecl आहे. 
याचे पहीले argument स्ट्रिंग असते
पुढील argument सुद्धा printf function प्रमाणे Ellipsis म्हणजेच 3 dots (...) आहे. म्हणूनच मागील पोस्ट मध्ये सांगीतल्या प्रमाणे हे फंक्शन सुद्धा variable number of arguments म्हणजेच any number of arguments घेउ शकते.              

scanf या फंक्शन मध्ये printf function प्रमाणे पहीले argument जरी string असले तरी या स्ट्रिंग मध्ये फॉर्मॅट स्पेसीफायर काही अपवाद वगळता कोणतीही इतर कॅरेक्टर्स लिहून नयेत. त्यामुळे समजा एक इंटीजर input घ्यायचा असेल व x या व्हेअरेबल मध्ये स्टोअर करायचा असेल तर स्टेटमेंट

scanf("%d",&x); 

असे असेल. स्ट्रिंग नंतर जी arguments ची लिस्ट असते त्या मध्ये व्हेअरेबल्सची मेमरी द्यावी लागते. म्हणून व्हेअरेबल च्या नावा समोर ampersand म्हणजेच address operator जोडतात. जर व्हेअरेबल स्वत:च pointer variable असेल तर ampersand जोडण्याची गरज उरत नाही. उदा. 

int x; 
int *ptr = &x;

scanf("%d",ptr); 

असे लिहीले तर keyboard कडून input केलेली value x मध्ये स्टोअर केली जाइल. समजा आपल्याला अनेक integer, real, characters input करून घ्यायच्या आहेत तर तुम्ही 

scanf("%d%f%c",&x,&y,&ch);

असे लिहू शकता. व या format specifiers व्यतीरीक्त इतर कोणतीही characters या string च्या आत लिहू नयेत. अनेक वेळा अनवधानाने escape sequence लिहीण्याची चुक विद्यार्थ्यांच्या कडुन होते व compile अथवा run time error सुद्धा मिळत नाही पण output मात्र चूकीचे मिळते. 

मी एक छोटासा प्रोग्रॅम खाली देते आहे. पहा हवं तर टाइप आणी रन करून...

#include<stdio.h>
void main( )
{
        char line[200];
        printf("Enter Sentence\n");
        scanf("%[^\n]",line);
        printf("%s",line);
}

मी अजून एक गंम्मत सांगते पोस्ट संपवायच्या पुर्वी.... कारण तसं म्हणल ना तर printf आणी scanf वर मला खुप काही सांगायचयं तुम्हाला पण मी एकाच पोस्ट मध्ये नाही लिहीत सगळं... कारण खुप काही आहे...सांगेन मी तुम्हाला

तर printf आणी scanf यांना print function आणी scan function असे म्हणतात हे ठिक आहे पण f हा function साठी राखीव नसून formatted साठी राखीव आहे...!

C is really mysterious language... Life long... 




Do you like the C Marathi e-learning concept?