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

问题描述 投票:4回答:3

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

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

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

它对我没有用。因此,如何确定scanf是否成功?

c integer scanf
3个回答
9
投票

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

例如

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

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

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


4
投票

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

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

0
投票

我如何在while循环中检查?enter image description here这段代码可以正常工作,直到EOF为止,但是如果文件由于某种原因损坏并且fscanf失败,我想输入一条错误消息。

© www.soinside.com 2019 - 2024. All rights reserved.