break, continue în C++

break oprește imediat bucla sau switch-ul curent; continue sare peste restul pasului curent și trece la următorul.

Sintaxă
break;      // iese din bucla (sau switch-ul) curentă
continue;   // sare la următorul pas al buclei

Ce face break, continue

break iese imediat din cea mai apropiată buclă (for, while, do) sau din switch; execuția continuă după acel bloc. Este util când ai găsit ce căutai și nu mai are rost să continui.

continue nu oprește bucla: sare peste restul instrucțiunilor din pasul curent și trece la următorul pas (la for, se execută și partea de pas, de exemplu ++i).

Ambele afectează doar bucla cea mai interioară. Ca să ieși din mai multe bucle deodată, mută buclele într-o funcție și folosește return (sau, rar, goto).

Exemple

Exemplul 1: break: oprirea la primul rezultat

#include <print>
#include <string>
#include <vector>

int main() {
    std::vector<std::string> clienti = {"Ion", "Maria", "Ana", "Dan"};
    for (const auto& c : clienti) {
        std::println("Verific {}", c);
        if (c == "Ana") {
            std::println("Am găsit-o pe Ana!");
            break;
        }
    }
}

Rezultat

Verific Ion
Verific Maria
Verific Ana
Am găsit-o pe Ana!

Exemplul 2: continue: sărirea elementelor nedorite

Prețurile negative (greșite) sunt sărite; restul sunt adunate.

#include <print>
#include <vector>

int main() {
    std::vector<double> preturi = {12.5, -3, 40, -1, 7.5};
    double total = 0;
    for (double p : preturi) {
        if (p < 0) {
            continue;
        }
        total += p;
    }
    std::println("Total valid: {} lei", total);
}

Rezultat

Total valid: 60 lei

Exemplul 3: break afectează doar bucla interioară

La fiecare rând, break oprește doar bucla după j; bucla după i continuă.

#include <print>

int main() {
    for (int i = 1; i <= 3; ++i) {
        for (int j = 1; j <= 3; ++j) {
            if (j > i) break;
            std::print("({},{}) ", i, j);
        }
        std::println("");
    }
}

Rezultat

(1,1) 
(2,1) (2,2) 
(3,1) (3,2) (3,3)

Greșeli frecvente

  • Crezi că break dintr-un switch aflat într-o buclă oprește și bucla. Oprește doar switch-ul.
  • Folosești continue într-o buclă while înainte de linia care crește contorul. Contorul nu mai crește și bucla devine infinită.

Comenzi înrudite

  • for: Bucla cu contor: repetă un bloc de cod cât timp condiția este adevărată, cu inițializare și pas scrise pe același rând.
  • while: Repetă un bloc de cod cât timp condiția este adevărată; condiția este verificată înainte de fiecare trecere.
  • switch, case, default: Alege una dintre mai multe ramuri după valoarea unei expresii întregi, a unui caracter sau a unui enum.
  • goto: Sare direct la o etichetă din aceeași funcție; folosit foarte rar, de obicei doar pentru ieșirea din mai multe bucle imbricate.
  • return: Încheie funcția curentă și trimite, opțional, o valoare înapoi celui care a apelat-o.