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

发布于 2024-11-04 07:30:03 字数 258 浏览 0 评论 0原文

heu 所以我使用上面提到的 Windows 函数,幸运的是这些函数适用于 Windows 2000 及更高版本,但是在控制台上制作游戏时我遇到了一个问题:只要按下一个键,控制台就会传递 kbhit( )功能,无论是否再次按下某个键...

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

如果下载新的库是需要我想我可以...但我希望有一个 Windows 标准方式!

谢谢!!

heu so I'm using the above stated windows functions which luckily are for windows 2000 and up, but in making a game on the console I've run into a problem: as soon as a key is pressed the console gets passed the kbhit() function no matter if a key is not pressed again...

is there some way I can clear the keyboard press buffer so you can't get passed kbhit without a new keypress?

If a new lib download is requires I guess I could... but I'm hoping for a windows standard way!

Thanks!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

奈何桥上唱咆哮 2024-11-11 07:30:07

无论是谁告诉您 kbhit() 是一个 Windows 函数,都误导了您。 kbhit()getch() 及其相关函数实际上是(C 语言绑定到)的一部分MS-DOS API。它们出现在 OS/2、Win32 和其他 C/C++ 编译器的运行时库中只是为了为 MS/PC/ DR-DOS 程序。。该库将它们映射到任何存在的用于访问键盘的本机机制(如果有的话),并且通常仅以正确的方式让 TUI(而不是 GUI)应用程序访问键盘。

如果您正在编写新的 TUI 应用程序,请不要使用 MS-DOS API。使用适合您的目标平台的正确的本机 API,例如 Win32 控制台 APIOS/2 控制台API,或 POSIX 通用终端接口(通过 ncurses 或类似的) 。

当您这样做时,您将阅读他们的文档并了解如何在执行非破坏性“查看”后对键盘输入执行破坏性“获取”。或者实际上如何彻底刷新缓冲区(如果这是您想要做的)。

Whoever told you that kbhit() was a Windows function misinformed you. kbhit(), getch() and their relatives are actually part of the (C language bindings to the) MS-DOS API. Their presence in the runtime libraries for OS/2, Win32, and other C/C++ compilers is simply to be a porting aid for MS/PC/DR-DOS programs. The library maps them onto whatever native mechanism exists for accessing the keyboard, if there is one at all, and usually only in the right way for TUI, not GUI, applications to access the keyboard.

If you're writing a new TUI application, don't use the MS-DOS API. Use the proper, native, API for the platform that you're targetting, such as the Win32 Console API or the OS/2 Console API, or the POSIX General Terminal Interface (via ncurses or some such).

When you do, you'll read their documentation and find out how to perform a destructive "get" of the keyboard input after doing a non-destructive "peek". Or indeed how to flush the buffer in its entirety if that is what you want to do.

病毒体 2024-11-11 07:30:07

显而易见的选择是 FlushConsoleInputBuffer

The obvious choice would be FlushConsoleInputBuffer

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文