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

时间:2014-02-14 09:57:11

标签: c flush

正如它在锡上所说的那样。有没有办法让我清空输入缓冲区以准备进一步的用户输入而不使用未定义的fflush(stdin)或循环的getchar()?

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

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

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

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

提前致谢。

2 个答案:

答案 0 :(得分:2)

您可以使用select()确认输入是否为空。

此处提供了一些相关信息:C select() timeout STDIN single char (no ENTER)

答案 1 :(得分:0)

您可以使用fpurge函数清除缓冲区流。有关更多信息,请阅读fpurge的手册页。