2012-08-31 19 views
7

नेस्टेड लूप में तोड़ने पर क्या होता है?ब्रेक इन करते समय लूप

निम्नलिखित कोड लगता है:

for(int x = 0; x < 10; x++) 
{ 
    do { 
     if(x == 4) 
      break; 
     x++; 
    } while(x != 1); 
} 

कौन सा पाश तोड़ बयान, पाश या करते हैं, जबकि पाश के लिए का सामना पर बाहर निकल जाएगा?

+6

'break' केवल भीतरी पाश –

+0

से बाहर निकलने के लिए यह करते हैं/जबकि बाहर निकल जाएगा, यदि आप चाहते हैं आउटपुट लूप से बाहर निकलने के लिए आपको एक गोटो स्टेटमेंट के साथ रोल करना होगा ... – Shark

+2

आप बाहरी लूप से कई तरीकों से तोड़ सकते हैं। आप 'goto' कर सकते हैं, आप 'वापसी' कर सकते हैं, आप 'x = 10;' सेट कर सकते हैं, और इसी तरह। –

उत्तर

6

break हमेशा सबसे कम लूप को तोड़ देता है।

6.8.6.3

एक ब्रेक बयान छोटी से छोटी enclosing स्विच के निष्पादन या यात्रा बयान समाप्त हो जाता है।


तुम दोनों छोरों से बाहर तोड़ चाहते हैं, for के बाद एक लेबल का उपयोग करें और goto साथ कूद।

+0

धन्यवाद, लेकिन गेटो बिल्कुल वही बात थी जिसे मैं टालने की कोशिश कर रहा था, यह थोड़ा बदसूरत है लेकिन यह मेरी राय है। हालांकि यह शाखाओं के साथ असेंबली में सशर्त निष्पादन जैसा दिखता है। – sgupta

+0

@ user1075375 मुझे गोटो पसंद है। मैं समझता हूं कि यह सी ++ में खराब फॉर्म है और मैं बहस नहीं करूंगा। लेकिन सी में यह काफी अच्छा है :-) – cnicutar

+0

लूप के लिए एक अतिरिक्त स्थिति डालें जो सच नहीं होगा जब आप इसे तोड़ना चाहते हैं? – teppic

0

ब्रेक ब्रेक युक्त निकटतम/आंतरिकतम लूप को मार देगा। आपके उदाहरण में, ब्रेक डू-टाइम को मार देगा, और नियंत्रण() लूप के लिए वापस कूदता है, और बस() के अगले पुनरावृत्ति को शुरू करता है।

हालांकि, चूंकि आप दोनों() और के लिए() loops में x को संशोधित कर रहे हैं, निष्पादन थोड़ा गड़बड़ होने जा रहा है। बाहरी एक्स पहुंचने के बाद आप एक अनंत लूप का उत्पादन करेंगे 5.

+0

कोड सिर्फ इसके लिए था। – sgupta

0

जबकि टूट जाएगा और लूप चालू रहेगा।

4

वैकल्पिक रूप से, आप एक ध्वज का उपयोग कर सकते हैं का उपयोग नहीं करना चाहते हैं, तो goto:

int flag = 0; 

for(int x = 0; x < 10; x++) 
{ 
    do { 
     if(x == 4) { 
      flag = 1; 
      break; 
     } 
     x++; 
    } while(x != 1); 

if(flag) 
    break; // To break the for loop 
} 
+0

कैश में 4 बाइट्स और लूप में अतिरिक्त सशर्त जांच के कचरे पर विचार करते हुए, गोटो प्रदर्शन के बेहतर अंतर दिखाई देता है। और इसलिए, क्योंकि मैं लूप को कई बार निष्पादित करने की अपेक्षा करता हूं। – sgupta

+1

यदि आप प्रदर्शन के बाद थे, तो आप इस कोड को पहले स्थान पर नहीं लिखेंगे। लूप के लिए बाहरी होने की आवश्यकता नहीं है, अगर आप किसी विशेष मूल्य पर पहुंचने पर तोड़ने जा रहे हैं। – Floris

+0

यह वह कोड नहीं है जिसे मैंने लिखा था, यह केवल चित्रण उद्देश्य के लिए लोगों को समझने में मदद करने के लिए था कि मेरा क्या मतलब था। – sgupta