Comment puis-je déterminer si scanf lit ce qui a été spécifié au format?

J’ai un programme qui définit une int data variable

Le programme utilise scanf("%d",&data) pour lire les données à partir de stdin. Si les données de stdin ne sont pas un entier, je dois imprimer un message d’erreur.

J’ai essayé if(scanf("%d",&data) ==EOF){ printf("error");return 1;}

Cela n’a pas fonctionné pour moi. Alors, comment puis-je déterminer si scanf a échoué ou réussi?

La valeur de retour de scanf est un entier indiquant le nombre d’éléments lus avec succès. Si votre entier unique a été lu avec succès, scanf renverra 1.

par exemple

 int items_read = scanf("%d", &data); if (items_read != 1) { //It was not a proper integer } 

Il y a une excellente discussion sur la lecture de nombres entiers ici, sur Stack Overflow .

scanf renvoie le nombre d’éléments lus avec succès. Vous pouvez vérifier si cela a échoué en cochant 1, parce que vous lisez un élément:

 if (scanf("%d", &data) != 1) // error