Lekcja 16 zadanie
Ostatnio zmodyfikowano 2017-02-26 14:05
Brys Temat założony przez niniejszego użytkownika |
Lekcja 16 zadanie » 2017-02-21 19:12:38 Witam Mam mały problem z zadaniem z lekcji 16, mianowicie zgadywanka działa tak jak powinna poza jednym błędem. Gdy wpisuję np. 123xxx to program się psuje i cały czas wykonuje jeden z IFów, ale gdy wpisuję np. xxx to wyskakuje mój komunikat tak jak chciałem. Jak zabezpieczyć się przed wpisaniem najpierw cyfr, a później liter? #include <iostream> #include <cstdlib> #include <ctime> using namespace std;
int main() { int liczba, strzal, proby = 0; srand( time( NULL ) ); liczba =( std::rand() % 1000 ) + 1; cin.clear(); cin.sync(); cout << "Zgadnij liczbe od 1 do 1000: "; cin >> strzal; proby++; if( cin.good() && strzal >= 1 && strzal <= 1000 ) { do { proby++; if( strzal > liczba ) { cout << "Za duzo" << endl; cout << "Zgadnij liczbe od 1 do 1000: "; cin >> strzal; } if( strzal < liczba ) { cout << "Za malo" << endl; cout << "Zgadnij liczbe od 1 do 1000: "; cin >> strzal; } } while( strzal != liczba ); proby++; cout << "Gratulacje! Zgadles " << liczba << endl; cout << "Ilosc prob: " << proby; } else cout << "Wprowadziles zle dane"; return 0; }
|
|
kordyl1010 |
» 2017-02-21 19:22:32 Możesz w tablicy string sprawdzić każdą literkę która została wpisana z ASCII czy się zgadza, jak jest inaczej niż kod cyfr z ASCII to znaczy, że źle :) No chyba, że jest łatwiejszy sposób to ktoś może się jeszcze wypowie :) Tylko Ty chyba jeszcze nie miałeś ASCII i stringa, więc nie wiem czy poczekasz do tej lekcji czy może już sobie "wybiegniesz" z tematem i to sprawdzisz :) |
|
carlosmay |
» 2017-02-21 19:56:07 Możesz sprawdzić czy po poprawnym wczytaniu danych w buforze strumienia pozostał tylko znak nowego wiersza '\n' . Jeśli nie to znaczy, że oprócz oczekiwanej liczby jest coś jeszcze i tego musisz się pozbyć. int num; std::cin >> num; if( cin.get() != '\n' ) { std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' ); } |
|
Janusz2 |
» 2017-02-26 14:05:33 Hej, rozwiązanie problemu nie wymaga wiedzy większej niż ta z lekcji 16, zapomniałeś wyczyścić zawartość strumienia wejściowego przed każdym strzałem, poniżej poprawiony kod. #include <iostream> #include <cstdlib> #include <ctime> using namespace std;
int main() { int liczba, strzal, proby = 0; srand( time( NULL ) ); liczba =( std::rand() % 1000 ) + 1; cin.clear(); cin.sync(); cout << "Zgadnij liczbe od 1 do 1000: "; cin >> strzal; proby++; if( cin.good() && strzal >= 1 && strzal <= 1000 ) { do { proby++; if( strzal > liczba ) { cout << "Za duzo" << endl; cout << "Zgadnij liczbe od 1 do 1000: "; std::cin.clear(); std::cin.sync(); cin >> strzal; } if( strzal < liczba ) { cout << "Za malo" << endl; cout << "Zgadnij liczbe od 1 do 1000: "; std::cin.clear(); std::cin.sync(); cin >> strzal; } } while( strzal != liczba ); proby++; cout << "Gratulacje! Zgadles " << liczba << endl; cout << "Ilosc prob: " << proby; } else cout << "Wprowadziles zle dane"; return 0; }
|
|
« 1 » |