Formatted Input in C: scanf() व printf() Functions के साथ हम कुछ Flags का प्रयोग करके Formatted या मनचाहे प्रकार में मान Input कर सकते हैं व Output में मनचाहे रूप में परिणाम प्रिंट कर सकते हैं। ये काम Control Strings के मध्य कुछ Flags को Use करके किया जाता है और ये Flags सभी प्रकार के Control Strings चाहे वह Integer के लिए हो, Float के लिए हो या char या string के लिए हो, सभी के साथ प्रयोग किया जा सकता है। इस प्रकार Control Strings के बीच Flags निम्न सुत्र द्वारा लगाए जाते हैं:
%Flage Type Specifier ( Control String )
Flage = w.d
यहां w एक पूर्णांक संख्या है, जो Input किये जाने वाले अंकों की संख्या बताती कि कितने अंकों तक मान Input होकर उस Identifier में जाएगा जिसका Address दिया गया है और .d यह बताता है कि दशमलव के बाद कितने अंक Store होंगे। d एक अंक होता है। Type Specifier, Input किये जा रहे Data का प्रकार बताता है। इसे समझने के लिए निम्न प्रोग्राम देखें:
Program #include<stdio.h> main() { int a, b, c; clrscr(); printf("Enter Three Integers"); scanf("%2d %4d %3d", &a, &b, &c); printf("\nThe Value of First Integer is %d " , a ); printf("\nThe Value of Second Integer is %d" , b ); printf("\nThe Value of Third Integer is %d" ,c ); getch(); }
इस प्रोग्राम में हम प्रथम Identifier a में दो अंको तक की संख्या Store कर सकते हैं। b में चार अंको व Identifier c में तीन अंकों तक का Store कर सकते हैं। ये प्रोग्राम बना कर रन करें और निम्न संख्याएं Input करें:
12
3456
78
Output The Value of First Integer is 12 The Value of Second Integer is 3456 The Value of Third Integer is 78
यह वही Output है, जो हमने Input किया था। लेकिन यदि Input किए जा रहे मानों के क्रम को निम्नानुसार कर दें, तो हमें Output गलत प्राप्त होता है:
1234
12
233
जब हम ये मान Input करने की कोशिश करते हैं, तो Program हमसे केवल दो ही Input लेता है, तीसरा मान 233 Accept करने से पहले ही प्रोग्राम निम्न परिणाम दे देता है:
The Value of First Integer is 12 The Value of Second Integer is 34 The Value of Third Integer is 12
हम देखते हैं कि तीसरा मान हमने Input नहीं किया था फिर भी हमें परिणाम में 12 प्राप्त हो रहा है।
ऐसा क्यों हुआ?
हमने Value Input करने में Formatted Input का प्रयोग किया है, यानी %2d का प्रयोग करके प्रोग्राम कंट्रोल को बताया है कि प्रथम Identifier a में केवल दो अंकों तक का ही मान Store होगा और हमने इसमें चार अंकों की संख्या को Input कर दिया है। इसलिए “C” Compiler दो अंकों तक के मान को Variable a में Store कर देता है और शेष रहे 34 को दूसरे Variable b में Store कर देता है।
चूंकि हमने %4d Flag द्वारा “C” Compiler को बताया है कि दूसरे Variable में चार अंकों तक का मान Store होगा, लेकिन फिर भी इस Variable में केवल बचे हुए दो ही अंक Store हुए हैं। ऐसा इसलिए हुआ है, क्योंकि scanf() Function Space या Enter Key के मिलते ही Terminate हो जाता है, और 1234 के बाद हमने Enter Key को Press किया है। इसलिए बचा हुआ 34 दूसरे Variable को मिल गया।
दोनों Variables को मान मिल जाने के बाद दिया जाने वाला दूसरा मान तीसरे Variable को मिल जाता है, और Program हमसे Input करने के लिए तीसरा मान नहीं मांगता, बल्कि सीधे ही Output दे देता है। ऐसा इसलिए होता है, क्योंकि अब किसी भी अन्य Variable के लिए मान Accept होना बाकी नहीं रह जाता है।
इस तरह हमें उपरोक्त मान परिणाम के रूप में प्राप्त होते हैं। इस प्रक्रिया का प्रयोग करके हम यह निश्चित कर सकते हैं कि किस Variable में किस संख्या तक मान को Input किया जा सकता है।
इसी प्रोग्राम में हम एक और Concept Use कर सकते हैं। जब किसी Control String के साथ * का प्रयोग किया जाता है, तब Compiler उस Control String के लिए Keyboard से आने वाले मान को Neglect कर देता है और अगले मान को दूसरे वेरियेबल में Store कर देता है। तीसरे Variable में Garbage Value आ जाती है। इसी प्रोग्राम को दूसरे तरीके से Use करके नया प्रोग्राम बनाते हैं। इस प्रोग्राम में हमने दूसरे वेरियेबल में Control String के साथ * का प्रयोग किया है। इस प्रोग्राम को रन करें और निम्न मान Input करें:
111
222
333
Program #include<stdio.h> main() { int a, b, c; clrscr(); printf("Enter Three Integers"); scanf("%d %*d %d", &a, &b, &c); printf("\nThe Value of First Integer is %d " , a ); printf("\nThe Value of Second Integer is %d" , b ); printf("\nThe Value of Third Integer is %d" ,c ); getch(); } Output Value of First Integer is 111 Value of Second Integer is 333 Value of Third Integer is 2344
ध्यान दें कि हमने दूसरे Variable का मान 222 दिया था व 333 तीसरे Variable को दिया था लेकिन दूसरे Variable का मान 333 हो गया व तीसरे Variable में वह मान प्राप्त हुआ जो हमने कभी दिया ही नहीं है। ऐसा दूसरे Variable के Control String के साथ * का प्रयोग करने के कारण हुआ है।
जब किसी Control String के साथ * Flage का प्रयोग किया जाता है, तब “C” Compiler उस Variable के लिए Keyboard से Input होने वाले मान को Neglect कर देता है और जो अगला मान, अगले Variable के लिए Input किया जाता है वह मान पिछले Variable को Assign हो जाता है। इस प्रोग्राम में तीसरे Variable के लिए कोई मान नहीं बचा इसलिए Compiler ने Memory की Garbage Value को इसमें Store करके दिखा दिया।
Program #include<stdio.h> main() { int a, b, c, x, y; int p, q, r; clrscr(); printf("Enter three integer number \n"); scanf("%d %*d %d", &a, &b, &c); printf("%d %d %d", a, b, c); printf("\n\n Enter two 4-digit number \n"); scanf("%2d %d ",&x, &y); printf("\n %d %d", x, y); printf(" Enter two integers\n"); scanf("%d %d", &a, &x); printf("%d %d \n\n", a, x); printf("Enter a nine digit number \n"); scanf("%3d %4d %3d ",&p, &q, &r); printf("%d %d %d" ,p, q, r); printf("Enter two three digit number \n"); scanf("%d %d", &x, &y); printf("%d %d" ,x ,y); getch(); } Output Enter three integer number 1 2 3 1 3 –3577 Enter two 4-digit number 6789 4321 67 89 Enter two integers 44 66 4321 44 Enter a nine digit number 123456789 66 1234 567 Enter two three digit number 123 456 89 123
Program #include<stdio.h> main() { int a, b, c, tot; printf("\nEnter 5-digit first number:"); scanf("%2d ",&a); fflush(stdin); printf("\n Enter 4-digit second number:"); scanf("%3d",&b); fflush(stdin); printf("\n Enter 2-digit third number:"); scanf("%4d",&c); fflush(stdin); tot=a + b + c; printf("\n First value is % d" ,a); printf("\n Second value is % d" ,b); printf("\n Third value is % d" ,c); printf("\n Total of three values is %d" ,tot); getch(); } Output Enter 5-digit first number:12345 Enter 4-digit second number:5678 Enter 2-digit third number:23 First value is 12 Second value is 568 Third value is 23 Total of three values is 603
इस प्रोग्राम में हमने एक नए Function fflush(stdin) का प्रयोग किया है। ये Function Keyboard से Input किए जाने वाले मान से बचे मान को] जो कि Memory में रह जाता है, साफ करने का काम करता है। यानी जैसे हमनें printf(“\nEnter 5-digit first number:”); statement द्वारा मान मांगा और scanf(“%2d “,&a); statement द्वारा Keyboard से प्राप्त मान को Variable a को दिया] तो Variable a को केवल आगे के दो अंक ही प्राप्त होंगे। शेष अंक Memory में पडे रहेंगे। fflush(stdin) Function Memory में पडे इन अंकों को साफ कर देता है।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook C Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
C Programming Language in Hindi | Page: 477 + 265 | Format: PDF