Były już instrukcje, przyszedł teraz czas na pętle. Pętle różnią się od instrukcji tym, że instrukcje sprawdzają warunek i podejmują działanie, pętle działają jeśli warunek jest spełniony spełniony, opuszczamy pętle dopiero gdy warunek nie zostanie spełniony. Omówimy sobie pętle while… i pętle do…while… .
Podstawowa różnica jest taka, że do-while, najpierw wykonuje instrukcję, a potem sprawdza warunek, natomiast while najpierw sprawdza warunek, następnie wykonuje instrukcję (jeśli jest spełniony).
int x = 1;
string str = "teskt";
do
{
Console.WriteLine(str);
} while (x == 0);
while (x == 0)
{
Console.WriteLine(str);
}
//Wyświetli
//tekst
W powyższym kodzie warunkiem jest (x == 0), w pierwszej pętli, najpierw wyświetlony jest tekst, a następnie sprawdzany warunek (1 == 0), który jest fałszywy, powoduje to wyjście z pętli. W drugiej pętli najpierw sprawdzany jest warunek (1 == 0) który jest fałszywy, więc instrukcja nie jest wykonana, a konsekwencją jest wyjście z pętli. W pętlach szeroko wykorzystywane są operatory przyrostów. Automatycznie zwiększają wartość zmiennej warunku:
int x = 0;
Console.WriteLine("Pętla while...");
while (x <= 4)
{
Console.WriteLine(x);
x++; // to samo co x=x+1
}
Console.WriteLine("Pętla do...while...");
do
{
x--; // to samo co x=x-1
Console.WriteLine(x);
} while (x >= 1);
//Wyświetli:
//Pętla while...
//0
//1
//2
//3
//4
//Pętla do...while...
//4
//3
//2
//1
//0
Taki zabieg powoduje kontynuowanie pętli do momentu spełnienia warunku. Niestety zła konstrukcja warunku, może spowodować zapętlenie, nasza pętla nie zostanie nigdy opuszczona i program będzie powtarzał instrukcję do momentu wyłączenia programu. Pętle można opuścić, również wykorzystując słowo klucz „break”.
int x = 0;
Console.WriteLine("Pętla while...");
while (true)
{
Console.WriteLine(x);
x++; // to samo co x=x+1
if (x == 5) break;
}
Console.WriteLine("Pętla do...while...");
do
{
x--; // to samo co x=x+1
Console.WriteLine(x);
if (x == 0) break;
} while (true);
//Wyświetli
//Pętla while...
//0
//1
//2
//3
//4
//Pętla do...while...
//4
//3
//2
//1
//0
Pętla działa identycznie jak poprzednia, warunek „} while (true);” gwarantuje, że zawsze będzie spełniony. Momentem wyjścia z pętli jest spełnienie warunku instrukcji if (if (x == 0) break;) i użycie klucza break do jej zatrzymania i wyjścia. Do wyjścia z pętli możemy również wykorzystać skok i etykietę:
int x = 0;
Console.WriteLine("Pętla while...");
while (true)
{
Console.WriteLine(x);
x++; // to samo co x=x+1
if (x == 5) goto EndWhile;
} EndWhile:;
Console.WriteLine("Pętla do...while...");
do
{
x--; // to samo co x=x+1
Console.WriteLine(x);
if (x == 0) goto EndDoWhile;
} while (true);
EndDoWhile:;
//Wyświetli
//Pętla while...
//0
//1
//2
//3
//4
//Pętla do...while...
//4
//3
//2
//1
//0
Efekt będzie identyczny, zalecam jednak, abyście korzystali z pierwszej metody konstrukcji pętli. Nie każdy język programowania wykorzystuje „goto” i nie każdy musi korzystać z etykiet, ale pętle do..while… i while…do… zawiera każdy język programowania. Dlatego warto, jest tak konstruować warunki, aby nie wyskakiwać z pędzącej pętli (jeśli się da). Poniższy kod zmusza użytkownika do wpisania imienia:
Console.WriteLine("Jak masz na imię?");
string imie;
do
{
imie = Console.ReadLine();
if (imie.Length == 0)
{
Console.WriteLine("Nic nie wpisałeś, postaraj się.");
}
} while (imie.Length == 0 );
Console.WriteLine("Witaj "+ imie);
Powyższy kod powtarza się ,dopóki użytkownik czegoś nie wpisze, niekoniecznie musi to być imię, ponieważ sprawdzenie, czy jest to imię, wymagałoby połączenia większej ilości instrukcji sprawdzających wpisany tekst.



