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

Yak*_*kov 4 c integer scanf

我有一个定义变量的程序 int data

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

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

它对我没用.那么,我如何确定scanf是否失败或成功?

Chr*_*per 9

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

例如

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

if (items_read != 1) {
    //It was not a proper integer
}
Run Code Online (Sandbox Code Playgroud)

在Stack Overflow上有一个关于读取整数的很好的讨论.