我理解
但是为什么呢? 有没有历史原因导致
C++提供了清除标准输入缓冲区的方法
fflush(stdin)
会导致未定义的行为,因为fflush
只对输出缓冲区进行了定义。但是为什么呢? 有没有历史原因导致
fflush
没有定义输入缓冲区?C++提供了清除标准输入缓冲区的方法
cin.clear()
,我不明白为什么C标准将其留为空白。
fflush(stdin)
的行为是清空输入缓冲区吗?在输出缓冲区上使用fflush
几乎相反;是的,缓冲区被清除了,但这只是因为其中的数据已经被刷新到操作系统进行安全存储,而不是被丢弃。让fflush(stdin)
表示“抛弃缓冲区中的任何内容”会让人感到困惑,特别是在管道/套接字上。它甚至没有特别有用的含义;输入缓冲区并不同于坐落在操作系统输入句柄上的任何内容,因此永远不清楚你到底要抛弃什么。 - ShadowRangercin.clear()
只是清除cin
的错误标志,不会刷新任何内容。在 C 语言中,相当于clearerr
。也许你想到的是cin.ignore()
?但即使是这样,它也只是一个高级的fread
。 - Miles Budnekfflush(stdin)
是未定义行为,因此它允许该扩展而不是认可它。 - chux - Reinstate Monica