![](/img/trans.png)
[英]for loop iteration_expression value doesn't increment on loop exit
[英]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.