2012-11-14 21 views
6
#include "stdio.h" 

int main(void) 
{ 

    int order, nextp, N=3; 
    char cont; 
    nextp = 0; 
    printf("\nShould we continue (y or n): "); 
    scanf("%c", &cont); 
    if (cont != 'y') return; 
    for(; nextp < N; nextp++) 
    { 
     printf("Enter order number: "); 
     scanf("%d", &order); 
     printf("you have entered %d\n", order); 
     printf("okay now continue with cont\n"); 


     printf("enter cont y or n: "); 
     scanf("%c", &cont); 
     if (cont != 'y') 
     { 
      printf("\nnot equal to y\n"); 
      break; 
     } 
     printf("after intepreting t[0]"); 
     } 

    return 0; 
} 

उत्पादन इसscanf इनपुट के लिए दूसरी बार

Should we continue (y or n): y 
Enter order number: 45 
you have entered 45 
okay now continue with cont 
enter cont y or n: 
not equal to y 

दूसरे इनपुट छोड़ दी गई थी की तरह लग रहा नहीं कहेंगे। क्यूं कर?

+0

इस पर एसओ पर एक अरब बार चर्चा की गई है। मौजूदा प्रश्नों पर थोड़ा सा शोध करने का प्रयास करें – fayyazkl

उत्तर

3

यही कारण है कि scanf आमतौर पर चरित्र इनपुट के लिए पसंदीदा नहीं है। पिछले इनपुट के बाद कैरिज रिटर्न पर एक बाएं है।

उदाहरण के लिए, यदि आप आदेश इनपुट के बाद getchar() जोड़ना चाहते हैं, तो आपकी समस्या हल हो जाएगी, लेकिन यह साफ़ कोड नहीं है। आप इसे cont != 'y' से cont != '\n' पर सब्सक्राइब करके स्पष्ट रूप से देख सकते हैं।

इसके बजाय, अपने सभी इनपुट के लिए getchar() का उपयोग करें और \ N के लिए जाँच

+0

ठीक है, मैं इसे थोड़ा सा कोशिश करूंगा। लेकिन मैंने 'fgets (..)' की कोशिश की और यह भी पीड़ित है और यह सुरक्षित होना चाहिए था। – user1012451

+0

फिर से, fgets अंत में नई लाइन शामिल है। मान इनपुट करने से पहले बस न्यूलाइन को शून्य से प्रतिस्थापित करें – John

3

scanf("%d", &order); के बाद (इस मामले में 45) नंबर की खपत, वहां अभी भी एक नई पंक्ति उस के बाद छोड़ दिया है। आप वापसी का उपभोग करने के लिए scanf("%d\n", &order) का उपयोग कर सकते हैं।

इस के लिए एक और जवाब यहां पाया जा सकता है:

scanf() leaves the new line char in buffer?

1

सबसे अधिक रूपांतरण scanf खाली स्थान के छोड़ देगा लिए, लेकिन चार प्रारूप ("% c") के लिए आप एक स्पष्ट अंतरिक्ष का उपयोग करके सफेद स्थान को छोड़ चाहिए प्रारूप ("% c") यहां बताए में:

C - trying to read a single char

यह भी scanf दस्तावेज में समझाया गया है, लेकिन यह भ्रामक है और कुछ ई उपयोग करने के लिए बेहतर हो सकता है जैसा कि दूसरों ने उल्लेख किया है।

1

आप fflush

printf("enter cont y or n: "); 
fflush(stdin); 
scanf("%c", &cont); 
8

न्यू लाइन चरित्र की वजह से पहले से ही stdin में उपयोग कर सकते हैं(), यह हो रहा है। % ग से पहले एक अंतरिक्ष

scanf(" %c", &cont); 

बजाय

scanf("%c", &cont); 

टिप्पणी का उपयोग करें।