0

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

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

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

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

有什么方法可以完全清除输入流,无论其中有什么?

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

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

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

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

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

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

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

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

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

4

1 回答 1

0

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

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

于 2014-12-31T20:04:58.687 回答