Странное поведение 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);

и посмотрите, не даст ли это того результата, который вы хотите.

Другие вопросы по тегам