我正在使用 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() 调用之前完全禁用标准输入流并在之后再次启用它?
编辑:出于存档目的,我实际上分叉了我的程序,以便继续扫描输入并立即使用我提到的标准第一种方式清除它们。不过,我想知道是否有办法完全清除输入缓冲区,无论里面有什么。