Ist es möglich, eine while-Schleife in C ++ zu haben, die den Scheck in der Mitte der Schleife statt am Anfang oder Ende macht?

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

Frage

Ich mag eine while-Schleife haben, so etwas wie die folgenden zu tun, aber das ist möglich in C ++? Wenn ja, wie funktioniert die Syntax gehen?


do {
    //some code
    while( expression to be evaluated );
    // some more code
}

Ich möchte die Schleife so schnell verlassen werden, wie die while-Anweisung den Ausdruck entscheidet ist nicht mehr wahr (das heißt, wenn Ausdruck falsch ist, // einige mehr Code nicht ausgeführt wird)

War es hilfreich?

Lösung

Sie können tun:

while (1) {
   //some code
   if ( condition) {
       break;
   }
   // some more code
}

Andere Tipps

Ein wenig Hintergrund und Analyse: was Sie fragen für mich ein „ Dahl Schleife “, benannt nach Ole-Johan Dahl von Simula Ruhm. Als Sean E. sagt, ist C ++ nicht haben sie (ima Antwort beiseite), obwohl einige andere Sprachen zu tun (vor allem, Ada). Es kann an die Stelle von „do-while“ nehmen und „while-do“ Loops, die es ein nützliches Konstrukt macht. Der allgemeinere Fall ermöglicht eine beliebige Anzahl von Tests. Während C ++ keine spezielle Syntax für Dahl Schleifen, Sean McCauliff und Antworten des Arak sind ihnen völlig gleichwertig. Die „while (true)“ Schleife sollte in einen einfachen Sprung vom Compiler gedreht werden, so dass die kompilierte Version ist völlig ununterscheidbar von einer kompilierten Version einer hypothetischen Dahl Schleife. Wenn Sie es besser lesbar zu finden, können Sie auch ein verwenden

do {
    ...
} while (true);

Nun, ich denke, man sollte die Bedingung für die Mitte der Schleife bewegen (?):

while (true)
{
  ...
  // Insert at favorite position
  if (condition)
    break;
  ...
}

Technisch ja:

 for ( ;CodeBefore, Condition; ) {CodeAfter}

Die Antwort ist nein, Sie nicht Ihre Schleife automatisch beendet haben können, wenn die Bedingung, dass die while-Anweisung soll beurteilen ist wahr, bis sie es tatsächlich an der Spitze bewertet (oder unten) der Schleife. Die while-Anweisung kann nicht in der Mitte der Schleife gesetzt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top