W poprzedniej części opisałem składnie oraz zastosowanie pętli for. Jednak nie zawsze z góry wiadomo ile razy dokładnie będziemy wykonywali pętle. Przypuśćmy, że mamy listę liczącą kilka tysięcy elementów. Pętle chcemy zatrzymać kiedy znajdziemy określony składnik. Do tego celu została wymyślona pętla while. Jej tłumaczenie dopóki jest jak najbardziej uzasadnione, ponieważ wykonuje określone operacje dopóki spełniony jest określony warunek. Jej składnia wygląda następująco:
Program rozpoczynając pętle najpierw sprawdza warunek jeśli jest spełniony to wykonuje ciąg instrukcji, a następnie ponownie sprawdza warunek. Kolejne iteracje są wykonywane, aż warunek będzie fałszywy.
Przypuśćmy, że chcemy wczytać od użytkownika kolejne wprowadzane liczby dopóki są mniejsze od 10. Zadanie to realizuje poniższy program:
(1.) Deklarujemy główną funkcję programu main(). (2.) Deklarujemy zmienną a do której będziemy wczytywać kolejne liczby od użytkownika. (3.) Wczytujemy liczbę z konsoli. (4.) Jeśli liczba jest mniejsza od 10 to (5.) wczytujemy kolejną liczbę. Powtarzamy to dopóki wprowadzona liczba (4.) będzie większa od 10. Kiedy warunek okaże się fałszywy to program wykona linijkę (7.) za pętlą while. (7.) Pokaże komunikat, dlaczego pętla została przerwana, (8.) zaczeka na potwierdzenie przez użytkownika i (9.) zakończy działanie programu.
Istnieje odmiana pętli while. Polega ona na tym, że ciag instrukcji znajduje się przed warunkiem. Wtedy składnia jest rozszerzona o dodatkowe znacznik do:
Program rozpoczyna pętla od znacznika do i wykonuje ciąg instrukcji. Dopiero po wykonaniu jednej pętli jest wykonywany warunek. Jeśli jest spełniony to program ponownie wykonuje ciąg instrukcji i ponownie sprawdza warunek. W przypadku niespełnienia warunku program przechodzi do kolejnego polecenia po pętli do .. while.
Częstym błędem popełnianym podczas używania pętli do ... while jest pomijanie średnika po while(). Jest on bardzo ważny, ponieważ while() znajduje się poza do{..}, więc jest właściwie interpretowane jako kolejne polecenie w programie.
Chociaż pętle tego typu jest bardzo rzadko spotykana w kodzie źródłowym to istnieją czasem miejsca gdzie jej zastosowanie upraszcza kod. Wystarczy spojrzeć na poprzedni przykład zastosowania pętli while. Przed jej wykonaniem musimy dopisać linijkę, która wczyta pierwszą liczbę. W przypadku pętli do .. while taka potrzeba nie istnieje:
(3.) Tym razem program rozpoczynając pętle najpierw (4.) wczyta liczbę i (5.) sprawdzi warunek. W przypadku wprowadzenia liczby większej od 9 pętla zostanie przerwana i (6.) zostanie wypisany stosowny komunikat.
Lekcja 9 dobiegła końca. Zajrzyj do kodu źródłowego, aby przeanalizować wypisywanie danych jeszcze raz. Następnie spróbuj wykonać zadania, aby utrwalić materiał.
Wypisz wszystkie liczby parzyste mniejsze od 1000.
Napisz program wczyta pary liczb od użytkownika. Program powinien wczytać kolejną parę liczb pod warunkiem, że obydwie poprzednie były nieparzyste. Przykładowy użytkownik wprowadza kolejno i otrzymujemy komunikat (ostatnia linijka):
Napisz program, który będzie wczytywał od użytkownika liczby dopóki będą to liczby parzyste. Na koniec program powinien wypisać na ekran ile liczb zostało wczytanych przez użytkownika. Przykładowy użytkownik wprowadza kolejno i otrzymujemy komunikat (ostatnia linijka):