【问题标题】:How to clear input stream that received multiple inputs in c?如何清除在c中接收到多个输入的输入流?
【发布时间】:2015-02-27 19:42:11
【问题描述】:

我正在使用 TCP 协议编写一个客户端-服务器项目,所以在我的客户端代码中有一个带有 read() 的 while 循环,它等待来自服务器的 write()。

我认为这与我实际要问的问题无关,但是,这就是导致我的问题的原因,即当客户端等待来自服务器的 write() 时,用户可以在堆积在输入缓冲区上的终端,所以当我的客户端最终收到一个 write() 并从他的 read() 移动时,我无法用通常的方式清除输入缓冲区,直到换行符是发现:

while (getchar() != '\n');

因为用户在等待时输入了很多句子并多次按下回车。

有什么方法可以完全清除输入流,不管它是什么?

到目前为止,我发现我可以使用fflush(stdin),虽然它非常规,但它对我有用,但有时它不起作用,所以我不能使用它。

我还尝试检查输入流的结尾:

while (getchar() != '\0');

但它陷入了无限循环。我还尝试使用在 read() 之后忽略新行的 scanf():

scanf("%[^\r\t\n]s", buf);

所以所有内容都会被移动到这个缓冲区,这也不起作用,只有最后输入的句子中的第一个单词被存储在那里。

最后,我尝试使用 fgets(),但也没有运气。

附:有什么方法可以在 read() 调用之前完全禁用标准输入流并在之后再次启用它?

编辑:出于存档目的,我实际上在此时分叉了我的程序,以便继续扫描输入并立即使用我提到的标准第一种方式清除它们。不过,我想知道是否有办法完全清除输入缓冲区,无论里面有什么。

【问题讨论】:

    标签: input stream buffer fflush


    【解决方案1】:

    这似乎很有希望: 基本上他/她正在做的是使用 fgets 和 fflush..

    https://www.daniweb.com/software-development/c/code/217396/how-to-properly-flush-the-input-stream-stdin

    【讨论】:

      猜你喜欢
      • 2011-09-14
      • 2013-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-11
      • 1970-01-01
      • 2012-09-06
      相关资源
      最近更新 更多