错误检查简单计算器

时间:2013-01-31 06:48:27

标签: c++

我在检查用户是否除以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;
}

3 个答案:

答案 0 :(得分:0)

这是因为你在setOperation()函数之后调用了getResult()。即使操作是非法的,也会发生这种情况。

为什么不为此使用旗帜?如果操作是非法的,则将bool标志设置为false。使用该标志将getResults()的调用推迟到非法案例。

if(flag)
{
    getResults();
}

否则     {        //没做什么      }

希望能解决您的问题

答案 1 :(得分:0)

我认为你过度设计了。没有必要有“设置操作”的概念。您应该在一种方法中读取输入,执行验证和编写输出。

答案 2 :(得分:0)

你必须用'0'初始化'answer'。您将获得-858993460(等于十六进制0xcccccccc),这是answer变量的默认值。