Czytanie wyłącznie liczb z wejścia standardowego

0

Napisałem taki kod (chce móc wczytać tylko 1 lub 0) a jak wpiszę liczbę, to mi się wali, i wyświetla ciągle błąd :/

 #include <iostream>

int main()
{
    int cyfra;

    while(1)
            {
                std::cout << "Podaj cyfre [1 lub 2]> ";
                std::cin >> cyfra;
                if(isdigit(cyfra) && (cyfra == 1 || cyfra == 2))
                {
                    break;
                }
                else
                {
                    std::cout << "Blad!\n";
                    std::cin.clear();
                    continue;
                }
            }
    return 0;
}
1

Nie rozumiesz działania funkcji isdigit; przyjmuje ona jako parametr znak, a nie liczbę! (w tym wypadku liczba jest niejawnie konwertowana na znak, stąd zawsze będzie wyświetlać błąd).
To do czego dążysz to albo:

if ((std::cin >> cyfra) && (cyfra == 1 || cyfra == 2))

albo

char cyfra;
/* ... */
if (isdigit(cyfra) && (cyfra == '1' || cyfra == '2'))

ewentualnie

char cyfra;
/* ... */
if (cyfra == '1' || cyfra == '2')
1

Wczytujesz dane do zmiennej int zanim jeszcze cokolwiek zwalidujesz.

0

@Patryk27: drugie rozwiązanie pomogło, dzięki

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