如何在c语言中清除收到多个输入的输入流?

问题描述 投票:0回答:1

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

我认为这与我实际提出的问题无关,然而,这就是导致我的问题的原因,那就是当客户端在等待服务器的写()时,用户可以在终端上输入句子,而这些句子会被堆积在输入缓冲区上,所以当我的客户端最终收到一个写()并从他的读()中继续前进时,我不能用通常的方式清除输入缓冲区的每个字符,直到找到新的行字符。

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

因为用户在等待的过程中已经输入了很多句子,并多次按下回车键。

有没有什么方法可以让我完全清除输入流中的任何内容?

到目前为止,我所发现的是,我可以使用 fflush(stdin) 而且,虽然非常规,但它对我来说是有效的,但有时它不是,所以我不能使用它。

我也试过用检查输入流的结束。

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

但是它陷入了一个无限循环。我还试过用scanf()来忽略read()之后的新行。

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

这样所有的东西都会被移动到这个缓冲区,但这也没有用,只有最后输入的句子的第一个字会被存储在那里。

最后,我试着用fgets()来处理,但也没有成功。

P.S. 有什么办法可以让我在read()调用前完全禁用标准输入流,然后在调用后马上再启用?

编辑: 为了存档,我实际上在这一点上叉开了我的程序,以便继续扫描输入,并立即用我提到的第一种标准方法清除它们。不过,我还是想知道是否有一种方法可以完全清除输入缓冲区,不管里面有什么。

input stream buffer fflush
1个回答
0
投票

这看起来很有希望。基本上他所做的是用 fgets 和 fflush...

https:/www.daniweb.comsoftware-developmentccode217396how-to-properly-flush-the-input-stream-stdin

© www.soinside.com 2019 - 2024. All rights reserved.