Ce face while
while verifică întâi condiția: dacă este adevărată, execută blocul și apoi verifică din nou. Dacă este falsă de la început, blocul nu se execută deloc.
Folosește while când nu știi dinainte de câte ori se repetă: citirea datelor până la sfârșit, împărțiri repetate, așteptarea unei condiții. Când ai un contor clar, for este mai potrivit.
Ceva din interiorul buclei trebuie să facă, la un moment dat, condiția falsă; altfel bucla nu se termină. while (true) cu break în interior este o formă des întâlnită.
Exemple
Exemplul 1: Suma cifrelor unui număr
#include <print>
int main() {
int numar = 2025;
int suma = 0;
int copie = numar;
while (copie > 0) {
suma += copie % 10; // ultima cifră
copie /= 10; // o tăiem
}
std::println("Suma cifrelor lui {} este {}", numar, suma);
}
Rezultat
Suma cifrelor lui 2025 este 9
Exemplul 2: Citire până la sfârșitul datelor
std::cin >> x devine fals când nu mai sunt numere de citit, deci bucla se oprește singură.
#include <iostream>
#include <print>
int main() {
double suma = 0, valoare = 0;
int bonuri = 0;
while (std::cin >> valoare) {
suma += valoare;
++bonuri;
}
std::println("{} bonuri, total {:.2f} lei", bonuri, suma);
}
Ce scrie utilizatorul (intrare)
120 45.5 300 80
Rezultat
4 bonuri, total 545.50 lei
Exemplul 3: Economii până la o țintă
#include <print>
int main() {
double economii = 1000;
int ani = 0;
while (economii < 2000) {
economii *= 1.07; // dobândă 7% pe an
++ani;
}
std::println("După {} ani: {:.2f} lei", ani, economii);
}
Rezultat
După 11 ani: 2104.85 lei
Greșeli frecvente
- Uiți să actualizezi variabila din condiție (
while (i < 10) { ... }fără++i). Bucla nu se mai termină. - Pui
;după condiție:while (x > 0);. Bucla are corp gol și, dacă condiția e adevărată, programul se blochează. - Scrii
while (!std::cin.eof())pentru citire. Ultima citire eșuată este procesată ca valoare validă; pune citirea direct în condiție:while (std::cin >> x).
Comenzi înrudite
do ... while: Buclă care execută blocul cel puțin o dată și abia apoi verifică condiția.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.break, continue: break oprește imediat bucla sau switch-ul curent; continue sare peste restul pasului curent și trece la următorul.if, else: Execută un bloc de cod doar dacă o condiție este adevărată; else oferă varianta pentru cazul contrar.std::cin: Citește valori de la tastatură în variabile, cu operatorul >>.