2011-05-23 13 views
5

जारी सोच एक do...while(false) पाश में क्या एक continue बयान करता है, मैं एक साधारण परीक्षण दर-मामला मज़ाक उड़ाया (छद्म कोड):बयान

count = 0; 
do { 
    output(count); 
    count++; 
    if (count < 10) 
     continue; 
}while (false); 

output('out of loop'); 

उत्पादन किया गया था, मेरे आश्चर्य:

0 
out of loop 

for (count = 0; count == 0; count++) { 
    output(count); 
    if (count < 10) 
     continue; 
} 
output('out of loop'); 
:

एक उलझन सा, मैं एक एक for करने के लिए do...while से पाश बदल

जबकि कार्यात्मक रूप से वही नहीं है, उद्देश्य व्यावहारिक रूप से वही है: एक शर्त केवल पहले पुनरावृत्ति को संतुष्ट करें, और अगले में जारी रखें (जब तक कि एक निश्चित मूल्य तक पहुंच न हो, पूरी तरह से संभव अनंत-लूप को रोकने के लिए।) वे शायद नहीं चलें वही मात्रा, लेकिन यहां कार्यक्षमता महत्वपूर्ण नहीं है।

उत्पादन पहले की तरह ही था:

0 
out of loop 

अब, एक सरल while पाश के संदर्भ में डाल दिया:

count = 0; 
while (count == 0) { 
    output(count); 
    count++; 
    if (count < 10) 
     continue; 
} 
output('out of loop'); 

एक बार फिर, एक ही उत्पादन।

यह थोड़ा उलझन में है, क्योंकि मैंने हमेशा continue कथन के बारे में "अगली पुनरावृत्ति पर कूदने" के बारे में सोचा है। तो, यहां मैं पूछता हूं: इनमें से प्रत्येक लूप में continue कथन क्या करता है? क्या यह सिर्फ स्थिति पर कूदता है?

((क्या इसके लायक है के लिए, मैं जावास्क्रिप्ट में ऊपर का परीक्षण किया है, लेकिन मेरा मानना ​​है कि यह भाषा-नास्तिक है ... js कम से कम यह सही पाने के लिए) के लिए किया था)

+0

@ ब्रैड और @ नील: नील सही है: मेरा गुस्से में। मैंने खुद को पैर में गोली मार दी। – abcd

उत्तर

5

पाश के लिए एक में, जारी रखने के लिए चलाता है कथन के लिए तीसरी अभिव्यक्ति (आमतौर पर किसी प्रकार के पुनरावृत्ति के रूप में उपयोग की जाती है), फिर स्थिति (दूसरी अभिव्यक्ति), और फिर लूप अगर स्थिति सत्य है। यह लूप के बाकी पुनरावृत्ति को चलाता नहीं है।

थोड़ी देर (या डू-टाइम) लूप में, यह स्थिति को चलाता है और फिर स्थिति को लूप करते समय लूप करता है। यह लूप के बाकी पुनरावृत्ति को भी चलाता नहीं है।

1

continue कथन की आपकी परिभाषा "अगले पुनरावृत्ति पर कूदें" सही है। यह कार्यक्रम को अगले पुनरावृत्ति को द्वारा सशर्त अभिव्यक्ति का पुन: मूल्यांकन करने के लिए मजबूर करेगा।

आपके स्निपेट्स की समस्या यह है कि वे सभी एक पुनरावृत्ति के बाद बाहर निकलते हैं क्योंकि आपकी सशर्त अभिव्यक्ति false या count ==0 पर सेट की जाती है। एक पुनरावृत्ति के बाद यह हमेशा झूठी वापसी करेगा।

इसके अलावा, लूप के अंत में जारी बयान देना अर्थहीन है। यह किसी भी मामले में सशर्त अभिव्यक्ति का पुनर्मूल्यांकन करेगा।

0

continue लूप में उपयोग होने पर अगले पुनरावृत्ति पर छोड़ देता है। break वर्तमान ब्लॉक से बाहर निकलता है। आम तौर पर, एक लूप से बाहर निकलने के लिए ब्रेक का उपयोग किया जाता है लेकिन इसका उपयोग किसी भी ब्लॉक से बाहर निकलने के लिए किया जा सकता है।

for (int i = 0; i < 1000; i++) { 
    if (some_condition) { 
    continue; // would skip to the next iteration 
    } 

    if (some_other_condition) { 
    break; // Exits the loop (block) 
    } 

    // other work 
} 
1

यह संलग्न पाश के अंत में कूद के रूप में continue के बारे में सोच करने के लिए। यह haelp हो सकता है:

#include <iostream> 
using namespace std; 

int main() { 

    int n = 0; 

    do { 
     cout << n << endl; 
     n += 1; 
     if (n == 3) { 
      continue; 
     } 
     cout << "n was not 3" << endl; 
    } while(n != 3); 

} 

जो प्रिंट:

0 
n was not 3 
1 
n was not 3 
2 

और समाप्त हो जाता है, क्योंकि पाश के अंत में, जबकि() करने के लिए छलांग जारी है। इसी तरह के कठोर() और जबकि() loops के लिए होता है।

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