使用fflush(stdin)

使用fflush(stdin)

因此,谷歌快速搜索fflush(stdin)清除输入缓冲区会发现许多网站警告不要使用它。然而,这正是我的CS教授教授课程的原因。

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


Smart猫小萌
浏览 685回答 4
4回答

小怪兽爱吃肉

简单:这是未定义的行为,因为fflush它意味着在输出流上调用。这是C标准的摘录:int fflush(FILE * ostream);ostream指向输入流或未输入最近操作的更新流,fflush函数导致该流的任何未写入数据被传递到主机环境以写入文件; 否则,行为未定义。所以这不是一个“多么糟糕”的问题。显然fflush(stdin)是错的,你永远不能使用它。

忽然笑

根据标准,fflush只能用于输出缓冲区,显然stdin不是一个。但是,一些编译器提供了fflush(stdin)作为扩展的用法。在这种情况下,您可以使用它,但它会影响可移植性,因此您将无法再在地球上使用任何符合标准的编译器并期望获得相同的结果。

函数式编程

对于打开读取的流,如果文件尚未处于EOF,并且文件是能够搜索的文件,则底层打开文件描述的文件偏移量应设置为流的文件位置,并且任何字符都被推回通过ungetc()或ungetwc()进行到流上的流不会随后从流中读取(不进一步更改文件偏移量)。请注意,终端无法搜索。
打开App,查看更多内容
随时随地看视频慕课网APP