首页 > 解决方案 > “ferror”测试“scanf”输入

问题描述

我试图在下一个程序中输入错误数据,但它无法识别错误。一旦我输入数字数据,下一次输入字符串数据,但程序没有反应:

#include <iostream>
#include <cstdio>
#include <cstdlib>

using namespace std;

int main(void)
{
    int i;

    scanf("%d",&i);

    if(ferror(stdin))
        printf("Error is ocurred!");
}

标签: c++scanfferror

解决方案


不要假设函数的作用。阅读它的文档。

https://www.cplusplus.com/reference/cstdio/ferror/

int ferror ( FILE * stream );

检查错误指示器

检查是否设置了与流关联的错误指示符,如果设置了则返回一个不同于零的值。

该指示符通常由失败的流上的先前操作设置,并通过调用 clearerr、rewind 或 freopen 清除。

所以这取决于是否scanf设置了错误指示器,在这种情况下它没有。

相反,使用这个:

if(scanf("%d",&i) != 1) {
    // Error code

哦,不要使用use namespace std Why is "using namespace std;" 被认为是不好的做法?


推荐阅读