È possibile avere un ciclo while in c ++ che esegua il controllo nel mezzo del ciclo anziché all'inizio o alla fine?
-
05-07-2019 - |
Domanda
Voglio che un ciclo while faccia qualcosa come il seguente, ma è possibile in c ++? In tal caso, come va la sintassi?
do {
//some code
while( expression to be evaluated );
// some more code
}
Vorrei che il ciclo uscisse non appena l'istruzione while decide che l'espressione non è più vera (cioè se espressione è falsa, // non viene eseguito altro codice)
Soluzione
Puoi fare:
while (1) {
//some code
if ( condition) {
break;
}
// some more code
}
Altri suggerimenti
Un po 'di background e analisi: quello che stai chiedendo ho sentito chiamato a " Dahl loop " ;, dal nome di Ole-Johan Dahl della fama di Simula. Come afferma Sean E., C ++ non li ha (a parte la risposta di ima), anche se poche altre lingue lo fanno (in particolare, Ada). Può prendere il posto di "do-while" e " while-do " loop, che lo rende un costrutto utile. Il caso più generale consente un numero arbitrario di test. Mentre il C ++ non ha una sintassi speciale per i loop di Dahl, le risposte di Sean McCauliff e AraK sono completamente equivalenti a loro. Il " while (true) " il compilatore dovrebbe essere trasformato in un semplice salto dal compilatore, quindi la versione compilata è completamente indistinguibile da una versione compilata di un ipotetico ciclo Dahl. Se lo trovi più leggibile, puoi anche utilizzare un
do {
...
} while (true);
Beh, penso che dovresti spostare la condizione al centro del ciclo (?):
while (true)
{
...
// Insert at favorite position
if (condition)
break;
...
}
Tecnicamente sì:
for ( ;CodeBefore, Condition; ) {CodeAfter}
La risposta è no, non è possibile terminare automaticamente il ciclo quando la condizione che deve essere valutata dall'istruzione while è vera fino a quando non la valuta effettivamente nella parte superiore (o inferiore) del ciclo. L'istruzione while non può essere posizionata nel mezzo del ciclo.