2013-02-18 6 views
7

Molte volte negli esempi di programmi C mi sono imbattuto in questo tipo di loop. Cosa fanno davvero questi tipi di loop?Semplice mentre si usa il ciclo while (vero);

do { 

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

    // Some new condition is checked. 

} while(true); 

Qual è la necessità di while(true); E 'utilizzato per loop infinito? Qualcuno può spiegare cosa fa realmente il ciclo sopra. Sono nuovo di programmazione C

+3

Non ho mai visto un 'do while (true)'. È un ciclo infinito, ma il modo idiomatico (e chiaro) di scriverne uno se per (;;) '. –

risposta

1

sì, è utilizzato per loop infinito, in questo caso le migliori prassi è quella di uscire da guardare su una condizione

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

In C tutti i loop ciclo mentre una condizione è vera. Quindi un esplicito true nella condizione significa davvero "loop while true è true" e quindi loop per sempre.

+1

In 'for (;;)' dove o qual è la condizione? :-) – Jens

+0

@Jens Ho solo accesso alle specifiche C++ 11, ma dice che un ciclo 'for' è equivalente a un ciclo' while', e §2 della sezione 6.5.3 dice "Una condizione mancante rende la clausola implicita 'while' equivalente a' while (true) '" –

+1

@Jens In 6.8.5.3 (2): "Un'omessa _expression-2_ è sostituita da una costante non nulla ", dove _expression-2_ è la condizione del ciclo. Quindi la condizione è implicitamente inserita se non ne scrivi una (ma ovviamente sotto la regola as-if, avrai spesso un salto incondizionato). –

0

Questo ciclo è infinito e se si intende terminare il programma con tale interruzione è necessario avere un'istruzione break o return (o in alcuni casi lanciare un'eccezione) in determinate condizioni in tale ciclo altrimenti tale programma mai terminare.

+0

Oppure usa 'goto' ... –

0

Un ciclo infinito è utile se il controllo di stop-condizione può non essere fatto di fronte (come con for e while), né sul retro (come con do{}while). Invece basta un ciclo per sempre e nel mezzo del codice è possibile verificare una condizione e interrompere: if(something) break;.

0

volte lo usiamo per esempio:

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

un esempio da Windows API Winsock, in questo modo è possibile ascoltare da una porta.

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

Questo ciclo viene eseguito in modo infinito e può risultare in un errore di runtime se non arrestato. Se stai facendo questo tipo di loop, assicurati di avere una frase break all'interno per assicurarti che il tuo loop si fermi ad un certo punto.

Simile a questo

if(condition) 
    break; 

Se il programma ha raggiunto un certo punto in cui la condizione è vera, finirà automaticamente il ciclo do-while e procedere al codice dopo.

0

Il fattore generale differenziazione tra i seguenti cicli:

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

è che il primo è utilizzato per cicli che accadono nullo o più volte mentre il secondo è di cicli che accadono uno o più tempo .

In altre parole, la condizione per while viene verificata all'inizio del ciclo e per do while, viene controllata alla fine.

Spesso vedrete codice in cui gli sviluppatori non sembrano sapere su do-while in che faranno scrivono:

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

che potrebbe essere meglio scritto come:

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

Tuttavia, nel caso specifico in cui la condizione è sempre true, non ha molta importanza. I seguenti cicli sono sostanzialmente equivalenti (utilizzando 1 per il vero e proprio caso):

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

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

while (doSomething(),1); 

BADPAX: doSomething(); goto BADPAX; 

La prima for ciclo è probabilmente il modo canonico di fare un ciclo infinito, approfittando del fatto che, se si omette la condizione di continuazione per il ciclo, presuppone che sia sempre vero.

Il secondo ciclo for sposta semplicemente il corpo del loop nella parte di iterazione dell'istruzione for.

Il primo while viene talvolta visto anche in natura, il do-while probabilmente meno. L'unica differenza qui è che i loop precedenti controllano per sempre il loop in alto, il secondo loop per sempre controlla il fondo del loop.

Il while ciclo finale sta usando l'operatore virgola C in un modo che probabilmente non dovrebbe :-)

Questo ultimo è molto raro al giorno d'oggi, ma è probabilmente quello che tutti ottimizzano fino al a livello di codice macchina.

3

Questi loop vengono utilizzati quando si desidera eseguire il ciclo per sempre e la condizione di interruzione dal ciclo non è nota. Le condizioni di certiaina sono impostate all'interno del ciclo insieme a interruzione o restituiscono le istruzioni per uscire dal ciclo. Per esempio:

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

Questi cicli sono come qualsiasi altro ciclo while con condizione per fermare il ciclo è nel corpo del ciclo while altrimenti sarà correre per sempre (che non è mai l'intenzione di una parte della codice fino a quando richiesto, quindi). Dipende dalla logica del programmatore solo ciò che lui/lei vuole fare.