Pętla while z funkcja cin.fail() w środku

0

Cześć, mam problem z jednym obiegiem pętli za dużo w nastepującej sytuacji:

void sprawdzliczbe(int a){
    while (cin.fail()){
    cin.clear();
    cin.ignore(1000,'\n');
    cout << "Wprowadz poprawna wartosc liczbowa: "; cin>>a;
    }
}
    cout<<"Ile liter alfabetu ma byc wykorzystywane w grze? (Maksymalnie 25)"<<endl; cin>>iloscliter;
    sprawdzliczbe(iloscliter);
    while(iloscliter>25 || iloscliter<1){
        cout<<"Nieprawidlowa liczba liter, w alfabecie jest 25 liter!!!"<<endl;
        cout<<"Na ile liter chcesz grac?"<<endl; cin>>iloscliter;
        sprawdzliczbe(iloscliter);
    }

Po wprowadzeniu złej wartosci do zmiennej iloscliter(int), program wykonuje funkcje sprawdź liczbę, a po wprowadzeniu tam dobrej wartosci i pętla wykonuje się jeszcze raz

0

Sprawdzaj if(cin >> a) zamiast bawić się w sprawdzanie .good() .fail() .bad() i eof().

Po co pamiętać całą tabelkę prawdy? https://en.cppreference.com/w/cpp/io/basic_ios/fail

0
kq napisał(a):

Sprawdzaj if(cin >> a) zamiast bawić się w sprawdzanie .good() .fail() .bad() i eof().

Po co pamiętać całą tabelkę prawdy? https://en.cppreference.com/w/cpp/io/basic_ios/fail

Niby tak, ale w moim przykładzie raczej chodzi o to dlaczego pętla

 while(iloscliter>25 || iloscliter<1)

wykonuje się jeszcze raz skoro w miejscu

cout <<"Wprowadz poprawna wartosc liczbowa: "; cin>>a;

wprowadzimy odpowiednią liczbe z przedzialu <1,25>, a to powinno skutkować wyjściem z tej pętli o ile dobrze to rozumiem

0
kq napisał(a):

Tutaj z pomocą przychodzi Przekazywanie parametru przez wartość i referencję

Dziękuję bardzo :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1