• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

gra losowa, kłopot z wyjściem z pętli

42 Warsaw Coding Academy
0 głosów
258 wizyt
pytanie zadane 3 listopada 2016 w C i C++ przez jelonek2006 Początkujący (420 p.)

Witam, mam już ukończoną grę losową, w której użytkownik musi zgadnąć liczę. Wszystko działa, ale chciałem dodać zabezpieczenie na wypadek, gdyby gracz wprowadził nieprawidłowe dane i tutaj się zacinam. Jeśli dam break to następuje koniec gry, a jeśli nic nie wstawię to pętla wykonuje się w nieskończoność. Ktoś ma jakiś pomysł jak to okodować? Chodzi o linię 20.

 

 

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int x, wybor;
int ile=0;
int main()
{
    srand(time(NULL));
    x=rand()%1000+1;

    do{
        ile++;
        cout<<"Wylosowałem liczbę. Zgadnij jaką: "<<endl;
        cin>>wybor;
        if (cin.good()==0)
        {
            cout<<"To nie jest liczba. Spróbuj ponownie: ";
            cout<<"Wylosowałem liczbę zgadnij jaką: "<<endl;
            cin>>wybor;
        }
        else
        {
            if(wybor>x) cout<<"Za dużo. Próbuj dalej"<<endl;
            else if(wybor<x) cout<<"Za mało. Próbuj dalej"<<endl;
            else cout<<"Gratulacje. Udało ci się za "<<ile<<" razem";

        }
    }while(wybor!=x);
    return 0;

}

 

2
komentarz 3 listopada 2016 przez draghan VIP (106,230 p.)
Poszukaj informacji o czyszczeniu bufora - błędne dane zostają w buforze aż do momentu ich wyjęcia (lub wyczyszczenia tegoż bufora) - stąd wpadasz w wieczną pętlę.
1
komentarz 3 listopada 2016 przez JAKUBW Nałogowiec (33,470 p.)

BTW

To:

if (cin.good()==0)

Możesz zastąpić:

if (!cin.good())

 

komentarz 3 listopada 2016 przez jelonek2006 Początkujący (420 p.)
Czyszczenie bufora zadziałało. Dzięki za pomoc ;)

2 odpowiedzi

+2 głosów
odpowiedź 3 listopada 2016 przez Sinnley Stary wyjadacz (12,810 p.)
wybrane 3 listopada 2016 przez jelonek2006
 
Najlepsza
Ifa z 17-tej lini zamień na while'a i usuń else z 23 lini wraz z klamrami, oraz wyczyść wewnąrz while'a bufor komendami

cin.clear();

cin.ignore();
+1 głos
odpowiedź 3 listopada 2016 przez L3t94 Użytkownik (900 p.)
Jeśli warunek będzie spełniony to zmienna wybor będzie wczytywana 2x. Próbowałeś wyrzucić linijkę 21?

Podobne pytania

0 głosów
4 odpowiedzi 810 wizyt
pytanie zadane 4 maja 2020 w JavaScript przez Programator6909 Użytkownik (780 p.)
+2 głosów
2 odpowiedzi 221 wizyt
pytanie zadane 12 kwietnia 2015 w C i C++ przez niezalogowany
0 głosów
6 odpowiedzi 1,540 wizyt
pytanie zadane 19 maja 2015 w C i C++ przez serabio Nowicjusz (180 p.)

93,389 zapytań

142,385 odpowiedzi

322,547 komentarzy

62,749 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...