1. Wprowadzenie
Często zdarza się sytuacja, gdy nie musisz przechodzić przez wszystkie iteracje pętli do końca, tylko chcesz wyjść z niej wcześniej — na przykład, gdy znajdziesz szukany element. W innych przypadkach trzeba pominąć część pracy i przejść do następnego kroku (na przykład, gdy wczytałeś dane i chcesz pominąć ich przetwarzanie). To właśnie jest zarządzanie przepływem wewnątrz pętli.
Operatory break i continue w C# są właśnie do tego. Zobaczmy, jak działają i do czego się przydają w prawdziwych zadaniach.
2. Operator break: "Stop, maszyna!"
Teoria i składnia
Operator break służy do natychmiastowego wyjścia z pętli, gdziekolwiek jesteś w jej ciele. Gdy wykonanie programu dojdzie do break, pętla od razu kończy pracę, a wykonanie przechodzi do pierwszej linii kodu po pętli.
while (warunek)
{
if (jakis-warunek)
{
break;
}
// reszta kodu pętli
}
To samo działa dla for i do-while:
for (int i = 0; i < 10; i++)
{
if (jakis-warunek)
{
break;
}
// reszta kodu pętli
}
Przykład 1: sprawdzanie liczby pierwszej
Liczba jest pierwsza, jeśli dzieli się tylko przez 1 i przez siebie. Musimy sprawdzić liczbę pod kątem pierwszości: przejść przez wszystkich potencjalnych dzielników od 2 do n-1. Jeśli okaże się, że nasza liczba dzieli się przez dzielnik, to dalej nie trzeba sprawdzać — liczba nie jest pierwsza! Można zakończyć pętlę.
Przykład:
int number = 111;
bool found = false;
for (int i = 2; i < number; i++)
{
if (number % i == 0)
{
found = true;
Console.WriteLine("Znaleziono dzielnik " + i );
break; // Zatrzymujemy pętlę, nie trzeba już nic szukać!
}
}
if (!found)
{
Console.WriteLine("Dzielnik nie znaleziony - liczba jest pierwsza.");
}
Przykład 2: walidacja danych wejściowych użytkownika
Napiszmy małą aplikację, na przykład interaktywną ankietę do zbierania danych:
while (true)
{
Console.Write("Podaj swój wiek: ");
string input = Console.ReadLine();
int age;
if (int.TryParse(input, out age) && age > 0)
{
Console.WriteLine($"Super! Twój wiek: {age}");
break; // Dane wprowadzone poprawnie — czas zakończyć pętlę!
}
else
{
Console.WriteLine("Błąd! Podaj poprawny dodatni wiek.");
}
}
Po co to jest:
Czasem trzeba kręcić pętlę w nieskończoność (albo bardzo długo), dopóki użytkownik nie poda poprawnych danych. Jak tylko wydarzy się coś, co nas zadowala — używamy break i wychodzimy z pętli na dobre.
3. Operator continue: "Następny, proszę!"
Teoria i składnia
W przeciwieństwie do break, operator continue nie kończy całej pętli, tylko przerywa bieżącą iterację: wszystko, co jest napisane po continue w ciele pętli, NIE jest wykonywane — następuje przejście do następnej iteracji.
for (int i = 0; i < 10; i++)
{
if (warunek)
{
continue;
}
// ta część wykona się tylko jeśli continue nie zadziałał
}
Przykład 3: pomijanie liczb parzystych
Wyobraź sobie, że musisz wypisać tylko liczby nieparzyste z zakresu. Parzyste trzeba pominąć.
for (int i = 1; i <= 10; i++)
{
if (i % 2 == 0)
{
continue; // jeśli liczba parzysta — pomijamy wszystko poniżej!
}
Console.WriteLine("Liczba nieparzysta: " + i);
}
Co się dzieje:
Gdy i = 2, 4, 6... pętla napotyka continue i od razu przeskakuje do następnej iteracji, nie wykonując Console.WriteLine.
Wizualizacja działania krok po kroku:
| i | i % 2 == 0 | Akcja |
|---|---|---|
| 1 | false | print, brak continue |
| 2 | true | continue, brak print |
| 3 | false | print, brak continue |
| 4 | true | continue, brak print |
| ... | ... | ... |
Operatory break i continue są używane bardzo często. W zasadzie w co drugiej pętli. Spodoba Ci się praca z nimi.
GO TO FULL VERSION