Gra - losowanie liczb
Ostatnio zmodyfikowano 2016-08-22 00:24
adrianolsz Temat założony przez niniejszego użytkownika |
Gra - losowanie liczb » 2016-08-21 21:35:34
#include<iostream> #include<cstdlib> #include<ctime> using namespace std; int main() { srand( time( NULL ) ); int liczba =( rand() % 20 ) + 1; cout << "(wylosowana liczba to: " << liczba << ")\n\n"; int licznik = 0; double zgaduj; do { cout << "Podaj liczbe do zgadniecia: "; cin >> zgaduj; if( cin.fail() ) { cout << "To nie jest liczba! \nPodaj liczbe do zgadniecia: "; cin.clear(); cin.sync(); } licznik++; if( zgaduj == liczba ) { cout << "\nBrawo, wylosowana liczba to: " << zgaduj; cout << "\nLiczba strzalow: " << licznik << "\n\n"; return 0; } else if( zgaduj > liczba ) { cout << "Liczba jest za duza.\n"; } else if( zgaduj < liczba ) { cout << "Liczba jest za mala.\n"; } } while( true ); return 0; }
Mam taki problem, że nie wiem jak zabezpieczyć program przed używaniem liczb zmiennoprzecinkowych. Jeżeli program wylosuje liczbę np 8, a ja podaję do zgadnięcia 8.12345, to program porównuje i odpowiada normalnie, że 8.12345 > 8. Chcę, żeby wyskakiwała wiadomość żeby wpisywać tylko całkowite. Jak to sprawdzać? Gdy zmienną zgaduj zamienię z double na int, to wtedy 8.12345 == 8. W dodatku kiedy podaję zamiast liczb jakieś inne znaki np a,b,c to program powinien wyczyścić mi strumień i od nowa czekać na wpisanie liczby, a informuje o tym że to nie jest liczba i przechodzi dalej podając np "Liczba jest za mała". Druga sprawa, chcę sprawdzać czy są większe od 0 ale też się na tym zatrzymałem, bo najpierw muszę ogarnąć problem wyżej. |
|
carlosmay |
» 2016-08-21 21:45:30 Użyj typu dla liczb całkowitych. if( zgaduj == liczba ) Nie powinno się porównywać liczby całkowitej ze zmiennoprzecinkową. Zwykle daje błędny wynik. Wynika to z niedokładności liczb zmiennoprzecinkowych. |
|
adrianolsz Temat założony przez niniejszego użytkownika |
» 2016-08-21 21:56:01 Już napisałem w 1 poście, że nie skutkuje zmienna int zgaduj. Muszę jakoś zabezpieczyć przed podaniem innej niż całkowita, bo wtedy program uznaje że są równe. |
|
Geniusz |
» 2016-08-22 00:24:46 Tak możesz sprawdzić czy wprowadzona liczba jest całkowita. if( zgaduj != int( zgaduj ) ) { cout << "Mozesz uzywac tylko liczb calkowitych" << endl; continue; } A jeżeli po podaniu np. litery nie chcesz żeby wykonywały się dalsze instrukcje w tym obiegu pętli dopisz continue; w odpowiednim miejscu. Czyli: if( cin.fail() ) { cout << "To nie jest liczba! \n"; cin.clear(); cin.sync(); continue; } |
|
« 1 » |