Les opérateurs break et continue sont utilisés dans les constructions cycliques (for, while, do..while) pour contrôler le flux d'exécution.
Détails :
break à l'intérieur de boucles imbriquées ne conduira à sortir que de la boucle la plus interne.goto, il est possible d'influencer logiquement de manière complexe.continue dans les boucles while et do..while peut entraîner un passage inattendu du flux de contrôle, si l'ordre des actions n'est pas pris en compte.Exemple :
for (int i = 0; i < 5; ++i) { if (i == 2) continue; if (i == 4) break; printf("%d ", i); } // Affichera : 0 1 3
Que se passe-t-il dans la boucle avec l'opérateur continue, si elle utilise des expressions complexes lors de l'initialisation et de la mise à jour du compteur ?
Réponse incorrecte fréquente :
Beaucoup pensent qu'à l'activation de continue, toutes les expressions à l'intérieur de la construction de la boucle (par exemple, l'incrémentation dans for) ne s'exécutent pas.
Réponse correcte :
Dans la boucle for, lorsqu'un continue est atteint, la partie restante du corps de la boucle est sautée, mais l'expression de mise à jour du compteur (la troisième partie de l'expression dans for) est tout de même exécutée :
for (int i = 0; i < 3; printf("step %d ", i), ++i) { if (i == 1) continue; printf("%d ", i); }
Sortie :
0
step 0
step 1
2
step 2
Histoire
À l'intérieur d'une boucle sur un tableau, continue a été utilisé sans mettre à jour le paramètre-compteur de manière explicite (dans une boucle while), ce qui entraînait une boucle infinie.
Histoire
Une boucle imbriquée pour chercher des correspondances s'est arrêtée avec break à la première correspondance, mais le programmeur s'attendait à ce que la boucle s'arrête complètement, ce qui a conduit à un traitement incorrect des autres éléments.
Histoire
Dans la construction do..while, où la boucle principale utilisait continue, une opération clé de terminaison a été sautée avant de passer à l'itération suivante, ce qui a conduit à une perte de données due à une modification incorrecte de l'état à l'intérieur du corps de la boucle.