考虑下面这段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代码就会显示出来。
为什么会出现这种反常现象?我该如何纠正这种异常呢?
发布于 2017-07-09 12:58:04
正如注释中提到的,如果看不到整个函数,就很难确定,但我怀疑附加的printf语句正在为您刷新输出缓冲区,因为它们包含换行符。变化
printf("%d", d);
至
printf("%d\n", d);
看看这样做会不会得到你想要的结果。
https://stackoverflow.com/questions/44992988
复制相似问题