c++ - “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!");
}
解决方案
不要假设函数的作用。阅读它的文档。
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;" 被认为是不好的做法?
推荐阅读
- c# - Swashbuckle EF Core 隐藏发布/放置文档的属性
- bash - ps -ef | { 头 -n 1 ; 种类 ; 意外的输出
- bash - 带有重定向的 tee bash 命令
- javascript - 向 vue-form-wizard 添加验证
- jsf - Primefaces中组件的补丁
- r - 如何从数据框中的列中删除某些垃圾值?
- node.js - 如何使用 node.js 从 json 文件中读取删除一些行
- azure-functions - Azure 函数将 blob 从一个容器复制到另一个具有不同 blob 名称的容器
- xml - XSLT if 条件:将元素的值与字符串进行比较
- python - 指定磁盘类型时无法使用 python 代码创建磁盘