Ce face while și do-while
while verifică condiția înainte de fiecare pas, deci corpul poate să nu ruleze deloc. do { } while (...); verifică după pas, deci corpul rulează cel puțin o dată, util pentru meniuri sau citirea repetată a unei valori până e validă.
Folosește while când nu știi dinainte câți pași vor fi: citirea liniilor dintr-un fișier, așteptarea unei condiții, un calcul care se repetă până atinge un prag. Asigură-te că ceva din corp schimbă condiția, altfel bucla nu se oprește.
Parametri
| Parametru | Descriere |
|---|---|
conditie |
Expresie bool. La do-while, după paranteză urmează obligatoriu ;. |
Exemple
Exemplul 1: Economii până la o sumă
Nu știm dinainte câte luni durează, așa că while e potrivit.
int economii = 0;
int luni = 0;
while (economii < 1000)
{
economii += 300;
luni++;
}
Console.WriteLine($"După {luni} luni: {economii} lei");
Rezultat
După 4 luni: 1200 lei
Exemplul 2: Citire până la o valoare validă
do-while cere numărul cel puțin o dată și repetă cât timp valoarea nu e validă. int.TryParse nu aruncă excepție la text greșit.
int nota;
do
{
Console.Write("Nota (1-10): ");
} while (!int.TryParse(Console.ReadLine(), out nota) || nota < 1 || nota > 10);
Console.WriteLine($"Ai introdus {nota}");
Ce scrie utilizatorul (intrare)
abc
12
9
Rezultat
Nota (1-10): Nota (1-10): Nota (1-10): Ai introdus 9
Greșeli frecvente
- Uitarea modificării variabilei din condiție dă o buclă infinită.
- Lipsa lui
;dupăwhile (...)lado-whileeste eroare de compilare. - Un
;pus din greșeală dupăwhile (conditie);(fărădo) face bucla goală, iar blocul de dedesubt rulează o singură dată, după ea (sau niciodată, dacă bucla e infinită).
Comenzi înrudite
for, break și continue: Repetă un bloc de cod cu un contor: inițializare, condiție și pas. break oprește bucla, continue sare la pasul următor.foreach: Parcurge pe rând fiecare element al unui tablou, al unei liste sau al oricărui IEnumerable, fără indice.int.Parse și int.TryParse: Transformă text în număr: Parse aruncă excepție la text invalid, TryParse returnează false și nu aruncă.