Est-il possible d'avoir une boucle while en c ++ qui effectue la vérification au milieu de la boucle au lieu du début ou de la fin?
-
05-07-2019 - |
Question
Je souhaite qu'une boucle while fasse la même chose, mais est-ce possible en c ++? Si oui, comment se passe la syntaxe?
do {
//some code
while( expression to be evaluated );
// some more code
}
Je voudrais que la boucle soit sortie dès que l'instruction while décide que l'expression n'est plus vraie (c'est-à-dire si expression est fausse, // du code supplémentaire n'est pas exécuté)
La solution
Vous pouvez faire:
while (1) {
//some code
if ( condition) {
break;
}
// some more code
}
Autres conseils
Un peu de contexte et d’analyse: ce que vous demandez, j’ai entendu parler d’un " Dahl loop " ;, du nom d'Ole-Johan Dahl, de la renommée de Simula. Comme le dit Sean E., C ++ ne les a pas (à part la réponse de ima), à la différence de quelques autres langages (notamment Ada). Cela peut prendre la place de & do; while-do " et "pendant que vous faites" boucles, ce qui en fait une construction utile. Le cas plus général permet un nombre arbitraire de tests. Alors que C ++ n'a pas de syntaxe spéciale pour les boucles Dahl, les réponses de Sean McCauliff et d'AraK leur sont totalement équivalentes. Le " while (true) " boucle devrait être transformée en un saut simple par le compilateur, de sorte que la version compilée est complètement impossible à distinguer de la version compilée d’une hypothétique boucle Dahl. Si vous le trouvez plus lisible, vous pouvez aussi utiliser un
do {
...
} while (true);
Eh bien, je pense que vous devriez déplacer la condition au milieu de la boucle (?):
while (true)
{
...
// Insert at favorite position
if (condition)
break;
...
}
Techniquement, oui:
for ( ;CodeBefore, Condition; ) {CodeAfter}
La réponse est non, votre boucle ne peut pas se terminer automatiquement lorsque la condition que l'instruction while est supposée évaluer est vraie tant qu'elle n'a pas été évaluée en haut (ou en bas) de la boucle. L’instruction while ne peut pas être placée au milieu de la boucle.