समस्या यह बताती है कि यदि scanf के बाद fgets()/gets()/scanf() हो तो कामकाज या आउटपुट क्या होगा।
scanf() के बाद fgets()/gets()
उदाहरण
#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() और gets() का उपयोग रनटाइम पर यूजर से स्ट्रिंग इनपुट लेने के लिए किया जाता है। उपरोक्त कोड में जब हम चलाते हैं तो पूर्णांक मान दर्ज करने के बाद यह स्ट्रिंग मान नहीं लेगा क्योंकि जब हम पूर्णांक मान के बाद नई लाइन देते हैं, तो fgets() या gets() वांछित इनपुट "String" के बजाय नई लाइन को इनपुट के रूप में ले लेगा।
scanf() के बाद scanf()
बार-बार scanf() के बाद scanf() प्राप्त करने के लिए हम एक लूप का उपयोग कर सकते हैं।
उदाहरण
#include <stdio.h>
int main() {
int a;
printf("quit करने के लिए q दर्ज करें");
do {
printf("\nएक कैरेक्टर दर्ज करें और बाहर निकलने के लिए q");
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
व्याख्या
यहां हम एक अतिरिक्त लाइन 'enter a character and q to exit' देख सकते हैं एक अतिरिक्त नई लाइन के बाद, ऐसा इसलिए है क्योंकि हर बार scanf() बफर में एक नई लाइन कैरेक्टर छोड़ देता है जिसे इसके बाद आने वाले अगले scanf() द्वारा पढ़ा जाता है। इस समस्या को हल करने के लिए scanf() में टाइप स्पेसिफायर के साथ '\n' का उपयोग करें जैसे scanf("%c\n"); या दूसरा विकल्प है कि हम अतिरिक्त getchar() या scanf() का उपयोग करके अतिरिक्त नई लाइन पढ़ सकते हैं।