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

Kontynuacja gry

Object Storage Arubacloud
+3 głosów
198 wizyt
pytanie zadane 20 lutego 2017 w C i C++ przez Bazi Użytkownik (680 p.)


#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;

int liczba, strzal, ile_prob=0;

int main()
{
    for (;;)
    {

    cout << "Witaj. Pomyslalem sobie liczbe z zarkesu 1...100" << endl;
    srand(time(NULL));
    liczba = rand()%100+1;


    while(strzal!=liczba)
    {
        ile_prob++;
        cout<<"Zgadnij jaka(to Twoja "<<ile_prob<<" proba):";
        if(!(cin>>strzal))
        {
        cerr<<" To nie jest liczba";
        exit(0);
        }



        if(strzal<liczba)
        {
            cout<<"To za malo"<<endl;
        }
        else if(strzal>liczba)
        {
            cout<<"To za duzo"<<endl;
        }
        else
        {
          cout<<"ZGADLES. Trafiles w "<<ile_prob<<" probie"<<endl;
          ile_prob=0;
        }

    }

    system("pause");
    cout<<endl;
    system("cls");
    }
    return 0;
}

Witam, na starcie zaznaczę, że jestem początkujący zarówno w programowaniu jak i na forum. Postanowiłem ulepszyć grę z odcinka 4 z kursu programowania w C++. Moje pytanie brzmi czy da się zrobić tak, aby po wpisaniu litery program zaliczał to jako próbę i kontynuował grę dalej.  Tak wiem, że dałem tam exit(0), ale to tylko na chwile, ponieważ bez tego po wpisaniu litery program w nieskończoność powtarza całą instrukcje to twoja próba.. to za mało i tak w kółko.

1 odpowiedź

+1 głos
odpowiedź 20 lutego 2017 przez Patrycjerz Mędrzec (192,320 p.)

Oczywiście. Wystarczy załadować cały kod odpowiedzialny za analizę wejścia do else tego warunku z wykrywaniem złych danych i na początku pętli czyścić flagi błędów za pomocą std::cin.clear().

komentarz 20 lutego 2017 przez Bazi Użytkownik (680 p.)
Wielkie dzięki ;)
komentarz 20 lutego 2017 przez Bazi Użytkownik (680 p.)

Dobra, czekaj coś nie działa ;( Sprawdziłem kod, zrobiłem jak mówiłeś i jednak coś nie pykło.

#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;

int liczba, strzal, ile_prob=0;

int main()
{
    for (;;)
    {
    cout << "Witaj. Pomyslalem sobie liczbe z zarkesu 1...100" << endl;
    srand(time(NULL));
    liczba = rand()%100+1;


    while(strzal!=liczba)
    {
        cin.clear();
        ile_prob++;
        cout<<"Zgadnij jaka(to Twoja "<<ile_prob<<" proba):";
        if(!(cin>>strzal))
        {
        cerr<<" To nie jest liczba";
        }
        else
        {
           if(strzal<liczba)
        {
            cout<<"To za malo"<<endl;
        }
        else if(strzal>liczba)
        {
            cout<<"To za duzo"<<endl;
        }
        else
        {
          cout<<"ZGADLES. Trafiles w "<<ile_prob<<" probie"<<endl;
          ile_prob=0;
        }
        }

    }

    system("pause");
    cout<<endl;
    system("cls");
    }
    return 0;
}

 

komentarz 20 lutego 2017 przez Patrycjerz Mędrzec (192,320 p.)

Odpowiedź napisałem bez testowania. Dodaj po clear linię:

cin.ignore(numeric_limits<streamsize>::max(), '\n');

Czyści ona strumień z pozostałych danych, które mogą powodować błędne jego działanie.

komentarz 20 lutego 2017 przez Bazi Użytkownik (680 p.)



wstawiłem i pojawiło się coś takiego ;/ pewnie jakaś biblioteka jest potrzebna do numeric_limits a te dwa kolejne błędy o nie wiem ;(

komentarz 20 lutego 2017 przez Bazi Użytkownik (680 p.)

Dobra działa. Poszukałem trochę na necie i zrobiłem tak wink. Ale dzięki za chęci jako jedyny odpisałeś smiley.

#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;

int liczba, strzal, ile_prob=0;

int main()
{
    for (;;)
    {
    cout << "Witaj. Pomyslalem sobie liczbe z zarkesu 1...100" << endl;
    srand(time(NULL));
    liczba = rand()%100+1;


    while(strzal!=liczba)
    {
        ile_prob++;
        cout<<"Zgadnij jaka(to Twoja "<<ile_prob<<" proba):";
        if(!(cin>>strzal))
        {
        cerr<<"To nie jest liczba"<<endl;
        cin.clear();
        cin.ignore(500,'\n');
        ile_prob--;
        }
        else
        {
           if(strzal<liczba)
        {
            cout<<"To za malo"<<endl;
        }
        else if(strzal>liczba)
        {
            cout<<"To za duzo"<<endl;
        }
        else
        {
          cout<<"ZGADLES. Trafiles w "<<ile_prob<<" probie"<<endl;
          ile_prob=0;
        }
        }

    }

    system("pause");
    cout<<endl;
    system("cls");
    }
    return 0;
}



komentarz 20 lutego 2017 przez Patrycjerz Mędrzec (192,320 p.)

Nie musisz używać konkretnej wartości, wystarczy dodać bibliotekę <limits> wink U mnie działa bez niej, ale najwyraźniej używasz GCC i tam już należy ją dołączyć.

komentarz 20 lutego 2017 przez Bazi Użytkownik (680 p.)

Rzeczywiście, po dodaniu biblioteki działa. Jeszcze raz dzięki wink

Podobne pytania

0 głosów
1 odpowiedź 155 wizyt
pytanie zadane 8 maja 2023 w C i C++ przez Pati Nowicjusz (150 p.)
0 głosów
1 odpowiedź 128 wizyt
+1 głos
2 odpowiedzi 367 wizyt
pytanie zadane 10 kwietnia 2021 w C i C++ przez Marika_00 Nowicjusz (130 p.)

92,567 zapytań

141,420 odpowiedzi

319,615 komentarzy

61,952 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...