while și do-while în C# (.NET)

Repetă un bloc cât timp o condiție e adevărată; do-while execută blocul cel puțin o dată înainte de verificare.

Sintaxă C#
while (conditie) { ... }   do { ... } while (conditie);

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 (...) la do-while este 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ă.