【发布时间】:2019-07-06 04:06:06
【问题描述】:
我正在尝试使用 c++ 制作计算器,我正在尝试实现错误处理,因此如果用户输入非算术运算符,它将告诉用户请使用 while 循环输入运算符。问题是,即使用户在第一次运行时输入运算符,while 循环仍然会执行。
我试过不在while和perinthesis之间加空格,我也试过不使用变量,只放所有条件来触发循环。
string getop()
{
string op;
int check = 1;
cout << "Enter an operator (+ - / *): ";
cin >> op;
if ((op != "+") || (op != "-") || (op != "/") || (op != "*"))
{
check = 0;
}
while (check == 0) // while the input is not a valid operator
{
cout << "Invalid operator, please enter a valid operator: ";
cin >> op;
if ((op == "+") || (op == "-") || (op == "/") || (op == "*"))
check = 1;
}
return op;
}
问题是,即使用户在第一次运行时输入了一个运算符,while 循环仍然会执行。
【问题讨论】:
-
if ((op != "+") || (op != "-") || (op != "/") || (op != "*"))这个比较是错误的。其中至少有 3 个总是正确的,所以如果你将它们or放在一起,你每次都会得到true。像第二次那样做。让check从0开始,然后执行if ((op == "+") || (op == "-") || (op == "/") || (op == "*")),看看你是否应该把它放到1。 -
@Blaze 真可惜。目前仅此评论的解释就超过了 2/3 的答案。要是你把这个作为答案就好了,这样它就可以被识别出来了。
-
if (!...)后跟while (!...)可以简单地替换为do { } while (!...);。这样可以防止代码重复。 -
这并没有解决问题,但代码不需要所有这些括号。
if (op == "+" || op == "-" || op == "/" || op == "*")工作得很好。==的优先级高于||,这确实是唯一有意义的事情。 -
@scohe001 感谢您的认可。我很着急,所以我没有时间详细回答,但现在看来当前的答案很好而且很详细。
标签: c++