清除输入缓存问题之fflush(),scanf(),bioskey(),kbhit()

来源:百度知道 编辑:UC知道 时间:2024/06/07 08:20:40
如果使用scanf()时输入异常,可以用fflush(stdin)先将输入缓存清除再重新输入,如:
while(scanf("%d", &a) != 1){
fflush(stdin);
}
但是用bioskey(1),kbhit(),却不能使用fflush(stdin)清除原来的键值。当按下按键时,如果键值没有被其他函数如getch()接收,则再次用bioskey(1),kbhit()返回的值仍然表示为有按键按下代码如下:
while(1)
{
printf("bioskey(1) = %d\n", bioskey(1));
fflush(stdin);
sleep(2);
}
当按键按下后,显示的都是有按键值,虽然已经不再继续按键

这是为什么??

不是一个系统的。 scanf, printf , fflush之类的属于buffed io,这是比较高级的一套东西。 而 kbhit, getch什么的是更底层的输入方式, 不通过scanf用的这个buffer的,所以 fflush对这个也没什么用