【问题标题】:C++ console not exiting as expectedC++ 控制台未按预期退出
【发布时间】:2014-09-04 04:30:55
【问题描述】:

我有一个接受用户输入的小型控制台应用程序,并且我有以下循环不断询问用户输入,直到他们(a)输入他们的姓名并按 enter 或(b)按退出键。出于某种原因,当他们按下转义键时,他们必须按下回车键,此时只有循环结束,控制台窗口仍然保持打开状态,我错过了什么?代码如下...

while (input.empty()) {

    cout << "Enter Something";

    getline(cin, input);

    if (GetAsyncKeyState(VK_ESCAPE))
    {
        exit(EXIT_SUCCESS);   // this should just close the console entirely, right?
    }

} 

【问题讨论】:

  • getline 块等待输入。如果要异步处理输入,则需要使用不同的方法。
  • 如果我没记错的话std::getline() 会在等待输入时阻塞,所以GetAsynKeyState() 在读取输入时永远不会运行。

标签: c++


【解决方案1】:

GetAsyncKeyState 在调用getline 之后被调用。 getline 等待用户输入一些数据并按下回车键(或者更确切地说,它等待从标准输入中读取以换行符结尾的一行数据)。只有在getline 完成后,此代码才会检查是否按下了 ESC 键。

请参阅此问题以了解如何完成您想要完成的工作:How to read until ESC button is pressed from cin in C++

【讨论】:

    【解决方案2】:

    我认为将 getline() 放在 If 测试之前不允许后者执行,因为前者会导致阻塞 I/O。试试这个:

    while (input.empty()) {
        cout << "Enter Something";
        if (GetAsyncKeyState(VK_ESCAPE)) {
            exit(EXIT_SUCCESS);        
        }
        getline(cin, input);
    }
    

    【讨论】:

    • 除非您在看到消息之前已经按下了转义键,否则这是同样的问题。
    猜你喜欢
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 2020-09-01
    • 2021-01-04
    相关资源
    最近更新 更多