切换案例中的c ++ if else语句 - 解释

时间:2013-12-18 10:35:05

标签: c++

刚刚开始学习。 我在switch语句

中有一个关于if else的问题

这是代码

    switch (operation)
{
        case '+': 
        result = num1 + num2;
        cout << result << endl;
        break;

        case '-':
            result= num1-num2; cout << result<< endl; break;

        case '*':
            result= num1 * num2;
            cout << result<< endl;
            break;

        case '/':

            if (num2 == 0)
            {
                cout << "num2 cannot be zero - division with zero is not possible!\n"; 
            }else{
                result= num1/num2;
            }
            cout << result << endl;

            break;




default:
    cout << "message!" << endl;
    break;
}

确定此代码生成错误 - 运行时检查失败#3 - 正在使用变量'result'而未初始化。

如果我改变代码并在关于不可能用0分割的消息之后添加中断

            case '/':

            if (num2 == 0)
            {
                cout << "num2 cannot be zero - division with zero is not possible!\n"; break;
            }else{
                rezultat = num1/num2;
            }
            cout << rezultat << endl;

            break;

一切都按预期工作。

任何人都可以从程序逻辑方面澄清这里发生了什么吗?这是否意味着即使满足条件,也会运行if语句的else块?

提前致谢!

3 个答案:

答案 0 :(得分:3)

因为如果num20,则会打印邮件,之后会尝试执行cout << result << endl;,结果仍然未初始化

另一种可能的解决方法是:

case '/':

    if (num2 == 0)
    {
        cout << "num2 cannot be zero - division with zero is not possible!\n"; 
    }else{
        result= num1/num2;
        cout << result << endl;
    }

    break;

答案 1 :(得分:1)

在原始代码中,如果num2 == 0,则您的邮件会发送到cout,但result未分配值。在else块之后的行继续执行:

cout << result << endl;

因此产生错误。

在修改后的代码中,如果num2 == 0那么行上的两个语句

cout << "num2 cannot be zero - division with zero is not possible!\n"; break;

被执行。 break;语句导致执行在整个switch块结束后继续,因此cout << rezultat << endl;永远不会被执行。

答案 2 :(得分:0)

希望您的问题在上面得到澄清,但是您可能会删除多余的问题  来自cout<<result<<endl;语句的Switch并将其置于同一个范围之外,因为它在所有case中都是常见的部分,并且只显示计算结果,例如

 switch(operation)
 {
   case '+': /*your computation here*/ break;
   case '-': /*your computation here*/ break;
   case '*': /*your computation here*/ break;
   case '/': /*your computation here*/ break;
   default:  /*your message command here*/;
 }  
 cout<<result<<endl; /* since this line is common, and does nothing but prints the result */