Wykonanie instrukcji skoku przenosi sterowanie w inne miejsce programu. Ma ona postać
goto etykieta;gdzie etykieta jest etykietą pewnej instrukcji wewnątrz tej samej funkcji. Sterowanie zostanie przeniesione właśnie do tej instrukcji.
W zasadzie język dopuszcza najdziwniejsze skoki, ale należy unikać
skoków do wnętrza instrukcji złożonych (choć formalnie takie
skoki są legalne, jeśli tylko nie omijają deklaracji z inicjatorami).
Najczęściej używa się instrukcji
goto
aby wyjść
z wnętrza zagnieżdżonych pętli, jak w następującym programie:
1. #include <iostream>
2. using namespace std;
3.
4. int main() {
5. const int st_size = 7;
6.
7. int oceny[][st_size] = { { 5, 4, 3, 3, 3, 4, 4 },
8. { 5, 3, 3, 3, 4, 2, 3 },
9. { 4, 4, 4, 4, 3, 3, 5 } };
10.
11. int gr_size = sizeof(oceny)/sizeof(oceny[0]);
12.
13. bool jestDwoja = false;
14.
15. for (int grupa = 0; grupa < gr_size; grupa++) ➊
16. for (int student = 0; student < st_size; student++)
17. if ( oceny[grupa][student] == 2 ) {
18. jestDwoja = true;
19. goto KONIEC;
20. }
21. KONIEC: ➋
22. if (jestDwoja) cout << "Byla dwojka" << endl;
23. else cout << "Nie ma dwojki" << endl;
24. }
W zagnieżdżonej pętli rozpoczynającej się w linii ➊ szukamy oceny niedostatecznej w dwuwymiarowej tablicy ocen indeksowanej numerem grupy i numerem studenta. Ponieważ interesuje nas tylko, czy jest choć jedna ocena niedostateczna, w momencie, gdy taką znajdziemy, chcemy wyjść z obu pętli. Zauważmy, że instrukcja break przerwałaby tylko pętlę wewnętrzną; pętla po grupach byłaby kontynuowana. Dlatego użyliśmy instrukcji goto, która „wyrzuca” nas od razu z obu pętli aż do linii ➋.
T.R. Werner, 21 lutego 2016; 20:17