co się stanie, gdy wprowadzisz rzeczy takie jak 12ab do scanf („% d” i argu)?

Natknąłem się na ten problem, gdy chcę sprawdzić, co wprowadzam, to liczba. Funkcja scanf zwróci 1, jeśli pomyślnie wprowadzę liczbę. Oto co napisałem:

int argu;
while(scanf("%d",&argu)!=1){
    printf("Please input a number!\n");
}

Ale gdy wprowadzę do niego takie rzeczy, jak abcd, pętla będzie ciągła się na zawsze i nie zatrzyma się na monit.

Sprawdziłem go online i odkryłem, że ma coś wspólnego z pamięcią podręczną i muszę go oczyścić, aby skaner mógł uzyskać nowe dane. Więc spróbowałem fflush, ale to nie zadziałało.

Wtedy to zobaczyłem:

int argu,j;
while(scanf("%d",&argu)!=1){
    printf("Please input a number!\n");
    while((j=getchar())!='\n' && j != '\n');
}

Potem, gdy wprowadzam rzeczy takie jak „abcd”, działa dobrze i pyta o moje dane wejściowe. Ale gdy wprowadzam rzeczy takie jak „12ab”, to nie zadziała ponownie.

Czy jest więc sposób, w jaki mogę sprawdzić dane wejściowe dla scanf („% d” i argu) to właściwie liczba i zapytać o inne wejście, jeśli tak nie jest?

EDYTOWAĆ:

Widziałem odpowiedzi i rozwiązałem mój problem za pomocąwhile(*eptr != '\n').

Zauważ, żefgets funkcja faktycznie odczytuje 'n' do tablicy ifget nie. Więc uważaj.

questionAnswers(5)

yourAnswerToTheQuestion