c - 如何刷新输入缓冲区? (C)

标签 c flush

<分区>

正如 jar 头上所说的那样。有没有一种方法可以让我清空输入缓冲区以准备进一步的用户输入,而无需使用未定义的 fflush(stdin) 或循环的 getchar()?

我正在尝试编写一个不易受缓冲区溢出影响的小型输入函数。为此,我使用了 fgets(entered_text, 30, stdin);按 promise 工作。

但是,在发生溢出时,输入缓冲区中仍有一些内容会在我下次调用输入函数时读取。我想清空缓冲区以避免这种情况。

支持 fflush(stdin),但未定义。 http://c-faq.com/stdio/stdinflush2.html建议我使用 getchars 循环,但问题是如果输入缓冲区为空,它将请求一个字符并强制我按两个“输入”键。

有没有办法让我检查输入缓冲区是否为空,或者通过其他方式将其清空?

提前致谢。

最佳答案

您可以使用 select() 检查输入是否为空。

一些相关信息在这里:C select() timeout STDIN single char (no ENTER)

关于c - 如何刷新输入缓冲区? (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21776086/

相关文章:

c - 导致 if_nametoindex() 变慢的可能原因是什么?

c - 使用指向结构的指针数组,还是仅使用结构数组?

c++ - 在 C 程序中解析 32 位整数

c - 如何知道用于可执行文件的源代码的最新版本?

java - Java 流中 flush() 的目的是什么?

batch-file - 从远程批处理文件刷新 Redis 数据库

c - 如何在 C 中检查输入缓冲区/流中的任何内容?

c++ - 统一码计数器C/C++计数规则

c++ - 如何在 win32 上刷新 stdlib 输出文件?

java - 保持输出流打开