【问题标题】:Is there a function that combines the functions kbhit() and a getch()?有没有结合函数 kbhit() 和 getch() 的函数?
【发布时间】:2012-03-17 03:39:09
【问题描述】:

我想要一个结合了 kbhit()getch() 的函数。
换句话说,我想在程序运行时,如果我按下 'q' 键,程序会停止而不会暂时停止,以便像 getch() 函数一样接收字符。
我想结合 kbhit() 优势和 getch() 优势。

希望你明白我的目的。

【问题讨论】:

    标签: c++ c function


    【解决方案1】:

    kbhit 告诉你是否有角色在等待。 getch 将返回下一个字符,如果需要,等待一个字符。我能想到的两者的唯一自然组合是如果有一个字符将返回一个字符,但如果没有可用的字符则不会等待。这很容易做到,因为你已经有了kbhitgetch

    /* Returns a character from stdin, if there is one.
     * Otherwise, returns -1. */
    int getch_nonblocking(void)
    {
      return kbhit() ? getch() : -1;
    }
    

    【讨论】:

    • 对不起。我以为你在使用诅咒。显然,您正在使用 conio。请看我修改后的答案。
    • 它是 _kbhit() 和 _getch()/_getche() 形式 conio.h 。并且上面的算法没有考虑特殊(功能)键。
    • 你上面的例子效果很好,但是我不是很理解,没问题
    • @Lion King:读取功能键或方向键时,必须调用两次getch();第一次调用返回 0 或 0xE0,第二次调用返回实际的键码。
    • @Edwin,你是说我的函数应该考虑特殊键吗?我不确定我是否同意。我的功能似乎并不比普通的旧 getch 差。
    【解决方案2】:

    根据您提到的kbhitgetch,您可能正在使用Windows。在这种情况下,您可以尝试GetKeyboardState

    【讨论】:

    • 谢谢,但你能告诉我一个简单的例子吗?
    • 您和 MSDN 库之间是否有路由器关闭?
    • 基本上,在获取状态之前给它一个 256 BYTE 的数组,然后通过再次使用它来检查是否有任何关键状态与原始数组相比发生了变化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    相关资源
    最近更新 更多