Kurs C++: Pętle i Iteracje

Instrukcja break służy do natychmiastowego przerwania działania pętli i przejścia do pierwszej instrukcji po niej. Może być używana zarówno w pętlach (for, while, do...while), jak i w instrukcji switch.


1. Składnia i zasada działania

Instrukcja break jest umieszczana wewnątrz pętli i powoduje jej natychmiastowe zakończenie, niezależnie od warunku sterującego.

Przykład – ogólna składnia w pętlach:

while (warunek) {
    if (warunek_przerwania) {
        break;  // Przerywa pętlę natychmiast
    }
    // Kod wykonywany, jeśli warunek_przerwania nie został spełniony
}

Przykład w switch:

switch (zmienna) {
    case 1:
        cout << "Wybrano 1";
        break;  // Przerywa dalsze sprawdzanie case’ów
    case 2:
        cout << "Wybrano 2";
        break;
    default:
        cout << "Nieznana opcja";
}

2. Przykłady zastosowania w pętlach

2.1. Przerywanie pętli for

Jeśli chcemy zakończyć pętlę for, gdy napotkamy określoną wartość, możemy użyć break.

Przykład: Zatrzymanie pętli po znalezieniu liczby 5

#include <iostream>
using namespace std;

int main() {
    for (int i = 1; i <= 10; i++) {
        cout << "i = " << i << endl;
        if (i == 5) {
            cout << "Znaleziono 5! Kończę pętlę." << endl;
            break;
        }
    }
    cout << "Poza pętlą." << endl;
    return 0;
}

Wynik: Pętla zostanie przerwana po i == 5, mimo że normalnie powinna działać do i == 10.


2.2. Przerywanie pętli while

Pętla while będzie działać w nieskończoność, jeśli nie ma warunku kończącego. break może wymusić jej zatrzymanie.

Przykład: Pobieranie liczb od użytkownika, aż poda wartość 0

#include <iostream>
using namespace std;

int main() {
    int liczba;

    while (true) {  // Pętla nieskończona
        cout << "Podaj liczbę (0 kończy program): ";
        cin >> liczba;

        if (liczba == 0) {
            cout << "Kończę program!" << endl;
            break;
        }
    }
    return 0;
}

Wynik: Program zakończy się, gdy użytkownik wpisze 0, niezależnie od tego, jak długo podaje inne liczby.


2.3. Przerywanie pętli do...while

Pętla do...while wykona się co najmniej raz, ale może zostać zatrzymana przez break.

Przykład: Prośba o podanie poprawnego hasła

#include <iostream>
using namespace std;

int main() {
    string haslo;
    string poprawneHaslo = "tajne";

    do {
        cout << "Podaj hasło: ";
        cin >> haslo;

        if (haslo == poprawneHaslo) {
            cout << "Hasło poprawne! Dostęp przyznany." << endl;
            break;
        } else {
            cout << "Niepoprawne hasło, spróbuj ponownie!" << endl;
        }
    } while (true);

    return 0;
}

Wynik: Pętla zakończy się natychmiast po wpisaniu poprawnego hasła.


3. Przerywanie zagnieżdżonych pętli

Jeśli break zostanie użyte w zagnieżdżonej pętli, przerwie tylko najbliższą pętlę.

Przykład: Przerywanie wewnętrznej pętli

#include <iostream>
using namespace std;

int main() {
    for (int i = 1; i <= 3; i++) {
        for (int j = 1; j <= 3; j++) {
            cout << "i = " << i << ", j = " << j << endl;
            if (j == 2) {
                cout << "Przerywam wewnętrzną pętlę, ale zewnętrzna działa dalej." << endl;
                break;
            }
        }
    }
    return 0;
}

Wynik: Tylko wewnętrzna pętla (j) zostaje przerwana, i nadal działa.


4. Jak całkowicie zatrzymać zagnieżdżone pętle?

Aby przerwać wszystkie pętle, można użyć flagi sterującej lub goto.

Przykład: Przerwanie obu pętli

#include <iostream>
using namespace std;

int main() {
    bool przerwij = false;

    for (int i = 1; i <= 3; i++) {
        for (int j = 1; j <= 3; j++) {
            cout << "i = " << i << ", j = " << j << endl;
            if (j == 2) {
                przerwij = true;
                break; // Przerywa tylko pętlę wewnętrzną
            }
        }
        if (przerwij) break; // Przerywa również pętlę zewnętrzną
    }
    return 0;
}

Zaleta: Przerwanie obu pętli bez użycia goto.


5. break a continue – różnice

InstrukcjaDziałanie
breakKończy całą pętlę i przechodzi do dalszego kodu
continuePomija bieżącą iterację, ale nie przerywa pętli

Przykład: Pomiń i == 3, ale nie przerywaj pętli

for (int i = 1; i <= 5; i++) {
    if (i == 3) {
        continue;  // Pomiń 3, ale kontynuuj pętlę
    }
    cout << "i = " << i << endl;
}

Wynik: Pętla działa dla 1, 2, 4, 5, ale 3 jest pominięte.


Podsumowanie

  • break natychmiast przerywa pętlę, niezależnie od warunku sterującego.
  • Stosujemy go w: ✅ Przerywaniu pętli, gdy wystąpi określony warunek.
    ✅ Wyjściu z nieskończonej pętli (while (true)).
    ✅ Obsłudze menu, gier, walidacji danych.
  • break w zagnieżdżonych pętlach przerywa tylko najbliższą pętlę.
  • Aby całkowicie zatrzymać zagnieżdżone pętle, można użyć flagi sterującej.