[英]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.