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

Problem z zabezpieczeniem gry przed możliwością wprowadzenia błędnych danych

Ostatnio zmodyfikowano 2016-11-14 19:34
Autor Wiadomość
polka260
Temat założony przez niniejszego użytkownika
Problem z zabezpieczeniem gry przed możliwością wprowadzenia błędnych danych
» 2016-11-14 15:57:49
Witam,
napisałam następujący program z rozdziału 16, lecz mam problem z ostatnim zdaniem:
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 program 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.

Próbowałam to napisać na kilka sposobów, w każdym cos jest nie tak. Robię to już bite 4 godziny i nie mogę znaleźć sensownego wyjścia.

1. W tym programie w drugiej pętli wszystko działa do momentu kiedy wprowadzę dobrą liczbę, np. 5 - program nie chce opuścić pętli i każe wprowadzić następną liczbę.


#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
    srand (time (NULL));
    int wylosowana_liczba = (rand() % 1000) + 1;
    int zgadywana_liczba;
    wylosowana_liczba = (rand() % 1000) +1;
    cout << "Program wylosowal liczbe od 1 do 1000. Zgadnij co to za liczba.\n";
    int liczba_strzalow = 0;
    do
    {
        do
        {
            cin.clear();
            cin.sync();
            cin >> zgadywana_liczba;
            if ( zgadywana_liczba = cin.fail()) cout << "Musisz wprowadzic liczbe.\n";
        }
        while (zgadywana_liczba != cin.good());

        liczba_strzalow++;
        if ( zgadywana_liczba > wylosowana_liczba ) cout << "Liczba jest za duza. Probuj dalej!\n";
        if ( zgadywana_liczba == wylosowana_liczba ) cout << "Dobra liczba, wygrales!";
        if ( zgadywana_liczba < wylosowana_liczba ) cout << "Liczba jest za mala. Probuj dalej!\n";

    }
    while (zgadywana_liczba != wylosowana_liczba);
    cout << "Twoja liczba strzalow to: " << liczba_strzalow;
    return 0;
}

2. W tym programie z kolei kiedy wpisuje zgadywaną liczbę np. h program wyświetla
"Liczba jest za mała. Próbuj dalej!
Musisz wprowadzić liczbę."
Kiedy zgadnę liczbę program znów nie chce opuścić pętli.

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
    srand (time (NULL));
    int wylosowana_liczba = (rand() % 1000) + 1;
    int zgadywana_liczba;
    wylosowana_liczba = (rand() % 1000) +1;
    cout << "Program wylosowal liczbe od 1 do 1000. Zgadnij co to za liczba.\n";
    int liczba_strzalow = 0;
    do
    {
        cin.clear();
        cin.sync();
        cin >> zgadywana_liczba;
        liczba_strzalow++;
        if ( zgadywana_liczba > wylosowana_liczba ) cout << "Liczba jest za duza. Probuj dalej!\n";
        if ( zgadywana_liczba == wylosowana_liczba ) cout << "Dobra liczba, wygrales!";
        if ( zgadywana_liczba < wylosowana_liczba ) cout << "Liczba jest za mala. Probuj dalej!\n";
        if ( zgadywana_liczba = cin.fail()) cout << "Musisz wprowadzic liczbe.\n";

    }
    while (zgadywana_liczba != wylosowana_liczba);
    cout << "Twoja liczba strzalow to: " << liczba_strzalow;
    return 0;

3. Ten jest chyba najlepszy bo powstał najwcześniej i tamte dwa są już przekombinowane, pętla jest zrobiona dobrze ponieważ wychodzi się z niej normalnie, jednak znowu kiedy wprowadzam liczbę np. h to program wyświetla
"Liczba jest za mała. Próbuj dalej!
Musisz wprowadzić liczbę."
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
    srand (time (NULL));
    int wylosowana_liczba = (rand() % 1000) + 1;
    int zgadywana_liczba;
    wylosowana_liczba = (rand() % 1000) +1;
    cout << "Program wylosowal liczbe od 1 do 1000. Zgadnij co to za liczba.\n";
    int liczba_strzalow = 0;
    do
    {
    cin >> zgadywana_liczba;
    cin.clear();
    cin.sync();
    if (cin.fail()) cout << "Musisz wprowadzic liczbe.\n";


    liczba_strzalow++;
    if ( zgadywana_liczba > wylosowana_liczba ) cout << "Liczba jest za duza. Probuj dalej!\n";
    if ( zgadywana_liczba == wylosowana_liczba ) cout << "Dobra liczba, wygrales!";
    if ( zgadywana_liczba < wylosowana_liczba ) cout << "Liczba jest za mala. Probuj dalej!\n";

    }
    while (zgadywana_liczba != wylosowana_liczba);
    cout << "\nTwoja liczba strzalow to: " << liczba_strzalow;
    return 0;
}

Proszę o poprawienie wszystkich programów, gdyż chciałabym umieć rozwiązać każdą sytuacje i znaleźć wyjście. Przypuszczam, że we wszystkich programach błąd kręci się wokół cin.clear() i cin.sync(). Wcześniej nie miałam problemu z tymi zadaniami, jakoś wszystko rozumiałam, a teraz nawet po ponownym przeczytaniu nie mogę sobie poradzić. Proszę baaardzo o pomoc :)
P-153686
karambaHZP
» 2016-11-14 19:34:25
P-153702
« 1 »
  Strona 1 z 1