在c语言中:_kbhit与_kbhit()应该是不同的吧
_kbhit与_kbhit(),在有_getch()在前时得到的结果不一样。
就比如说,下面两个代码输入一次’e'(任意键)和‘<-’(左方向键)(功能键)
却会得到不同的结果。
#include<stdio.h>
#include<conio.h>
int main(){
int i=1;
char x;
while(1)
{
x=_getch();
printf("第%d次\n",i++);
printf("%d %c\n",x,x);//输出ASCII码、和值
if(_kbhit)printf("kbhit有识别\n\n");
else printf("kbhit无识别\n\n");
}
return 0;
}
运行结果:全部识别

—分割线—
#include<stdio.h>
#include<conio.h>
int main(){
int i=1;
char x;
while(1)
{
x=_getch();
printf("第%d次\n",i++);
printf("%d %c\n",x,x);//输出ASCII码、和值
if(_kbhit())printf("kbhit有识别\n\n");
else printf("kbhit无识别\n\n");
}
return 0;
}
运行结果:部分识别

—分割线—
首先,我们知道方向键之类的功能键对_kbhit的影响都是2次,其他按键则为一次。
而_getch()也确实读取了两次,其他按键自然是一次,没有问题。
我们可以发现_kbhit()在这种情况下,无法识别正常的值,却可以识别按功能键时的第一下(算是信号吧),这是我得出的结论。
但是为什么会这样我是一无所知。
然后我上网查了许多资料,都说这二者是一样的,这令我十分头疼。
真的搞不懂,希望得到指点