Die Operatoren break und continue werden in Schleifenstrukturen (for, while, do..while) zur Steuerung des Programmflusses verwendet.
Besonderheiten:
break innerhalb von geschachtelten Schleifen führt nur zum Ausstieg aus der innersten Schleife.goto kann die Logik auf komplexe Weise beeinflusst werden.continue in while- und do..while-Schleifen kann zu unerwartetem Sprung im Kontrollfluss führen, wenn die Reihenfolge der Aktionen nicht berücksichtigt wird.Beispiel:
for (int i = 0; i < 5; ++i) { if (i == 2) continue; if (i == 4) break; printf("%d ", i); } // Gibt aus: 0 1 3
Wie verhält sich eine Schleife mit dem Operator continue, wenn sie komplexe Ausdrücke bei der Initialisierung und Aktualisierung des Zählers verwendet?
Häufig falsche Antwort:
Viele glauben, dass bei Ausführung von continue alle Ausdrücke innerhalb der Schleifenstruktur (zum Beispiel die Inkrementierung in for) nicht ausgeführt werden.
Richtige Antwort:
In einer for-Schleife wird bei Erreichen von continue der verbleibende Teil des Körpers der Schleife übersprungen, aber der Ausdruck zur Aktualisierung des Zählers (der dritte Teil des Ausdrucks in for) wird dennoch ausgeführt:
for (int i = 0; i < 3; printf("step %d ", i), ++i) { if (i == 1) continue; printf("%d ", i); }
Ausgabe:
0
step 0
step 1
2
step 2
Geschichte
Innerhalb einer Schleife über ein Array wurde continue verwendet, ohne den Zählerparameter explizit zu aktualisieren (in einer while-Schleife), was zu einer Endlosschleife führte.
Geschichte
Die verschachtelte Schleife zur Suche nach Übereinstimmungen löste break beim ersten Treffer aus, aber der Programmierer erwartete, dass die Schleife vollständig unterbrochen wird, sodass die Verarbeitung der anderen Elemente nicht korrekt durchgeführt wurde.
Geschichte
In der Konstruktion do..while, wo die äußere Schleife continue verwendete, wurde eine wichtige abschließende Operation vor dem Übergang zur nächsten Iteration übersprungen, was zu Datenverlust aufgrund falscher Zustandsänderung im Körper der Schleife führte.