Kbhit和getchar

时间:2017-07-09 04:30:15

标签: c conio

考虑这个C ++代码块。

    if(_kbhit()){
        //printf("Enter\n");
        c = getchar();
        int d = c;
        printf("%d", d);
        //printf("Exit \n");
    }

我得到的输出是

sd115d100s100

如果我按s,d然后按d,s。奇怪的是,当我按下某个字符时,显示了之前按下的字符的ascii。

现在考虑,

    if(_kbhit()){
        printf("Enter\n");
        c = getchar();
        int d = c;
        printf("%d", d);
        printf("Exit \n");
    }

我这次得到的输出是

aEnter
97
Exit 
dEnter
100
Exit 
dEnter
100
Exit 
aEnter
97
Exit

现在一切正常,按下一个角色后,正在显示正确字符的ascii代码。

为什么会出现这种异常现象?我怎样才能纠正这种异常现象?

1 个答案:

答案 0 :(得分:2)

正如评论中所提到的,在没有看到整个函数的情况下很难确定,但我怀疑额外的printf语句正在为您刷新输出缓冲区,因为它们包含换行符。变化

printf("%d", d);

printf("%d\n", d);

并查看是否没有您想要的结果。