Странное поведение Kbhit и getchar
Рассмотрим этот блок кода 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 ответ
Как уже упоминалось в комментариях, трудно сказать наверняка, не видя всей функции, но я подозреваю, что дополнительная printf
операторы очищают выходной буфер для вас, так как они содержат символы новой строки. + Изменить
printf("%d", d);
в
printf("%d\n", d);
и посмотрите, не даст ли это того результата, который вы хотите.