这是代码
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块?
提前致谢!
答案 0 :(得分:3)
因为如果num2
为0
,则会打印邮件,之后会尝试执行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 */