在c语言中:_kbhit与_kbhit()有什么不相同

在c语言中:_kbhit与_kbhit()应该是不同的吧
_kbhit与_kbhit(),在有_getch()在前时得到的结果不一样。

就比如说,下面两个代码输入一次’e'(任意键)和‘<-’(左方向键)(功能键)
却会得到不同的结果。

#include
#include
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;
}

运行结果:全部识别

img


—分割线—

#include
#include
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;
}

运行结果:部分识别

img


—分割线—
首先,我们知道方向键之类的功能键对_kbhit的影响都是2次,其他按键则为一次。
而_getch()也确实读取了两次,其他按键自然是一次,没有问题。

我们可以发现_kbhit()在这种情况下,无法识别正常的值,却可以识别按功能键时的第一下(算是信号吧),这是我得出的结论。
但是为什么会这样我是一无所知。

然后我上网查了许多资料,都说这二者是一样的,这令我十分头疼。

真的搞不懂,希望得到指点

kbhit() 是一个C和C++函数,用于非阻塞地响应键盘输入事件,为 "keyboard hit(键盘敲击)"的简写。

kbhit 是 _kbhit() 的弃用别名,尽管它依然受到支持,微软仍建议使用遵循 C 命名规则的 _kbhit() 。