Zabezpieczenie wprowadzania liczb z klawiatury działa źle

0

Cześć, mam problem. Mianowicie próbuje napisać prostą grę w konsoli dot. losowania i stanąłem w miejscu. Mam kod, który zabezpiecza przed wpisaniem litery lub niewłaściwej liczby. Okej, to działa, ale jak wpiszę poprawną liczbę to program po prostu się wysypuje, przy każdym naciśnięciu entera przeskakuje jedną linijkę do dołu, czemu tak jest?

int main()
{
    srand(time(NULL));
    int los, a, proba;
    los = (rand()%10) + 1;
    cout << "Wylosowalem dla Ciebie liczbe 1-10. Sprobuj ja zgadnac! : " << endl;
    do
    {
        cin >> a;
        cin.clear();
        cin.sync();
        if(!a || a > 10 || a < 0)
            cout << "Zly przedzial lub zly znak.\nSprobuj ponownie: ";
    }while(a = cin.good() || a < 10 || a > 0);
    return 0;
}

dodanie znacznika <code class="cpp"> - @furious programming

0

Zabezpieczenie przed wpisywaniem liter

czyli masz dwie petle

  1. Dopoki nie gracz nie odgadnie liczby
    w srodku 1) powinienes miec 2) petle z linka ktrego wrzucilem
    po drugiej petli robisz swoj kod (sprawdzasz czy liczba ktora wpisales jest w przedziale, jezeli tak to sprawdzasz czy gracz odgadnal, jezeli nie jest w przedziale to po prostu wyswietlasz komunikat)

poczytaj o operatorach || to jest lub && to jest oraz

0
while(a = cin.good() || a < 10 || a > 0)

a < 10 || a > 0 jest przecież zawsze spełnione. Poza tym cin.good() zwraca bool, nie int.

0

Czyli sprawdzenie czy to liczba oraz przedział trzeba zrobić na dwie różne pętle skoro a zwraca 0 albo 1? Nie rozumiem. Przecież wartość a jest taka jaka zostanie wpisana przez osobę.

0

Ale przecież samo sprawdzenie przedziału masz błędne.
A wartość a zostaje zmieniona w momencie gdy robisz a = cin.good().

0

Gdy zmieniam na == jest to samo.

1 użytkowników online, w tym zalogowanych: 0, gości: 1