1

考虑这个 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 代码。

为什么会出现这种异常?我该如何纠正这个异常?

4

1 回答 1

2

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

printf("%d", d);

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

看看是否没有你想要的结果。

于 2017-07-09T04:58:03.507 回答