Как очистить входной буфер перед использованием getch()?

Итак, я использую GetAsyncKeyState(), чтобы увидеть, когда какая-то клавиша нажата. Но после его использования мне нужно использовать getch (). Но кажется, что getch () получает то, что GetAsyncKeyState() получал раньше. Это версия моего упрощенного кода:

#include <graphics.h>

int main()
{
    initwindow(100, 100);

    while(true)
    {        
        if (GetAsyncKeyState(VK_RETURN))    //wait for user to press "Enter"
            break;
        //do other stuff
    }

    getch();    //this is just skipped

    return 0;
}

Я думаю, что мне нужно очистить входной буфер перед использованием getch (). Но как? PS: GetAsyncKeyState() является обязательным для меня, и я не нашел никакой замены для getch (), который мог бы работать с окном BGI и который мог бы решить проблему. Надеюсь на некоторые советы и спасибо.

2 ответа

Использование FlushConsoleInputBuffer

FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));

Это пропуск getch() позвонить из-за enter нажата пользователем для предыдущего ввода и getch получает это char, функция fflush(stdin) мы очищаем входной поток. чтобы getch() будет читать свежие входные данные из входного потока.

#include <graphics.h>

int main()
{
    initwindow(100, 100);

    while(true)
    {        
        if (GetAsyncKeyState(VK_RETURN))    //wait for user to press "Enter"
            break;
        //do other stuff
    }
    fflush(stdin);
    getch();    //this is just skipped

    return 0;
}
Другие вопросы по тегам