Sprawdzanie danych by te miały tylko jeden typ danych

0

Witam,

mam problem z wprowadzanymi danymi w C.

Pytanie brzmi jak sprawić by program wyrzucił error przy wprowadzeniu czegokolwiek innego prócz liczby?
W tym przypadku kod polega na obliczeniu silni z danej liczby z przedziału od 1 do 20.
Wprowadzenie ciągu liter lub ciągu znaków w którym zawiera się cyfry sprawia że program wyrzuca Incorrect input, jednak w przypadku gdy wprowadzę coś w stylu "5gg" program wyrzuca wynik z piątki czyli 120

#include <stdio.h>

long long factorial(int n);

int main() {
    int n;

    printf("Podaj liczbe ");
    if (scanf("%d", &n) != 1) {
        printf("Incorrect input\n");
        return 1;
    }

    long long sumf = factorial(n);

    if (sumf != -1) {
        printf("%lld\n", sumf);
    }

    return 0;
}

long long factorial(int n)
{
    long long sumf = 1;

    if (n < 0 || n >= 21) {
        printf("Incorrect input.\n");
        return -1;
    }

    for (int i = 1; i <= n; i++) {
        sumf *= i;
    }

    return sumf;
}
1

Napisałeś program który przyjmuje wartości na standard input, a to jest tekst (dokładniej mówiąc ciąg bajtów). To co możesz sprawdzić, to to czy ten ciąg skłąda się z samych cyfr, czyli znaków od 48-57 w ASCII. Są do tego gotowe rozwiązania.

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