这句话的意思是:如何在不使用未定义的fflush(stdin)或循环getchar()的情况下清空输入缓冲区以准备接收更多用户输入?
我正在尝试编写一个小型输入函数,它不容易受到缓冲区溢出的影响。为此,我使用了fgets(entered_text, 30, stdin);,它像承诺的那样工作。
但是,在发生溢出的情况下,输入缓冲区中仍然有一些内容会在我下次调用输入函数时被读取。我想清空缓冲区以避免这种情况。
fflush(stdin)受支持,但未定义。http://c-faq.com/stdio/stdinflush2.html建议我使用getchar的循环,但问题是,如果输入缓冲区为空,它将请求一个字符并强制我按两个“enter”键。
是否有一种方法可以检查输入缓冲区是否为空,或通过其他方式清空它?
提前致谢。
fgets
不能存储所有数据,那么最后一个字符将不是'\n',这意味着您可以继续读取更多数据。我从来没有理解为什么人们认为他们需要在这种情况下“刷新输入缓冲区”。如果还有更多数据,很容易看到。保持读取字符,直到出现'\n'或EOF。这些是唯一的两种可能性(否则它是正常字符)。 - Brandin