2013-02-18 61 views
7

सी कार्यक्रमों के उदाहरणों में कई बार, मैं इस तरह के लूपों में आया था। वास्तव में इन तरह के लूप क्या करते हैं?सरल (जबकि) का उपयोग करते हुए लूप करें;

do { 

    while (...) // Check some condition if it is true. 
    { 
     calculation 1 
    } 

    // Some new condition is checked. 

} while(true); 

while(true); की जरूरत यह अनंत पाशन के लिए इस्तेमाल किया है क्या है? क्या कोई कृपया बता सकता है कि उपर्युक्त लूप वास्तव में क्या करता है। मैं सी प्रोग्रामिंग करने के लिए नया हूँ

+3

मैंने कभी नहीं देखा (सत्य) '। यह एक अनंत लूप है, लेकिन '(;;) 'के लिए एक लिखने के लिए मूर्ख (और स्पष्ट) तरीका है। –

उत्तर

1

हाँ यह, अनंत पाशन के लिए प्रयोग किया जाता है इस मामले में सबसे अच्छा अभ्यास सभी छोरों पाश एक शर्त

do { 

    while() //check some condition if it is true 
    { 
    calculation 1 
    } 

    //some new condition is checked,if condition met then break out of loop 


    } while(true); 
0

पर नज़र से बाहर तोड़ सी में जबकि एक शर्त सत्य है। तो इस स्थिति में एक स्पष्ट true का अर्थ है "लूप जबकि true सत्य है" और इसलिए हमेशा के लिए लूप।

+1

'के लिए (;;)' कहां या स्थिति क्या है? :-) – Jens

+0

@ जेन्स I के पास केवल सी ++ 11 स्पेक तक पहुंच है, लेकिन यह कहता है कि 'फॉर लूप' लूप के समतुल्य है, और धारा 6.5.3 के §2 में कहा गया है "एक लापता स्थिति बनाता है 'जबकि (सत्य)' –

+1

@Jens 6.8.5.3 (2) में समकक्ष '' '' क्लॉज समतुल्य है: "एक छोड़ा गया _expression-2_ nonzero निरंतर" द्वारा प्रतिस्थापित किया गया है, जहां _expression-2_ लूप स्थिति है। इसलिए यदि आप एक नहीं लिखते हैं तो शर्त पूरी तरह से डाली जाती है (लेकिन निश्चित रूप से यदि नियम के तहत, आपको अक्सर बिना शर्त कूद मिल जाएगी)। –

0

इस लूप अनंत है और यदि आप अपने कार्यक्रम कभी इस तरह के साथ समाप्त कलम आप की आवश्यकता करने के लिए या तो एक break या एक return (या कुछ मामलों में एक अपवाद फेंक) बयान दिया शर्त के तहत इस तरह के पाश में अन्यथा इस तरह के कार्यक्रम होगा कभी खत्म नहीं करें।

+0

या 'goto' का उपयोग करें ... –

0

एक अनंत लूप उपयोगी रोकने के हालत की जांच न (for और while साथ के रूप में) है और न ही वापस (do{}while साथ के रूप में) पर सामने से किया जा सकता है, तो है। इसके बजाय आप हमेशा के लिए लूप हमेशा और कोड के बीच में आप एक शर्त की जांच कर सकते हैं और तोड़ सकते हैं: if(something) break;

0

कभी कभी हम उदाहरण के लिए इसका इस्तेमाल करते हैं:

do 
    recv(s , &buf, len, flags); 
while(true) 

विनसॉक Windows API से एक उदाहरण, इस तरह से आप एक बंदरगाह से सुन सकते हैं।

0
do { 
    // code here 
} while(true); 

यह लूप असीम रूप से चलता है, और अगर इसे रोका नहीं जाता है तो इसका परिणाम रनटाइम एरोर हो सकता है। यदि आप इन प्रकार के लूप कर रहे हैं, तो सुनिश्चित करें कि आपका लूप किसी बिंदु पर रुक जाएगा, यह सुनिश्चित करने के लिए अंदर एक ब्रेक स्टेटमेंट होना सुनिश्चित करें।

इस

if(condition) 
    break; 

तो अपने कार्यक्रम कुछ बिंदु जहां हालत सच है पहुँच की तरह, यह स्वचालित रूप से करते हैं-जबकि पाश अंत और उसके बाद कोड के लिए आगे बढ़ना होगा।

0

निम्नलिखित छोरों के बीच सामान्य कारक:

while (condition) {action} 
do {action} while (condition) 

जबकि दूसरी छोरों कि एक या उससे अधिक समय हो के लिए है कि पूर्व छोरों कि ऐसा शून्य या अधिक बार के लिए इस्तेमाल किया जाता है ।

दूसरे शब्दों में, लूप की शुरुआत में while की स्थिति की जांच की जाती है, और do while के लिए, यह अंत में चेक किया गया है।

अक्सर आप कोड जहां डेवलपर्स प्रतीत नहीं देखेंगे पता है कि में के बारे में do-while वे लिखेंगे:

result = doSomething(); 
while (result == NOT_FINISHED) { 
    result = doSomething(); 
} 

जो बेहतर रूप में लिखा जा सकता है:

do { 
    result = doSomething(); 
} while (result == NOT_FINISHED); 

हालांकि, आपके विशिष्ट मामले में जहां स्थिति हमेशा true है, यह वास्तव में कोई फर्क नहीं पड़ता। निम्नलिखित लूप बने हैं मूल रूप से बराबर (सच मामले के लिए 1 उपयोग करते हुए):

for (;;) { doSomething(); } 
for (;;doSomething()); 

while (1) { doSomething(); } 
do { doSomething(); } while (1); 

while (doSomething(),1); 

BADPAX: doSomething(); goto BADPAX; 

पहले for पाश शायद अनंत लूप कर रही है, इस तथ्य का लाभ लेने के विहित तरीका है, आप निरंतरता शर्त को छोड़ देते हैं, तो लूप के लिए, यह हमेशा सत्य होने लगता है।

दूसरा for लूप सिर्फ लूप बॉडी को for कथन के प्रति-पुनरावृत्ति भाग में ले जा रहा है।

पहले while को कभी-कभी जंगली में देखा जाता है, do-while शायद कम है। यहां एकमात्र भेद यह है कि पूर्व लूप हमेशा लूप टॉप पर जांच कर रहे हैं, बाद वाले लूप हमेशा लूप तल पर जांच कर रहे हैं।

अंतिम while पाश एक तरह से सी अल्पविराम ऑपरेटर उपयोग कर रहा है तो आप शायद कभी नहीं करना चाहिए :-)

पिछले एक आजकल बहुत दुर्लभ है लेकिन क्या वे सब मशीन कोड के स्तर पर करने के लिए नीचे का अनुकूलन शायद है।

3

ये लूप का उपयोग तब किया जाता है जब कोई हमेशा के लिए लूप करना चाहता है और लूप से ब्रेक आउट की स्थिति ज्ञात नहीं है। लूप के बाहर आने के लिए ब्रेक या वापसी कथन के साथ कुछ स्थितियों को लूप के अंदर सेट किया गया है। उदाहरण के लिए:

while(true){ 
    //run this code 
    if(condition satisfies) 
     break; //return; 
} 

इन छोरों जबकि रोकने के लिए शर्त के साथ पाश पाश जबकि पाश के शरीर अन्यथा यह हमेशा के लिए चला जाएगा में है (जो का एक हिस्सा के इरादे कभी नहीं है किसी भी अन्य की तरह हैं कोड आवश्यक होने तक)। यह प्रोग्रामर के तर्क पर निर्भर करता है कि वह क्या करना चाहता है।