मैं सी में लूप के बारे में पढ़ रहा था, मुझे कोड की एक दिलचस्प लाइन मिली, जिसे मैं वास्तव में समझ नहीं पाया। अगर कोई मुझे यह लाइन समझा सकता है तो मैं सराहना करता हूं: for (; count>0; count--, j++)

लेकिन पूरा कोड इस तरह था:

while(getline(&line, &count, input) != -1) 
{
  for ( ; count>0; count--, j++)
    sscanf(line, "%d", &array[i]);
  i++;
}

पाठ फ़ाइल में संग्रहीत संख्याओं के अनुक्रम को पढ़ने के लिए चर count size_t प्रकार, int i,j = 0 और FILE *input; है।

अग्रिम में धन्यवाद।

1
Nusha_Gadim 29 जून 2017, 12:00

3 जवाब

for (; count>0; count--, j++) का अर्थ है:

  • कुछ न करें (;;
    यह वह जगह है जहां आमतौर पर लूप कंट्रोल वेरिएबल्स को इनिशियलाइज़ किया जाता है,
    लेकिन अगर वह पहले से ही किया जा चुका है, तो कुछ भी नहीं करना ठीक है
  • लूपिंग शुरू करें
    • यदि गिनती 0 से अधिक है, count>0;, तो शरीर करें,
      अन्यथा शरीर के बाद जारी रखें
    • फिर डिक्रीमेंट काउंट और इंक्रीमेंट j count--, j++)
  • कुंडली
2
Yunnosch 29 जून 2017, 12:08

चूंकि उसने पहले ही वेरिएबल घोषित कर दिया है जिसे वह बढ़ाना चाहता है, वह इसे लूप में फिर से घोषित नहीं करता है। वह लूप के प्रत्येक मोड़ पर दो चर भी बदलता है, वह गिनती और वेतन वृद्धि जे घटाता है। जरूरत पड़ने पर sscanf definition। उन्होंने मूल रूप से एक फाइल पढ़ी।

0
LamaDelRay 29 जून 2017, 12:06

आइए उस कोड लाइन की जांच करें जो आपको भ्रमित करती है।

for (; count>0; count--, j++){
    statement
}

निष्पादित करता है statement जबकि count>0। यह बार-बार count--, j++ करता है जहां , अल्पविराम ऑपरेटर है। यह ऑपरेटर निम्न कार्य करता है:

expression1, expression2

expression1 का मूल्यांकन करता है, फिर expression2 का मूल्यांकन करता है और expression2 का मान पूरे व्यंजक के मान के रूप में देता है।

चूँकि यहाँ count--,j-- के मान का उपयोग नहीं किया गया है, यह केवल count-- के बाद j-- कर रहा है।

for-लूप का हर तर्क वैकल्पिक है इसलिए for(;;) भी वैध है और while(1) के बराबर है।

0
dtell 29 जून 2017, 12:20