【发布时间】:2021-12-15 08:02:52
【问题描述】:
我正在尝试制作一个简单的控制台计算器。它按预期工作,但是,我想通过按下按钮退出程序并且程序不等待循环结束。我尝试将!(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;
}
【问题讨论】:
-
break 不会让你跳出循环,但 goto 会
-
您应该检查what
GetAsyncKeyStatereturns。你的代码写得好像它返回一个bool,但它比这更复杂。 -
当程序在
cin >> num1 >> mathOp >> num2;中等待用户输入时,不会调用其他函数。如果你真的需要这种行为,你必须创建一个单独的 UI 线程并在那里监控按键。一旦按下该键,您就可以拨打ExitProcess()。 -
@Eugene 我想我可以在循环结束时使用睡眠功能,让用户有时间关闭程序。尽管我的解决方法不能完全回答我的问题,但它工作得还不错!感谢您的回复!但是,我将保持线程打开,以防有人知道在没有完成迭代的情况下退出循环的方法。
-
@Eugene:对我来说,使用
ReadConsoleInput而不是创建新线程似乎更合适。请参阅我的答案以获取更多信息。
标签: c++ windows loops winapi input