【问题标题】:how to clear the key buffer while using kbhit() and getch()如何在使用 kbhit() 和 getch() 时清除密钥缓冲区
【发布时间】:2011-05-02 21:37:36
【问题描述】:

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

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

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

谢谢!!

【问题讨论】:

  • 也许问题在于,正如文档所说:“读取功能键或箭头键时,必须调用两次 getch 函数;第一次调用返回 0 或 0xE0,第二次调用返回实际键码。”?
  • 这些函数无论如何都不是“标准的”。

标签: c++ console getch kbhit


【解决方案1】:

谁告诉你 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 或类似的方式)。

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

【讨论】:

    【解决方案2】:

    显而易见的选择是FlushConsoleInputBuffer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-02
      • 1970-01-01
      • 2020-03-17
      • 2013-03-14
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      • 1970-01-01
      相关资源
      最近更新 更多