【问题标题】:can I know which Keyboard Key has been pressed before hitting Enter我可以知道在按 Enter 之前按下了哪个键盘键吗
【发布时间】:2011-10-03 18:12:52
【问题描述】:

我可以知道在按 Enter 之前按下了哪个键盘键吗?有没有办法在 c++ 中捕获此类按键事件?请提供一个简短的示例。 我在 Windows 32bit 上使用 VC++。

【问题讨论】:

  • 在什么平台上?使用哪些 API?否则,您将获得 2 打示例。
  • 当然。将所有击键记录到缓冲区中,然后在遇到“输入”事件时回头查看缓冲区。
  • 查看终端处理。在 Linux 上,查看 ncurses 库。
  • 致接近者:即使您想不出任何答案,或者问题的真正含义,其他人可能也可以。例如,我可以毫无问题地回答这个问题。与其关闭你不理解的问题,不如只关闭那些你完全理解的问题,在你确信该问题没有任何有用的答案的情况下。或者,根本不要触摸那个关闭按钮。因为你没有资格,而且你也不能通过随意关闭问题来训练自己变得更好。
  • @AlfP.Steinbach:实际上,有趣、同时令人担忧和令人失望的是,以Not a Real Q 关闭此内容的用户中没有一个愿意为他们为什么添加一个理由感觉这不是一个真正的问题。

标签: c++


【解决方案1】:
// See <url: http://en.wikipedia.org/wiki/Conio.h>.
#include <iostream>
#include <conio.h>      // ! Non-standard, but de facto std. on Windows.

int main()
{
    using namespace std;

    for( ;; )
    {
        cout << "OK, should this program stop now..." << endl;
        cout << "Press Y for Yes or N for No: " << flush;

        for( bool answered = false; !answered; )
        {
            char const ch = getch();        // From [conio.h].
            switch( ch )
            {
            case 'y':
            case 'Y':
                cout << "<- Yes" << endl;      // Input echo.
                cout << "Bye!" << endl;
                return 0;

            case 'n':
            case 'N':
                cout << "<- No" << endl;      // Input echo.
                cout << endl;
                answered = true;

            default:
                ;
            }
        }
    }
}

对于 GUI 程序有点不同。

注意:如果需要,您也可以一直使用 Windows API,但是,我建议一步一步,先探索conio.h 功能。

干杯,

【讨论】:

  • P Steinbach 谢谢先生,我正在尝试。实际上我对 c++ 有点陌生,并试图学习它。再次感谢。
  • P Steinbach 先生,我不明白“for(bool answers = false;!answered;)”循环的工作,它似乎等同于无限循环,即 while(1) [但我知道它不是]。 .你能解释一下这个循环吗??
  • @aj8080:你需要 a C++ textbook。但简而言之,当进入循环时,变量answered 被设置为false,并且每次,包括第一次,如果!answered,即如果用户有 ,则只执行循环体还没有回答。当这个继续条件为假时,执行直接跳到循环体之后的一个假想的地方;循环结束。
  • P Steninbach : 哦..现在明白了!对不起这样的问题......我想问你的另一件事是,你会推荐我最好的 C++ 参考书,目前我正在使用“ c++ 完整参考“由 Herbert Schield 撰写。 ??
  • 请注意getch is deprecated
猜你喜欢
  • 2012-08-28
  • 2010-11-27
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
  • 2023-04-07
相关资源
最近更新 更多