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ă
breakdintr-unswitchaflat într-o buclă oprește și bucla. Oprește doarswitch-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.