È possibile avere un ciclo while in c ++ che esegua il controllo nel mezzo del ciclo anziché all'inizio o alla fine?

StackOverflow https://stackoverflow.com/questions/1807110

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)

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top