簡體   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