因此,在谷歌上快速搜索fflush(stdin)以清除输入缓冲区,会显示许多网站警告不要使用它.然而,这正是我的CS教授教给我们的班级如何做到这一点的.

使用fflush(stdin)有多糟糕?我真的应该放弃使用它吗,即使我的教授正在使用它,而且它似乎工作完美无瑕?

推荐答案

简单:这是未定义的行为,因为fflush意味着要在输出流上调用.这是C标准的摘录:

int-fflush(文件*ostream);

ostream指向输出流或 更新流,其中最重要的是 没有输入最近的操作, fflush函数会导致任何未写入的 要传递的该流的数据 要写入的主机环境 添加到文件中;否则,行为 是未定义的.

所以这不是"有多糟糕"的问题.fflush(stdin)是不可移植的,所以如果您希望代码在编译器之间可移植,就不应该使用它.

C++相关问答推荐

Apple Libm的罪恶功能

球体—立方体重叠:无、部分或全部?

丑陋的三重间接:可扩展的缓冲区管理 struct

警告:C++中数组下标的类型为‘char’[-Wchar-subpts]

无效指针值在函数调用之间莫名其妙地改变

我无法让LLDB正确运行我的可执行文件

试图从CSV文件中获取双精度值,但在C++中始终为空

C-使用指针返回修改后的整数数组

#定义SSL_CONNECTION_NO_CONST

GCC奇怪的行为,有fork 和印花,有换行符和不换行符

将字符串数组传递给C中的函数:`str[dim1][str_size]`vs`*str[dim1]`

Linux分段故障(核心转储)

用C++高效解析HTTP请求的方法

Realloc():中止的下一个大小无效(核心转储)

如何在C中处理流水线中的a、n命令?

令人困惑的返回和 scanf 问题相关

为什么 int32_t 和 int16_t 在 printf 输出中具有相同的位数?

创建 makefile 来编译位于不同目录中的多个源文件

C语言程序流程解释

C 中 struct 体自赋值是否安全?特别是如果一侧是指向 struct 的指针?