Pętla While jest jedną z najczęściej stosowanych pętli przez programistów. Umożliwia ona sprawdzenie warunku logicznego na samym początku w przeciwieństwie do instrukcji DO WHILE gdzie warunek ten sprawdzany jest na końcu. (UWAGA: Pętla DO-WHILE zawsze wykona się przynajmniej raz).
Ogólna składnia pętli WHILE wygląda tak:
while(warunek_logiczny) {
instrukcja1;
instrukcja2;
}while(warunek_logiczny)
instrukcja1; //koniec pętliPrzykład zastosowania pętli WHILE:
while(a == 0) {
cout << "Podaj jeszcze raz liczbę (ma ona być różna od 0):";
cin >> a;
}Powyższa pętla będzie działać do momentu, aż zostanie podana liczba różna od 0 (wtedy warunek podany na początku instrukcji zwróci false czyli będzie nieprawdziwy i pętla nie zostanie wykonana).
Ogólna składnia pętli DO WHILE:
do {
instrukcja1;
instrukcja2;
} while(warunek_logiczny);Przykład zastosowania pętli DO WHILE:
do {
cout << "Podaj liczbę (różną od 0):";
cin >> a;
} while(a == 0);While czy do-while? Praktyczna różnica
Skoro obie pętle robią niemal to samo, kiedy wybrać którą? Regułka jest krótka. Gdy kod MOŻE nie wykonać się ani razu (na przykład przetwarzanie listy, która bywa pusta), właściwy jest while. Gdy kod MUSI wykonać się przynajmniej raz (wczytanie danych od użytkownika, wyświetlenie menu), naturalny jest do-while, bo najpierw działamy, a dopiero potem sprawdzamy, czy powtórzyć.
Zadanie klasyczne: menu programu na do-while
#include <iostream>
using namespace std;
int main() {
int wybor;
do {
cout << "--- MENU ---\n";
cout << "1. Powiedz czesc\n";
cout << "0. Koniec\n";
cout << "Twoj wybor: ";
cin >> wybor;
if (wybor == 1) cout << "Czesc!\n";
} while (wybor != 0);
cout << "Do zobaczenia!\n";
return 0;
}Menu musi pokazać się co najmniej raz, a do-while dokładnie to gwarantuje. Dokładnie tę samą konstrukcję pokazywałem w Pascalu przy okazji pętli REPEAT UNTIL, z jedną różnicą: tam warunek mówi, kiedy SKOŃCZYĆ, a w do-while, kiedy KONTYNUOWAĆ.
Pętla nieskończona i przerywanie: break oraz continue
Zapis while (true) tworzy pętlę nieskończoną, którą przerywamy instrukcją break w wybranym momencie. Z kolei continue pomija resztę obrotu i wraca do sprawdzenia warunku:
while (true) {
cin >> liczba;
if (liczba == 0) break; // zero konczy wczytywanie
if (liczba < 0) continue; // ujemne pomijamy
suma += liczba;
}Dwa błędy, które robi każdy początkujący
- Średnik po warunku: zapis
while (a < 10);tworzy pętlę z PUSTYM ciałem. Jeżeli warunek jest prawdziwy, program wisi w miejscu, a blok w klamrach poniżej wykona się tylko raz, już po pętli. - Brak zmiany warunku w ciele pętli: gdy nic w środku nie zmienia zmiennych z warunku, pętla nigdy się nie skończy. Przy „wiszącym” programie to pierwsza rzecz do sprawdzenia.



// brak komentarzy — bądź pierwszy