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

时间:2011-11-18 17:05:41

标签: c integer scanf

我有一个定义变量int data

的程序

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

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

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

2 个答案:

答案 0 :(得分:9)

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

e.g。

int items_read = scanf("%d", &data);

if (items_read != 1) {
    //It was not a proper integer
}

关于阅读整数here, on Stack Overflow的讨论很多。

答案 1 :(得分:4)

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

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