Как очистить входной буфер перед использованием 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;
}