मेरे पास निम्नलिखित कार्यक्रम हैं:
int main(int argc, char *argv[])
{
char ch1, ch2;
printf("Input the first character:"); // Line 1
scanf("%c", &ch1);
printf("Input the second character:"); // Line 2
ch2 = getchar();
printf("ch1=%c, ASCII code = %d\n", ch1, ch1);
printf("ch2=%c, ASCII code = %d\n", ch2, ch2);
system("PAUSE");
return 0;
}
जैसा कि उपरोक्त कोड के लेखक ने समझाया है: प्रोग्राम ठीक से काम नहीं करेगा क्योंकि लाइन 1 पर, जब उपयोगकर्ता एंटर दबाएगा, तो यह इनपुट बफर 2 चरित्र में छोड़ देगा: Enter key (ASCII code 13)
और \n (ASCII code 10)
। इसलिए, लाइन 2 पर, यह पढ़ेगा \n
और एक चरित्र में प्रवेश करने के लिए उपयोगकर्ता की प्रतीक्षा नहीं करेगा।
ठीक है, मुझे यह मिल गया। लेकिन मेरा पहला सवाल है: चरित्र के बजाय दूसरा getchar()
( ch2 = getchar();
) क्यों नहीं पढ़ा जाता है ?Enter key (13)
\n
इसके बाद, लेखक ने ऐसे प्रोब्लेम्स को हल करने के लिए 2 तरीके प्रस्तावित किए:
उपयोग
fflush()
इस तरह एक समारोह लिखें:
void clear (void) { while ( getchar() != '\n' ); }
इस कोड ने वास्तव में काम किया। लेकिन मैं खुद को नहीं समझा सकता कि यह कैसे काम करता है? क्योंकि जिस समय के कथन में हम उपयोग करते हैं getchar() != '\n'
, इसका मतलब है कि किसी एक वर्ण को छोड़कर '\n'
? यदि हां, तो इनपुट बफर में अभी भी '\n'
चरित्र बना हुआ है ?