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