समस्या बताती है कि यदि स्कैनफ के बाद fgets ()/gets ()/scanf ()।
fgets()/gets() उसके बाद scanf()
उदाहरण
#include<stdio.h> int main() { int x; char str[100]; scanf("%d", &x); fgets(str, 100, stdin); printf("x = %d, str = %s", x, str); return 0; }
आउटपुट
Input: 30 String Output: x = 30, str =
स्पष्टीकरण
fgets () और get () का उपयोग रन टाइम पर उपयोगकर्ता से स्ट्रिंग इनपुट लेने के लिए किया जाता है। मैं उपरोक्त कोड चलाता हूं जब हम पूर्णांक मान दर्ज करते हैं तो यह स्ट्रिंग मान नहीं लेगा क्योंकि जब हमने पूर्णांक मान के बाद नई लाइन दी थी, तो fgets() या get() वांछित इनपुट के बजाय इनपुट के रूप में नई लाइन लेगा जो "स्ट्रिंग" है। ।
scanf() उसके बाद एक scanf()
स्कैनफ () के बाद स्कैनफ () को बार-बार प्राप्त करने के लिए हम एक लूप का उपयोग कर सकते हैं।
उदाहरण
#include<stdio.h> int main() { int a; printf("enter q to quit"); do { printf("\nenter a character and q to exit"); scanf("%c", &a); printf("%c\n", a); }while (a != ‘q’); return 0; }
आउटपुट
Input: abq Output: enter q to quit enter a character and q to exita a enter a character and q to exit enter a character and q to exitb b enter a character and q to exit enter a character and q to exitq
स्पष्टीकरण
यहां हम एक अतिरिक्त नई लाइन के बाद एक अतिरिक्त लाइन 'एक वर्ण दर्ज करें और बाहर निकलने के लिए q' देख सकते हैं, ऐसा इसलिए है क्योंकि हर बार स्कैनफ () एक बफर में एक नई लाइन छोड़ता है जिसे वह अगले स्कैनफ () द्वारा पढ़ा जा रहा है। . इस समस्या को हल करने के लिए '\ n' का उपयोग करने के लिए स्कैनफ () जैसे स्कैनफ ("% c \ n") में टाइप स्पेसियर के साथ; या दूसरा विकल्प यह है कि हम अतिरिक्त नई लाइन पढ़ने के लिए अतिरिक्त getchar() या scanf() का उपयोग कर सकते हैं।