繁体   English   中英

不等待迭代结束就退出循环

[英]Exit loop without waiting for the iteration to end

我正在尝试制作一个简单的控制台计算器。 它按预期工作,但是,我想通过按下按钮来退出程序,而无需程序等待循环结束。 我尝试将!(GetAsyncKeyState(VK_RSHIFT))放入 while 循环条件中,我也尝试将!(GetAsyncKeyState(VK_RSHIFT))放入循环中的 if 语句中,结果是相同的。

#include <iostream>
#include <Windows.h>

using namespace std;

int main() {
    cout << "Press RSHIFT for the program to close!\n";

    while (!(GetAsyncKeyState(VK_RSHIFT))) {
        long double num1, num2;
        char mathOp;
        cin >> num1 >> mathOp >> num2;

        switch (mathOp) {
        case('+'):
            cout << num1 + num2 << endl;
            break;
        case('-'):
            cout << num1 - num2 << endl;
            break;
        case('*'):
            cout << num1 * num2 << endl;
            break;
        case('/'):
            cout << num1 / num2 << endl;
            break;
        default:
            cout << "ERROR: Operator doesn't match available operators (+ - * /)!\n";
        }
    }
    return 0;
}

函数调用

GetAsyncKeyState(VK_RSHIFT)

将报告调用函数时SHIFT键的状态。 但是,这似乎不是您想要的。

您似乎想要的是进行阻塞函数调用

cin >> num1 >> mathOp >> num2;

当用户按下SHIFT键时立即中止,以便您可以退出程序。

这在使用 C++ 标准库的std::cin时是不可能的。

但是,您可以做的是调用特定于平台的函数ReadConsoleInput以等待键盘事件,而不是使用std::cin 如果用户按下SHIFT键,则可以停止程序。 如果用户按下不同的键,那么您可以将该字符添加到您的输入缓冲区,当用户按下ENTER键时,您就可以处理该输入缓冲区。

这样,当用户按下SHIFT键时,您的程序将立即收到通知,而您不必求助于诸如调用Sleep函数之类的变通方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM