Pętla while w C# — jak działa i kiedy używać

Pętli while używamy, gdy chcemy powtarzać kod, ale nie znamy z góry liczby iteracji — powtarzamy go tak długo, jak długo spełniony jest pewien warunek.
Jak działa pętla while
Pętla while wykonuje blok kodu tak długo, jak długo warunek (wyrażenie logiczne) jest prawdziwy. Warunek sprawdzany jest przed każdą iteracją — gdy staje się fałszywy, pętla się kończy. Jeśli warunek jest fałszywy już na starcie, ciało pętli nie wykona się ani razu. To odróżnia ją od pętli do…while, która sprawdza warunek dopiero na końcu.
⚠️ Ważne: warunek musi w końcu stać się fałszywy. W przeciwnym razie powstanie pętla nieskończona, która obciąży procesor i zablokuje program.
Składnia
while (warunek)
{
// blok kodu wykonywany, dopóki warunek jest prawdziwy
}- warunek – wyrażenie typu
bool(wymagane); dopóki jesttrue, pętla działa.
Działający przykład
int i = 0;
while (i < 5)
{
Console.WriteLine(i); // 0, 1, 2, 3, 4
i++; // krok zbliżający do zakończenia
}Zwróć uwagę na i++ — bez zmiany zmiennej sterującej warunek i < 5 byłby zawsze prawdziwy i pętla nigdy by się nie zakończyła.
Praktyczny idiom: wczytywanie aż do końca danych
Bardzo częsty, produkcyjny wzorzec — while z przypisaniem wewnątrz warunku, używany do czytania kolejnych linii pliku aż do napotkania null:
using var reader = new StreamReader("dane.txt");
string? linia;
while ((linia = reader.ReadLine()) != null)
{
Console.WriteLine(linia);
}Nawiasy wokół linia = reader.ReadLine() są konieczne — bez nich kompilator próbowałby porównać wynik przypisania z null w innej kolejności (operator przypisania ma niższy priorytet niż !=) i kod się nie skompiluje.
Jak uniknąć pętli nieskończonej
Dwie najważniejsze zasady:
- Zadbaj o postęp – w każdej iteracji rób krok, który zbliża warunek do wartości fałszywej (np.
i++, pobranie kolejnego elementu, zmiana stanu). - Porównuj zakresem, nie dokładną równością – używaj
i < n(lubi <= n) zamiasti == n. Przy porównaniu==łatwo „przeskoczyć” wartość docelową (np. iterując co 2 nigdy nie trafisz w liczbę nieparzystą), a wtedy warunek nigdy nie zostanie spełniony.
// ❌ ryzykowne: jeśli krok przeskoczy 10, pętla nie skończy się nigdy
int x = 0;
while (x != 10)
{
x += 3; // 0, 3, 6, 9, 12, 15... nigdy dokładnie 10
}
// ✅ bezpiecznie: porównanie zakresem
int y = 0;
while (y < 10)
{
y += 3; // kończy się, gdy y osiągnie lub przekroczy 10
}Pętla nieskończona „celowo”
Czasem pętla nieskończona jest zamierzona (np. pętla zdarzeń serwera albo gry), a wyjście z niej realizujemy instrukcją break lub tokenem anulowania:
while (true)
{
// ...
if (czyZakonczyc)
{
break;
}
}Kiedy używać while?
Wybieraj while, gdy liczba powtórzeń zależy od warunku sprawdzanego w trakcie działania (np. czytanie danych aż do końca strumienia, ponawianie próby do skutku). Gdy liczba iteracji jest znana z góry — czytelniejsza będzie pętla for. Gdy ciało musi wykonać się co najmniej raz — sięgnij po do…while.
💡 W Visual Studio: wpisz
whilei naciśnij dwukrotnie Tab, aby wstawić szkielet pętli.
FAQ
Czym różni się while od do…while?while sprawdza warunek przed pierwszym wykonaniem ciała — jeśli jest fałszywy od razu, ciało nie wykona się ani razu. do…while sprawdza warunek na końcu, więc ciało zawsze wykona się co najmniej raz.
Czy while(true) to zły styl?
Nie, o ile pętla ma jasny, kontrolowany punkt wyjścia (break albo return) — to standardowy wzorzec dla pętli zdarzeń i serwerów nasłuchujących w nieskończoność.
🚀 Co dalej?
Zobacz to w praktyce na wideo i pobierz darmową roadmapę, żeby ułożyć naukę w spójną ścieżkę do pierwszej pracy.
- 🗺️ Pobierz darmową roadmapę Junior .NET Developer — 12 kroków od podstaw C# do pierwszej pracy: dev-hobby.pl
- 🎬 Subskrybuj kanał YouTube — nowe filmy co tydzień.
7 comments
Dodaj komentarz
Musisz się zalogować, aby móc dodać komentarz.
Zamień wiedzę w umiejętności
Pobierz darmową Roadmapę .NET i ułóż takie tematy jak ten w spójną ścieżkę do pierwszej pracy.
Pobieram roadmapę →
Very nice article, just what I needed.
Twoje doświadczenia są inspirujące. Chętnie bym się dowiedział, czy masz jeszcze jakieś rady dla tych, którzy dopiero zaczynają pracę z językiem C#
Fantastyczny artykuł! Znacznie mi pomógł w zrozumieniu
Dobrze, że poruszyłeś temat. To rzeczywiście ważne i często pomijane zagadnienie
Mam nadzieję, że napiszesz więcej na ten temat w przyszłości. Z chęcią zgłębiłbym ten temat bardziej