我在检查用户是否除以0时遇到了一些麻烦。 如果用户请求除以0,则结果字符串应指示执行除零是非法的。它应该是这样的:
您的操作是分裂:6/0非法操作!
但是我不知道如何让它看起来像那样。到目前为止,我只能std::cout
一个“这是非法的”消息,但输出最终看起来像这样:
这是非法的!您的操作是:6/0 = -858993460
我还尝试在else语句中将结果设置为不同的字符串。它只是忽略了它。
我最终会如何对此进行编码?
void Simplecalc::setOperation(char oper, int op1, int op2)
{
operation = oper;
number1 = op1;
number2 = op2;
if(operation == '+')
{
answer = number1 + number2;
type ="addition";
}
else if(operation =='-')
{
answer = number1 - number2;
type ="subtraction";
}
else if(operation =='*')
{
answer = number1 * number2;
type = "multiplication";
}
else if(operation =='/')
{
if(number2 != 0)
{
answer = number1/number2;
type = "division";
}
else
{
cout<<"this is illegal!";
}
}
else if(operation =='%')
{
answer = number1%number2;
type ="modulus";
}
}
string Simplecalc::getResults()
{
stringstream ss;
ss <<"Your operation is "<<type<<": "<<number1<<" "<<operation<<" "<<number2<<"="
<<answer<<"\n";
results =ss.str();
return results;
}
答案 0 :(得分:0)
这是因为你在setOperation()函数之后调用了getResult()。即使操作是非法的,也会发生这种情况。
为什么不为此使用旗帜?如果操作是非法的,则将bool标志设置为false。使用该标志将getResults()的调用推迟到非法案例。
if(flag)
{
getResults();
}
否则 { //没做什么 }
希望能解决您的问题
答案 1 :(得分:0)
我认为你过度设计了。没有必要有“设置操作”的概念。您应该在一种方法中读取输入,执行验证和编写输出。
答案 2 :(得分:0)
你必须用'0'初始化'answer'。您将获得-858993460(等于十六进制0xcccccccc),这是answer变量的默认值。