Wewnątrz pętli (for, do...while i while) można użyć tzw. instrukcji kontynuacji continue. Oznacza ona zaniechanie wykonywania bieżącego obrotu najbardziej wewnętrznej pętli obejmującej tę instrukcję i przejście do jej następnego obrotu. W przypadku pętli for następną wykonywaną instrukcją będą zatem instrukcje wymienione w części inkrementującej, jeśli nie były pominięte. Innymi słowy, wszystkie instrukcje występujące w pętli po instrukcji continue traktowane są jak jedna instrukcja pusta.
W następującym programie funkcja
sumaDod
przegląda
tablicę liczb i oblicza sumę (która wynosi 17) wszystkich elementów
dodatnich — elementy ujemne są pomijane dzięki instrukcji
continue
z linii ➊:
1. #include <iostream>
2. using namespace std;
3.
4. int sumaDod(int *tab, int size) {
5. int suma = 0;
6. for (int i = 0; i < size; i++) {
7. if ( tab[i] <= 0 ) continue; ➊
8. suma += tab[i];
9. }
10. return suma;
11. }
12.
13. int main() {
14. int tab[] = { 1, -3, 5, -7, 2, 0, 9 };
15. int suma = sumaDod(tab,sizeof(tab)/sizeof(tab[0]));
16. cout << "Suma: " << suma << endl;
17. }
Instrukcja zaniechania
break
przerywa wykonywanie najbardziej
wewnętrznej pętli obejmującej tę instrukcję.
Modyfikując poprzedni program, można następująco obliczyć
sumę wszystkich elementów tablicy aż do napotkania elementu
niedodatniego — po napotkaniu takiego elementu pętla jest
przerywana i wszystkie następne elementy, i dodatnie i ujemne, są
ignorowane (wynikiem jest 16):
1. #include <iostream>
2. using namespace std;
3.
4. int sumaazdo(int *tab, int size) {
5. int suma = 0;
6. for (int i = 0; i < size; i++) {
7. if ( tab[i] <= 0 ) break; ➊
8. suma += tab[i];
9. }
10. return suma;
11. }
12.
13. int main() {
14. int tab[] = { 1, 3, 5, 7, 0, 4, 9 };
15. int suma = sumaazdo(tab, sizeof(tab)/sizeof(tab[0]));
16. cout << "Suma: " << suma << endl;
17. }
W linii ➊ pętla jest przerywana, jeśli napotkany został element zerowy lub ujemny.
Instrukcja break powoduje też zakończenie wykonywania instrukcji switch, o czym wspomnieliśmy przy okazji omawiania tej instrukcji (rozdz. w rozdziale o instrukcji switch ). Instrukcja continue oczywiście nie miałaby dla instrukcji wyboru sensu, gdyż nie jest ona w ogóle instrukcją iteracyjną wykonywaną cyklicznie (pętlą).
Uwaga dla znających Javę: w tym języku obie instrukcje — break i continue — mają formę „z etykietą”. Takiej formy w C/C++ nie ma.
T.R. Werner, 21 lutego 2016; 20:17