nerfipro174 Temat założony przez niniejszego użytkownika |
Poziom 2 Rozdział 16. Problem z funkcją if(cin,good()==0) » 2018-01-15 17:15:02 Witam. Podczas wykonywania zadania, które wygląda następująco:
Twoim zadaniem domowym jest napisanie prostej gry, która ma działać następująco: 1. Program losuje liczbę z przedziału od 1 do 1000. 2. Użytkownik zgaduje liczbę, która została wylosowana. 3. Jeżeli podana liczba jest za duża (za mała) gra wypisuje stosowny komunikat i powraca do kroku 2. 4. Jeżeli gracz trafi liczbę wylosowaną to progam kończy działanie, wypisując na ekran wylosowaną liczbę oraz liczbę 'strzałów', które oddał gracz. Gra ma być zabezpieczona przed możliwością wprowadzenia błędnych wartości liczbowych.
Natknąłem się na pewien problem, a właściwie dwa. Po pierwsze, jak wpisuję liczbę za pierwszym razem to i tak wyświetla mi się komunikat "To nie jest liczba". Po drugie, jeśli już wpiszę jakąś literę to za pierwszym razem wyświetla mi się komunikat "To nie jest liczba", czyli tak jak powinno być, ale jak wpiszę literę jeszcze raz to wyświetla się "To za mało". Nie umiem wklejać kodów na forum więc daje go tutaj: https://pastebin.com/8JNStnx9. Z góry dziękuję za pomoc :)
|
|
Kinexity |
» 2018-01-15 17:46:26 Zamiast: if( cin.good() == 0 );
{ cin.clear(); cin.sync(); cout << "To nie jest liczba. Sprobuj ponownie: "; cin >> strzal; } powinno być: if( cin.fail() ) { cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); cout << "To nie jest liczba. Sprobuj ponownie: "; cin >> strzal; } i dodatkowo na początku #include <limits> |
|
YooSy |
» 2018-01-15 17:54:10 |
|
nerfipro174 Temat założony przez niniejszego użytkownika |
» 2018-01-15 18:05:09 Zamiast:
if( cin.good() == 0 );
{ cin.clear(); cin.sync(); cout << "To nie jest liczba. Sprobuj ponownie: "; cin >> strzal; } powinno być:
if( cin.fail() ) { cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); cout << "To nie jest liczba. Sprobuj ponownie: "; cin >> strzal; } i dodatkowo na początku #include <limits>
|
Niestety, dalej to samo :/ się nauczę z » Porady dla użytkowników cpp0x.pl ♦ Zakładanie tematów na forum zalecenie. |
Dziękuję :D Z przyjemnoscią to zrobie, a właściwie już zrobiłem :D |
|
carlosmay |
» 2018-01-15 19:04:26 Pozbądź się zmiennych globalnych. Zadeklaruj je lokalnie.
Pobranie liczby od użytkownika zamieść w pętli i tam zwaliduj dane. Mimo wszystko zwiększ licznik prób i pomiń dalszą część pętli. |
|
nerfipro174 Temat założony przez niniejszego użytkownika |
» 2018-01-15 19:11:54 Pozbądź się zmiennych globalnych. Zadeklaruj je lokalnie. |
Mógłbyś rozjaśnić? |
|
carlosmay |
» 2018-01-15 19:17:58 Globalne - widoczność od miejsca deklaracji do końca pliku. Lokalne - widoczność od miejsca deklaracji do konca bloku instrukcji, w którym jest zadeklarowana. |
|
nerfipro174 Temat założony przez niniejszego użytkownika |
» 2018-01-15 19:35:28 Dobra, napisałem wszystko od nowa i wszystko działa jak powinno :) Jakby ktoś był zainteresowany, tak wygląda cały kod: #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
int main() { int liczba, strzal, kolejka = 0; srand( time( NULL ) ); liczba =(( rand() % 1000 ) + 1 ); cout << "Wylosowana liczba to: " << liczba << endl; do { cout << "Zgadnij jaka liczbe wylosowalem: "; kolejka++; cin >> strzal; if( cin.fail() ) { cout << "To nie jest liczba. "; cin.clear(); cin.sync(); } else { if( strzal > liczba ) cout << "To za duzo. "; if( strzal < liczba ) cout << "To za malo. "; } } while( strzal != liczba ); cout << "Udalo sie. Zgadles za " << kolejka << " razem"; return 0; }
|
|
« 1 » 2 |