如何确定scanf是否读取格式中指定的内容?

我有一个定义变量int data

该程序使用scanf("%d",&data)从stdin读取数据。 如果来自stdin的数据不是整数,我必须打印错误消息。

我试过if(scanf("%d",&data) ==EOF){ printf("error");return 1;}

它对我不起作用。 那么,我如何确定scanf是否失败或成功?

scanf的返回值是一个整数,告诉你成功读取了多少项。 如果成功读取了单个整数,则scanf将返回1。

例如

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

Stack Overflow上有关于读取整数的很好的讨论。

scanf返回成功读取的项目数。 您可以通过检查1检查是否失败,因为您正在阅读一个项目:

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