2011-11-28 7 views
9
#include <stdio.h> 

int main() 
{ 
    char loop='y'; 
    while(loop != 'n') { 
     printf("loop? "); 
     scanf("%c", &loop); 
     if(loop != 'y') { 
      loop='n'; 
     } 
    } 
    return 0; 
} 

यदि मैं 'y' टाइप करता हूं तो वह समय-लूप को पुनरारंभ करता है लेकिन दूसरी बार स्कैनफ को अनदेखा करता है और उसके बाद लूप समाप्त करता है। क्या कोई मदद कर सकता है?जबकि-लूप दूसरी बार स्कैनफ को अनदेखा करता है

+0

इस आलेख को देखें: http://www.gidnetwork.com/b-60.html –

+2

संभावित डुप्लिकेट [दूसरा स्कैनफ़ काम नहीं कर रहा है] (http://stackoverflow.com/questions/4023643/second-scanf -इस-काम नहीं कर रहा है) – AShelly

+2

संभव डुप्लिकेट [स्कैनफ सी में लूप जबकि हर दूसरे को छोड़ देता है] (http://stackoverflow.com/questions/1669821/scanf-skips-every-other-while-loop-in-c) –

उत्तर

15

सुनिश्चित करें कि scanf नई लाइन को छोड़ दें। इसे बदलें:

scanf(" %c", &loop); 
    ^
+0

thx, यह काम करता है। लेकिन मुझे% सी से पहले एक जगह क्यों डालना है? – user1069968

+2

@ user1069968 वह जगह 'स्कैनफ' को सभी सफेद जगहों (न्यूलाइन सहित) को अनदेखा करती है। – cnicutar

9

आपको शायद एक नई लाइन दर्ज करनी पड़े ताकि इनपुट आपके प्रोग्राम पर जा सके, है ना? दूसरी बार जब आपका लूप निष्पादित करता है तो वह उस न्यूलाइन कैरेक्टर को पढ़ता है, जो "प्रतीक्षा" पढ़ने के लिए था और स्वचालित रूप से लूप ('\n' != 'y') से बाहर निकलता है। आप scanf बजाय इस प्रारूप स्ट्रिंग का उपयोग करके खाली स्थान के उपेक्षा कर सकते हैं:

" %c" 
+0

यह इस धागे पर सबसे अच्छा समझाया गया उत्तर है। मेरी गर्लफ्रेंड होमवर्क सहेजने के लिए धन्यवाद! <3 –

+1

धन्यवाद @AustinWitherow, मुझे यह जानकर प्रसन्नता हो रही है कि यह आपके लिए उपयोगी था :) – sidyll

-1

एक समाधान उपयोग fflush(stdin)scanf() बयान के बाद इनपुट बफर स्पष्ट करने के लिए हो सकता है।

+1

'fflush (stdin) 'ने सी प्रोग्रामिंग में व्यवहार को अपरिभाषित किया है। यह कुछ प्रणालियों के उद्देश्य से काम कर सकता है, लेकिन यह सामान्य रूप से अच्छा अभ्यास नहीं है। –

+0

@ NisseEngström धन्यवाद निस, मैं आपके बिंदु से सहमत हूं। यह एक अच्छा अभ्यास नहीं है क्योंकि हम यहां देख सकते हैं https://stackoverflow.com/questions/9122550/fflushstdin-function-does-not-work –

+0

fflush stdin भी linux पर काम करता है लेकिन इसे खोकर इसका उपयोग करके इसे यूबी का उपयोग करने से बचें पोर्टेबिलिटी। – EsmaeelE