QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1726|回复: 9

在linux c中清除键盘缓冲区的问题

[复制链接]
发表于 2005-5-22 18:35:10 | 显示全部楼层 |阅读模式
再linux c中有清除键盘缓冲区的函数吗?
如果没有,那怎样实现呢?
发表于 2005-5-22 23:10:42 | 显示全部楼层
fflush(stdin)试试看,不过好像是有问题的……
回复

使用道具 举报

 楼主| 发表于 2005-5-25 19:11:27 | 显示全部楼层
the function "fflush" has no effect.
for example:



#include <stdio.h>
                                                                                
int main()
{
    char c,d[10];
    int i=0;
    scanf("%s",d);
    fflush(stdin);
    while((c=getchar())!='\n')
        i++;
    printf("%s\n",d);
    printf("%d\n",i);
}

the result of the above program is:

# ./test
abcd
abcd
0
#

Please help me to solve the problem that clear the keyboard-buffer~,and thanks
回复

使用道具 举报

 楼主| 发表于 2005-5-26 12:07:46 | 显示全部楼层
有人可以帮助我解决这个问题吗?
回复

使用道具 举报

 楼主| 发表于 2005-5-27 11:54:24 | 显示全部楼层
顶一下,希望有人能帮我一下
回复

使用道具 举报

发表于 2005-5-27 16:06:43 | 显示全部楼层
[code:1]
#include <stdio.h>

int main()
{
char c,d[10];
int i=0;
scanf("%s",d);
fflush(stdin);
getchar();//将那个多余的回车去掉
while((c=getchar())!='\n')
i++;
printf("%s\n",d);
printf("%d\n",i);
}
[/code:1]
回复

使用道具 举报

 楼主| 发表于 2005-5-30 21:45:48 | 显示全部楼层
这也是个办法啊,哈哈。
但是我还是不知道fflush(stdin)到底有什么作用?
强制将缓冲区里的内容写入基本输入设备?
如果是这样,可不可以用fflush(stdout)呢?
回复

使用道具 举报

发表于 2005-6-2 16:38:12 | 显示全部楼层
Try this:
char c1,c2;
if(2==scanf("%c%*c%c",&c1,&c2))
  {...}
回复

使用道具 举报

发表于 2005-6-3 13:22:44 | 显示全部楼层
可以用select检测/dev/tty是否可读, 如果是, 就读1个字节并重新检测, 如果否, 那么键盘缓冲区清除完毕.
回复

使用道具 举报

发表于 2005-6-7 13:29:19 | 显示全部楼层
呵呵
这个缓冲的问题还真是比较讨厌
《Unix环境高级编程》有详细讨论
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-5 21:49 , Processed in 0.051339 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表