Poziom 2 Rozdział 16. Problem z funkcją if(cin,good()==0)
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

Poziom 2 Rozdział 16. Problem z funkcją if(cin,good()==0)

AutorWiadomość
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 :)
P-168760
» 2018-01-15 17:46:26
Zamiast:
C/C++
if( cin.good() == 0 );

{
    cin.clear();
    cin.sync();
    cout << "To nie jest liczba. Sprobuj ponownie: ";
    cin >> strzal;
   
}
powinno być:
C/C++
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>
P-168761
» 2018-01-15 17:54:10
Nie umiem wklejać kodów na forum więc
 się nauczę z » Porady dla użytkowników cpp0x.plZakładanie tematów na forum zalecenie.
P-168762
Temat założony przez niniejszego użytkownika
» 2018-01-15 18:05:09
Zamiast:
C/C++
if( cin.good() == 0 );

{
    cin.clear();
    cin.sync();
    cout << "To nie jest liczba. Sprobuj ponownie: ";
    cin >> strzal;
   
}
powinno być:
C/C++
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
P-168763
» 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.
P-168766
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ć?
P-168768
» 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.
Frazy, które należy wpisać w wyszukiwarkę google:
P-168771
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:
C/C++
#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;
}
P-168772
« 1 » 2
 Strona 1 z 2Następna strona