Rozdział 16. Błędny komunikat po dwukrotnym wpisaniu nieprawidłowej treści
Ostatnio zmodyfikowano 2018-09-09 17:32
cyrkiel Temat założony przez niniejszego użytkownika |
Rozdział 16. Błędny komunikat po dwukrotnym wpisaniu nieprawidłowej treści » 2018-09-08 21:58:43 W następującym programie: #include <iostream> #include <cstdlib> #include <ctime> #include <limits>
int main() { srand( time( NULL ) ); int strzal, proby = 0; int liczba =( std::rand() % 1000 ) + 1; std::cout << "Gra wylosuje teraz pewna liczbe z przedzialu od 1 do 1000. Twoim zadaniem jest ja odgadnac. \n"; std::cout << liczba << std::endl; do { std::cout << "Podaj swoja liczbe: "; std::cin >> strzal; if( std::cin.fail() ) { std::cin.clear(); std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' ); std::cout << "To nie jest prawidlowa liczba.\nPodaj swoja liczbe: "; std::cin >> strzal; proby++; } if( strzal < 1 || strzal > 1000 ) { std::cin.clear(); std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' ); std::cout << "Liczba nie miesci sie w podanym zakresie.\n"; } if( strzal != liczba && !( std::cin.fail() ) && !( strzal < 1 ) && !( strzal > 1000 ) ) { std::cout << "Nie trafiles, sprobuj jeszcze raz.\n"; } proby++; } while( strzal != liczba ); std::cout << "Gratulacje! Trafiles na wylosowana liczbe - " << liczba << ".\nPotrzebowales do tego " << proby << " prob.\n"; return 0; }
jeśli wprowadzimy coś innego niż liczbę, program pokazuje prawidłowy komunikat (To nie jest prawidlowa liczba.), jednak jeśli przy kolejnym podaniu liczby znów wprowadzimy coś innego niż liczbę, program wyświetli nam komunikat (Liczba nie miesci sie w podanym zakresie.). Przy trzeciej takiej operacji z rzędu komunikat znów jest prawidłowy. Jak to naprawić? Wyświetlenie liczby na samym początku programu jest oczywiście tylko pomocnicze, do sprawdzania. |
|
pekfos |
» 2018-09-08 22:14:50 Za drugim razem nie sprawdzasz błędów. |
|
cyrkiel Temat założony przez niniejszego użytkownika |
» 2018-09-09 15:54:16 Ale dlaczego w takim razie odpala się if odpowiedzialny za liczby spoza zakresu, skoro to, co wpisuję, nie jest liczbą? I dlaczego w analogicznej sytuacji (liczbie spoza zakresu) zawsze pokazuje się prawidłowy komunikat? |
|
mateczek |
» 2018-09-09 17:32:33 Ale dlaczego w takim razie odpala się if odpowiedzialny za liczby spoza zakresu, skoro to, co wpisuję, nie jest liczbą? |
Bo zabezpieczenie na wypadek danej, która nie jest liczbą, zwyczajnie nie działa i program idzie dalej a powinien być albo przerwany albo zawrócony!!! w zależności co tam chcesz osiągnąć |
|
« 1 » |