2016-03-03 26 views
8

यदि मैं नंबर 5 दर्ज करता हूं, तो इस लूप को 5 बार चलाना पड़ता है लेकिन यह 6 गुना चल रहा है। समस्या क्या है?लूप सी में निर्दिष्ट से अधिक चल रहा है? क्यूं कर?

यह:

int main(){ 
     int i, *arr, size; 
     printf("Please enter the Number: "); 
     scanf("%d ",&size); 
     arr = (int*) malloc(size * sizeof(int)); 
     for(i = 0; i < size; i++){ 
      scanf("%d ", &arr[i]); 
     } 
} 
+0

क्या आपने लूप से पहले आकार का मूल्य देखा था? – matt

+0

हां मैंने चेक किया। @ मैट –

+2

लूप स्कैनफ़ में% d के बाद स्थान को हटाने का प्रयास करें। –

उत्तर

23

scanf() प्रारूप स्ट्रिंग से पीछे अंतरिक्ष पाश में इस्तेमाल किया जा रहा निकालें।

यह int (%d) पढ़ने के बाद स्कैनफ() को सभी सफेद जगहों को त्यागने का कारण बनता है, जब तक कि ऐसा कुछ न हो जो व्हाइटस्पेस न हो। लूप के पांचवें पुनरावृत्ति पर, scanf()int पढ़ता है, और जब तक यह गैर-सफेद जगह नहीं पाता तब तक चलता रहता है। यह एक और पूर्णांक पढ़ने की आवश्यकता के भ्रम देता है।

scanf() की अंतिम कॉल पर, पूर्णांक डेटा के बाद कोई गैर-व्हाइटस्पेस वर्ण समाप्त होने का कारण बन जाएगा।

7

अंतरिक्ष यहाँ निकालें

scanf("%d ",&arr[i]); 
     ^

होना चाहिए:

scanf("%d",&arr[i]); 
+1

हां यह काम कर रहा है। लेकिन समस्या क्या है? –

+1

यह ['scanf'] से संबंधित है (http://www.cplusplus.com/reference/cstdio/scanf/) जो काफी जटिल है। इस पल के लिए परेशान मत करो। –

+1

कृपया कृपया मुझे स्रोत दें ताकि मैं जा सकूं और पढ़ सकूं? मुझे इसके बारे में जानने के लिए उत्सुकता है। @ माइकल वाल्ज़ –

0

मैं भी इसी तरह की समस्या का सामना करना पड़ा। इसे सही करने के लिए कृपया लूप में % d के बाद स्थान हटा दें। यह काम करना चाहिए। scanf की कुछ संपत्ति हो सकती है।

int main(){ 
     int i, *arr, size; 
     printf("Please enter the Number: "); 
     scanf("%d",&size);// Note the change here 
     arr= (int*) malloc(size * sizeof(int)); 
     for(i= 0;i < size;i++){ 
      scanf("%d",&arr[i]); 
     } 
    } 
+1

लेकिन समस्या क्या है? क्या आप समझा सकते हैं। –

+0

@ कुूल गाय किसी ने कोड संपादित किया.अब यह उचित है। –

संबंधित मुद्दे