所以我正在编写一个计算器作为c ++的练习,你首先通过输入a,s,m来选择运算符+
,-
,*
或/
或d。计算器工作正常,除了我设置的过滤器,如果用户输入的不是a,s,m或d,则会响应错误。过滤器是if语句:
if(Opperator=='a'||'s'||'m'||'d')
{
//some code
}
else
{
//"Operatorfault"
cout <<"opperatorfeil";
}
即使&#34;运算符&#34;如果要执行if语句,那么其他char
值都会被执行,if语句中的代码仍然会被执行。整个代码如下。输出和变量是挪威语,但我试图在评论中进行翻译。
#include <iostream>
using namespace std;
//The calculator function
int Kalkulator(int IN1, int IN2, char Opperator)
{
int Svar;
//Detects witch operator the user choose, and preforms the assigned operation
if(Opperator=='a')
{
Svar=IN1+IN2;
}
if(Opperator=='s')
{
Svar=IN1-IN2;
}
if(Opperator=='m')
{
Svar=IN1*IN2;
}
if(Opperator=='d')
{
Svar=IN1/IN2;
}
//Returns the answer
return Svar;
}
int main()
{
//Input a, s, m or d for addition, subtraction, multiplication or division, respectively
cout <<"Skriv \"a\" for addisjon, \"s\" for subtraksjon, \"m\" for multipliksjon, og \"d\" for divisjon";
cout <<endl;
cout <<endl;
char Opperator;
cin >>Opperator;
cout <<endl;
//Checks if the input is valid
if(Opperator=='a'||'s'||'m'||'d')
{
cout <<"Skriv inn det første tallet du vil gjøre opperasjonen på, trykk derreter enter, og skriv inn det andre";
cout <<endl;
cout <<endl;
int IN1;
int IN2;
cin >>IN1;
cin >>IN2;
cout <<endl;
//"The answer is"
cout << "Svaret er: ";
//Calls the calculator function, and inputs the values it has gathered, then prints the answer
cout <<Kalkulator(IN1, IN2, Opperator);
}
else
{
//"Operatorfault"
cout <<"opperatorfeil";
}
return 0;
}
答案 0 :(得分:1)
错误发生在你的if语句中。在C ++中,当您将同一个变量与多个值进行比较时,例如,如果opperator是a,m,s,d,则需要为每次比较重新生成变量。
if( Opperator=='a' || Opperator=='s' || Opperator=='m' || Opperator=='d' )
而不是你当前的if语句。
另外,作为提示,在这些情况下,switch语句要好得多,你可以简单地说明
int ans;
switch (customerPackage) {
case 'a':
ans = int1 + int2;
case 's':
ans = int1 - int2;
case 'd':
ans = int1 * int2;
case 'm':
ans = int1 / int2;
default:
string ans;
ans = "invalid input";
}
cout <<ans;
答案 1 :(得分:0)
这是错误的:
if(Opperator=='a'||'s'||'m'||'d')
你不能像这样测试相等(或不等)。代码执行相当于
if (Operator == (result of boolean ORs))
您必须单独测试相等性:
if ((op == 'a') || (op == 's') || etc...)
答案 2 :(得分:0)
为什么不这样打破它,
if (Opperator == 'a' ||
Opperator == 's' ||
Opperator == 'm' ||
Opperator == 'd')
{
// Good values
}
else
{
// Bad values
}
答案 3 :(得分:0)
if(Opperator=='a'||'s'||'m'||'d')
它检查Opperator是否等于'a',如果不是,那么's'总是返回true,所以所有逻辑都变为真。
您可以使用if
声明:
if (Opperator == 'a' || Opperator == 's' || Opperator == 'm' || Opperator == 'd') {
// my calc works well
} else {
// again my calc works well
}
或者您可以使用switch
:
switch(Opperator) {
case 'a':
case 's':
case 'm':
case 'd': // do normal operation here
break;
default: // error handle
break;
}
答案 4 :(得分:0)
您必须测试每个char是否相等:
if(Opperator=='a'||Opperator=='s'||Opperator=='m'||Opperator=='d') {
...execute
} else {
...execute something else
}
如果您想要表现出色,可以使用algorithm::anyOf()
。
#include <algorithm>
const std::vector<char> validValues{'a','s','m','d'};
if(any_of(validValues.begin(),
validValues.end(),
[&](const char &x) { return x == Opperator; }) {
// good values
} else {
// bad values
}