【发布时间】: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