8.10 Instrukcje zaniechania i kontunuacji

Wewnątrz pętli (for, do...whilewhile) 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 :


P53: sumadod.cpp     Instrukcja kontynuowania

      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):


P54: sumaazdo.cpp     Instrukcja zaniechania

      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 —  breakcontinue — mają formę „z etykietą”. Takiej formy w C/C++ nie ma.

T.R. Werner, 21 lutego 2016; 20:17