
//
// To jest przykładowy kod z podrozdziału 10.7.1 „Rozłożenie problemu na mniejsze części” książki 
// "Programowanie. Teoria i praktyka z wykorzystaniem C++" Bjarne'a Stroustrupa.
//

#include "std_lib_facilities.h"

//------------------------------------------------------------------------------

void skip_to_int()
{
    if (cin.fail()) {          // Znaleziono coś, co nie jest liczbą całkowitą.
        cin.clear();           // Chcemy przyjrzeć się znakom.
        char ch;
        while (cin>>ch){       // Odrzuca niecyfry.
            if (isdigit(ch)) {
                cin.unget();   // Oddaje cyfrę z powrotem, dzięki czemu można odczytać liczbę.
                               
                return;
            }
        }
    }
    error("Brak danych.");         // Stan eof lub bad — poddajemy się.
}

//------------------------------------------------------------------------------

int main()
try
{
    cout << "Podaj liczbę całkowitą z zakresu od 1 do 10 (włącznie):\n";
    int n = 0;
    while (true) {
        if (cin>>n) {          // Mamy liczbę całkowitą; sprawdzamy ją.
            if (1<=n && n<=10) break;
            cout << "Niestety " << n
                << " nie należy do zakresu <1,10>. Spróbuj jeszcze raz.\n";
        }
        else {
            cout << "Niestety, to nie była liczba. Spróbuj jeszcze raz.\n";
            skip_to_int();
        }
    }
    // Jeśli dotrzemy do tego miejsca, oznacza to, że n należy do zakresu <1,10>.
    return n;
}
catch (exception& e) {
    cerr << "Błąd: " << e.what() << '\n'; 
    return 1;
}
catch (...) {
    cerr << "Nieznany wyjątek!\n"; 
    return 2;
}

//------------------------------------------------------------------------------
