Wartość zwracana przez scanf

0

Czytając "Szkołę programowania w C" Stephena Praty natknąłem się na wykorzystanie zwracanej przez funkcję scanf liczby, do sprawdzenia czy udało się poprawnie wprowadzić dane. Przytaczam tutaj prosty kod, który jednak ilustruje mój problem. Mianowicie z założenia program powinien przyjąć liczbę całkowitą, jeżeli jednak zostaną wprowadzone jakieś niewłaściwe dane, powinien wyświetlić odpowiedni komunikat i ponownie pobrać dane. Nie rozumiem natomiast dlaczego przy wprowadzeniu litery program zamiast wyświetlić komunikat raz i czekać na ponowne wprowadzenie danych zasypuje terminal niekończącymi się komunikatami :(

#include <stdio.h>

int main(){

int n;

while( scanf("%d", &n) !=1){

    printf("\nto nie liczb calkowita");
}


return 0;
}
 
1

Ponieważ jeżeli w buforze klawiatury (w uproszczeniu) nie jest liczba to cały bufor zostaje nietknięty.
Dodaj wewnątrz pętli: while(getchar()!='\n') {}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.