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.