linux下如何清空(刷新)stdin缓冲区?注意是清空(刷新),而不是关闭.

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
头像
astolia
论坛版主
帖子: 6703
注册时间: 2008-09-18 13:11

Re: linux下如何清空(刷新)stdin缓冲区?注意是清空(刷新),而不是关闭.

#16

帖子 astolia » 2014-05-05 16:39

如果你只要单个字符,还不如把终端设置成noncanonical mode。用户输入单个字符后不用回车程序就可以立刻收到

代码: 全选

#include <termios.h>
#include <unistd.h>

struct termios tc;
tcgetattr(STDIN_FILENO, &tc);
tc.c_lflag &= ~ICANON;
tcsetattr(STDIN_FILENO, TCSANOW, &tc);
或者调用外部程序

代码: 全选

system("stty raw");
windows下有getche来干类似的事
回复