Formatted Input
Formatted
Input
scanf() व
printf() Functions के साथ हम कुछ Flags का प्रयोग करके formatted या मनचाहे प्रकार में मान Input
कर सकते हैं व Output में मनचाहे रूप में
परिणाम प्रिंट कर सकते हैं | ये
काम Control
Strings चाहे वह Integer के लिए हो , Float
के लिए हो या Char या String के लिए हो , सभी के साथ प्रयोग किया जा सकता है |
इस
प्रकार Control
Strings के बीच Flags निम्न सुत्र द्वारा लगाए
जाते हैं |
यहां w एक पूर्णांक संख्या है , जो Input किए जाने वाले अंकों की संख्या बताती है कि कितने अंकों तक मान Input होकर उस Identifier में जाएगा जिसका Address दिया गया है और d यह बताता है कि दशमलव के बाद कितने अंक Store होंगे | d एक अंक होता है | Type Specifier , Input किए जा रहे Data का प्रकार बताता है | इसे समझने के लिए निम्न प्रोग्राम देखें |
#include<stdio.h>
main()
{
int a,b,c;
printf("Enter Three Integer ");
scanf("%2d %4d %3d", &a,&b,&c);
printf("\n The Value of First Integer is %d",a);
printf("\n The Value of Second Integer is %d",b);
printf("\n The 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 का प्रयोग
करके प्रोग्राम Control को बताया है कि प्रथम 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 कर देता है और अगले मान
को दूसरे Variable में Store कर देता
है | तीसरे Variable
में Garbage Value आ जाती है |
इस
प्रोग्राम में हमने दूसरे Variable में Control
String के साथ * का प्रयोग किया है |
इस
प्रोग्राम को रन करें और निम्न मान Input करे
111
222
333
#include<stdio.h>
main()
{
int a,b,c;
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
The Value of First Integer is 111
The Value of Second Integer is 333
The Value of Third Integer is 0
ध्यान दें कि
हमने दूसरे Variable का मान 222 दिया था व 333 तीसरे Variable को दिया था लेकिन दूसरे Variable का मान 333
हो गया व तीसरे Variable में वह मान प्राप्त
हुआ जो हमने कभी दिया ही नहीं है | ऐसा
दूसरे Variable
के Control String के साथ * का प्रयोग करने के कारण हुआ है |
जब किसी Control
String के साथ * Flage का प्रयोग किया जाता है , तब “C” Compiler उस Variable के लिए keyboard से
Input होने वाले मान को Neglect कर
देता है और जो अगला मान अगले Variable के लिए Input किया जाता है वह मान पिछले Variable को Assign
हो जाता है | इस
Program
में तीसरे Variable के लिए कोई मान नहीं बचा
इसलिए Compiler ने Memory की Garbage Value को इसमें Store
करके दिखा दिया |
#include<stdio.h>
main()
{
int a,b,c,x,y;
int p,q,r;
printf("\nEnter three integer number");
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("\nEnter two Integers ");
scanf("%d %d", &a,&x);
printf("%d %d \n \n",a,x);
printf("\nEnter a nine digit numbers ");
scanf("%3d %4d %3d", &p ,&q , &r);
printf("%d %d %d ", p,q,r);
printf("\nEnter two three digit number ");
scanf("%d %d", &x , &y);
printf("%d %d ", x,y);
getch();
}
Output
Enter three integer number1 2 3
1 1 0
Enter two-4-digit number
6789 4321
2 3
Enter two Integers 6789 4321
Enter a nine digit numbers 123456789
123 4567 89
Enter two three digit number 123 456
123 456
Another Example Program
#include<stdio.h>
main()
{
int a,b,c,tot;
printf("\nEnter 5-digit first number: ");
scanf("%2d",&a);
fflush(stdin);
printf("\nEnter 4-digit second number: ");
scanf("%3d",&b);
fflush(stdin);
printf("\nEnter 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 567
Third Value is 23
Total of three values is 602
इस प्रोग्रम में
हमने एक नए Function fflush (stdin) का प्रयोग किया
है | ये Function
Keyboard से Input किए जाने वाले मान से बचे
मान को , जो कि Memory में रह जाता है , साफ़ करने का करने का
काम करता है |
यानी
जैसे हमने printf(“\n Enter 5-digit first number:”); Statement द्वारा मान मांगा और scanf(“%2d
“, &a); Statement द्वार Keyboard से
प्राप्त मान को Variable a को दिया , तो Variable a को केवल आगे के दो अंक ही प्राप्त होंगे |
शेष
अंक Memory
में पड़े रहेंगे | fflush
(stdin) Function Memory में पड़े इन अंकों को साफ़ कर देता है |
No comments