Как очистить буфер ключа при использовании kbhit () и getch ()
Вопрос
HEU, так что я использую вышеуказанные функции Windows, которые, к счастью, предназначены для Windows 2000 и UP, но, создавая игру на консоли, я столкнулся с проблемой: как только нажат клавиша, консоль проходит KBHIT ( ) функционируйте, независимо от того, не нажимается ли клавиша ...
Есть ли какой -нибудь способ очистить буфер нажатия клавиатуры, чтобы вы не могли пройти мимо Kbhit без нового Keypress?
Если требуется новая загрузка LIB, я думаю, я мог бы ... но я надеюсь на стандартный путь Windows!
Спасибо!!
Решение
Кто бы тебе сказал kbhit()
Была ли функция Windows дезинформировала вас. kbhit()
, getch()
и их родственники на самом деле являются частью (C -языковых привязков к) MS-DOS API Их присутствие в библиотеках времени выполнения для OS/2, Win32 и других компиляторов C/C ++ просто должно быть Помощь портации для программ MS/PC/DR-DOS. Анкет Библиотека отображает их на все, что родной Существует механизм для доступа к клавиатуре, если он вообще есть, и обычно только в правильном пути для TUI, а не с графическим интерфейсом, приложения для доступа к клавиатуре.
Если вы пишете новое приложение TUI, не используйте API MS-DOS. Используйте правильный, нативный API для платформы, на которую вы нацелены, например Win32 Консоль API или OS/2 Консоль API, или POSIX Общий интерфейс терминала (через Ncurses или что -то в этом роде).
Когда вы это сделаете, вы прочитаете их документацию и узнаете, как выполнить деструктивный «получить» ввода клавиатуры после того, как он не разрубился «обзор». Или действительно как промыть буфер в полном объеме, если это то, что вы хотите сделать.
Другие советы
Очевидный выбор был бы FlushConsoleInputBuffer