Pętla do...while
jest wyjątkowo przydatna w walidacji danych, ponieważ jej konstrukcja gwarantuje, że użytkownik musi wprowadzić dane co najmniej raz. Dzięki temu idealnie sprawdza się w sytuacjach, gdzie:
✅ Dane wejściowe muszą spełniać określone kryteria (np. zakres liczb, format tekstu).
✅ Wymagana jest ponowna prośba o dane po błędzie.
✅ Użytkownik musi zatwierdzić swoje działanie.
1. Przykład – Walidacja liczby z określonego zakresu
W tym przykładzie użytkownik musi podać liczbę między 1 a 100. Pętla będzie powtarzać prośbę, dopóki nie zostanie spełniony warunek.
#include <iostream>
using namespace std;
int main() {
int liczba;
do {
cout << "Podaj liczbę z zakresu 1-100: ";
cin >> liczba;
if (liczba < 1 || liczba > 100) {
cout << "Błędna wartość! Spróbuj ponownie." << endl;
}
} while (liczba < 1 || liczba > 100);
cout << "Podałeś poprawną liczbę: " << liczba << endl;
return 0;
}
✅ Zaleta: Pętla do...while
wymusza podanie liczby co najmniej raz i kontynuuje działanie, dopóki użytkownik nie poda poprawnej wartości.
2. Przykład – Walidacja wprowadzenia tekstu
W tym przypadku program poprosi użytkownika o wprowadzenie tekstu, który nie może być pusty.
#include <iostream>
#include <string>
using namespace std;
int main() {
string imie;
do {
cout << "Podaj swoje imię: ";
getline(cin, imie);
if (imie.empty()) {
cout << "Pole nie może być puste! Spróbuj ponownie." << endl;
}
} while (imie.empty());
cout << "Witaj, " << imie << "!" << endl;
return 0;
}
✅ Zaleta: Program uniemożliwi przejście dalej, jeśli użytkownik poda pusty tekst.
3. Przykład – Walidacja danych liczbowych (obsługa błędów wejścia)
Pętla do...while
jest także pomocna, gdy istnieje ryzyko wpisania niepoprawnych danych (np. liter zamiast liczb).
#include <iostream>
using namespace std;
int main() {
int liczba;
do {
cout << "Podaj liczbę całkowitą: ";
cin >> liczba;
if (cin.fail()) {
cin.clear(); // Kasowanie błędu
cin.ignore(1000, '\n'); // Usunięcie niepoprawnych danych
cout << "To nie jest liczba! Spróbuj ponownie." << endl;
}
} while (cin.fail());
cout << "Podałeś poprawną liczbę: " << liczba << endl;
return 0;
}
✅ Zaleta: Dzięki cin.clear()
i cin.ignore()
program nie zawiesi się po wpisaniu błędnych danych.
4. Przykład – Potwierdzenie zakończenia programu
Pętla do...while
jest także przydatna, gdy użytkownik musi potwierdzić zakończenie programu.
#include <iostream>
using namespace std;
int main() {
char decyzja;
do {
cout << "Czy na pewno chcesz zakończyć program? (t/n): ";
cin >> decyzja;
if (decyzja != 't' && decyzja != 'n') {
cout << "Niepoprawny wybór! Wpisz 't' lub 'n'." << endl;
}
} while (decyzja != 't');
cout << "Program zakończony." << endl;
return 0;
}
✅ Zaleta: Program wymusza wpisanie poprawnej odpowiedzi, co minimalizuje błędy użytkownika.
5. Przykład – Sprawdzanie poprawności hasła
W tym przypadku użytkownik musi wprowadzić hasło o określonej długości.
#include <iostream>
#include <string>
using namespace std;
int main() {
string haslo;
do {
cout << "Podaj hasło (minimum 8 znaków): ";
getline(cin, haslo);
if (haslo.length() < 8) {
cout << "Hasło jest za krótkie! Spróbuj ponownie." << endl;
}
} while (haslo.length() < 8);
cout << "Hasło zaakceptowane!" << endl;
return 0;
}
Zaleta: Zapewnia bezpieczeństwo poprzez wymuszenie podania odpowiednio długiego hasła.
Podsumowanie
Pętla do...while
jest świetnym narzędziem do walidacji danych, ponieważ:
✅ Zawsze prosi użytkownika o dane przynajmniej raz.
✅ Pozwala łatwo obsłużyć błędne dane.
✅ Idealnie nadaje się do sytuacji, gdzie użytkownik musi potwierdzić swój wybór.