Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

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

Ostatnio zmodyfikowano 2018-01-15 19:42
Autor Wiadomość
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 :)
P-168760
Kinexity
» 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
YooSy
» 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
nerfipro174
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
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.
P-168766
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ć?
P-168768
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.
Frazy, które należy wpisać w wyszukiwarkę google:
P-168771
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:
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 2 Następna strona