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

StackOverflow https://stackoverflow.com/questions/5862770

  •  28-10-2019
  •  | 
  •  

Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top