Niepożądane działanie programu, po wyczyszczeniu strumienia wejściowego
Ostatnio zmodyfikowano 2013-12-15 18:05
Lilsem Temat założony przez niniejszego użytkownika |
Niepożądane działanie programu, po wyczyszczeniu strumienia wejściowego » 2013-12-10 23:10:22 #include <iostream> #include <conio.h> #include <cstdlib> #include <ctime> using namespace std; int main() { srand( time( NULL ) ); int liczba; int liczba_losowa =( rand() % 1000 ) + 0; int proby = 0; liczba = liczba_losowa; do { std::cin.clear(); std::cin.sync(); if( liczba > liczba_losowa ) cout << "Nieudane trafienie. Liczba ktorej szukasz jest mniejsza" << endl; if( liczba < liczba_losowa ) cout << "Nieudane trafienie. Liczba ktorej szukasz jest wieksza" << endl; cout << "Podaj liczbe: "; cin >> liczba; proby++; if( std::cin.fail() ) { cout << "Niepoprawna wartosc. Wprowadz pownownie"; proby--; } } while( liczba_losowa != liczba ); cout << "Brawo, zgadles liczbe!" << endl << "Proby odgadniecia: " << proby << endl; cout << "Nacisnij dowolny przycisk, aby zakonczyc program"; getch(); return 0; }
Dodałem do kodu linijki std::cin.clear(); i .sync i po wpisaniu błędnych danych wyskakuje zawartość if(std::cin.fail()), ale tez pojawia się zawartosc drugiego "if". Jak kod zmienić, żeby nie pokazywalo tego i dlaczego tak sie dzieje? |
|
pekfos |
» 2013-12-11 13:46:28 Zmień kolejność sprawdzania i użyj else. |
|
Lilsem Temat założony przez niniejszego użytkownika |
» 2013-12-13 19:48:48 Nie rozumiem co powinienem w tym kodzie zmienić, więc byłbym wdzięczny gdybyś(cie) dodali odpowiednie linijki za mnie, bo naprawdę męczę się z tym już długo, a zapewne jest to perfidnie łatwe. |
|
pekfos |
» 2013-12-13 19:51:50 Najpierw wczytuj, potem sprawdzaj. |
|
Lilsem Temat założony przez niniejszego użytkownika |
» 2013-12-15 18:05:40 Dobra, po prostu dodałem nową zmienną "sprawdzenie", ktora przy błędzie miała wartość 1 i odpowiednio wykorzystałem to przy if( liczba < liczba_losowa && sprawdzenie != 1
|
|
« 1 » |