如何在使用kbhit()和getch()时清除键缓冲区

时间:2011-05-02 21:37:37

标签: c++ console getch kbhit

heu所以我正在使用上面提到的Windows功能,幸运的是Windows 2000及以上,但是在控制台上制作游戏我遇到了一个问题:只要按下一个键,控制台就会通过如果没有再次按下某个键,则使用kbhit()函数...

有什么办法可以清除键盘按键缓冲区,这样你就无法在没有新按键的情况下通过kbhit了吗?

如果需要新的lib下载,我想我可以...但我希望以Windows标准方式进行!

谢谢!

2 个答案:

答案 0 :(得分:2)

有人告诉你,kbhit()是一个Windows功能,误导了你。 kbhit(), getch() and their relatives are actually part of the (C language bindings to the) MS-DOS API.他们在OS / 2,Win32和其他C / C ++编译器的运行时库中的存在只是 MS / PC / DR-DOS程序的移植辅助。库将它们映射到用于访问键盘的任何 native 机制(如果有的话),并且通常仅以正确的方式用于TUI,而不是GUI,应用程序访问键盘。

如果您正在编写新的TUI应用程序,请不要使用MS-DOS API。为您正在定位的平台使用正确的原生API,例如Win32 Console APIOS/2 Console APIPOSIX General Terminal Interface(通过ncurses或其他类似)。

当你这样做时,你会阅读他们的文档,并了解如何在进行非破坏性的“偷看”之后执行键盘输入的破坏性“获取”。或者确实如何完全刷新缓冲区,如果你想做的话。

答案 1 :(得分:1)

明显的选择是FlushConsoleInputBuffer