Operatory break i continue są używane w konstrukcjach cyklicznych (for, while, do..while) do zarządzania przepływem wykonania.
Szczegóły:
break wewnątrz zagnieżdżonych pętli doprowadzi do wyjścia tylko z najbliższej pętli.goto można w skomplikowany sposób wpływać na logikę.continue w pętlach while i do..while może spowodować nieoczekiwane działanie przepływu kontroli, jeśli nie uwzględniono kolejności działań.Przykład:
for (int i = 0; i < 5; ++i) { if (i == 2) continue; if (i == 4) break; printf("%d ", i); } // Wyjście: 0 1 3
Jak zachowa się pętla z operatorem continue, jeśli używa złożonych wyrażeń przy inicjalizacji i aktualizacji licznika?
Częsta nieprawidłowa odpowiedź:
Wielu uważa, że przy wywołaniu continue wszystkie wyrażenia wewnątrz konstrukcji pętli (na przykład inkrementacja w for) nie zostaną wykonane.
Prawidłowa odpowiedź:
W pętli for, przy wywołaniu continue, pomijana jest pozostała część ciała pętli, ale wyrażenie aktualizacji licznika (trzecia część wyrażenia w for) jest nadal wykonywane:
for (int i = 0; i < 3; printf("krok %d ", i), ++i) { if (i == 1) continue; printf("%d ", i); }
Wyjście:
0
krok 0
krok 1
2
krok 2
Historia
Wewnątrz pętli po tablicy używano continue, zapominając o aktualizacji parametru-licznika w sposób jawny (w pętli while), co prowadziło do nieskończonej pętli.
Historia
Zagnieżdżona pętla w celu wyszukiwania dopasowań wywoływała break przy pierwszym dopasowaniu, ale programista spodziewał się, że pętla zostanie przerwana w całości, w rezultacie przetwarzanie pozostałych elementów nie było poprawne.
Historia
W konstrukcji do..while, gdzie główna pętla używała continue, pomijano kluczową operację końcową przed przejściem do następnej iteracji, co prowadziło do utraty danych z powodu niepoprawnej zmiany stanu wewnątrz ciała pętli.