Как очистить буфер ключа при использовании kbhit() и getch()

Так что я использую вышеупомянутые функции Windows, которые, к счастью, предназначены для Windows 2000 и выше, но при создании игры на консоли я столкнулся с проблемой: как только нажата клавиша, консоль проходит через kbhit() функционировать независимо от того, нажата ли клавиша снова...

Есть ли какой-нибудь способ, которым я могу очистить буфер нажатия клавиатуры, чтобы вы не могли пройти kbhit без нового нажатия клавиши?

Если новая загрузка библиотеки требует, я думаю, я мог бы... но я надеюсь на Windows стандартным способом!

Спасибо!!

2 ответа

Решение

Тот, кто сказал тебе это kbhit() была функция Windows дезинформировала вас. kbhit() , getch() и их родственники на самом деле являются частью (привязки языка C к) MS-DOS API. Их присутствие в библиотеках времени выполнения для OS/2, Win32 и других компиляторов C/C++ просто служит помощником при переносе программ MS/PC/DR-DOS. Библиотека отображает их на любой собственный механизм доступа к клавиатуре, если он вообще существует, и обычно только для TUI, а не GUI, для доступа к клавиатуре.

Если вы пишете новое приложение TUI, не используйте API MS-DOS. Используйте надлежащий, собственный API-интерфейс для целевой платформы, такой как Win32 Console API или OS / 2 Console API, или общий интерфейс терминала POSIX (через ncurses или некоторые другие).

Когда вы это сделаете, вы прочитаете их документацию и узнаете, как выполнить деструктивное "получение" ввода с клавиатуры после неразрушающего "взгляда". Или действительно, как очистить буфер целиком, если это то, что вы хотите сделать.

Очевидный выбор будет FlushConsoleInputBuffer

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