【发布时间】:2015-03-19 06:35:33
【问题描述】:
我试图退出一个在检查条件后返回void 的方法(我意识到如果我抛出异常会更容易,但我试图在这个项目中避免这种情况)。我有下面的代码,如果我正确解释它,它应该从if 语句中返回,但整个方法仍在执行。代码中是否存在问题(如果需要,我可以发布更多内容),还是有更好的方法来编写此代码而不进行异常处理?
void Rational::divide(Rational b) {
if (b.numerator == 0) {
cout << "Cannot divide by zero." << endl;
return;
} else if (b.numerator != 0) {
numerator = numerator * b.denominator;
denominator = denominator * b.numerator;
reduce();
}
}
编辑:我更新了代码以反映一些建议;澄清一下,if 语句本身正在正确执行(如果 b 为零,我会收到错误消息) - 一旦打印了错误消息,该方法的其余部分将继续运行。
编辑 2:更新为 else if 修订版。
【问题讨论】:
-
检查你的条件为什么是假的。您应该检查分母是否等于零,而不是计算结果。
-
您的 if 语句实际上是在检查分子是否为 0。您需要将其更改为 if ( b.denominator == 0 )
-
@Rubix Rechvin 我很确定 if 语句完全符合预期。该函数除以
b,我们需要确保有理值不为零,因此检查分子是否为零。有可能b参数的分子实际上并不完全是0。 -
@MarkB 啊,既然它是一个 Rational 类,我们是否推断我们将“this”除以 b?因此,为了避免错误,我们需要断言 b.numerator 不为 0?我想我被错误消息绊倒了。它应该类似于“除数不能为零”
-
所以它会打印消息并仍然运行其余代码?
标签: c++ if-statement return