我正在尝试退出一个在检查条件后返回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
修订版。
答案 0 :(得分:0)
这就是你在做什么。您可能希望在if
声明中执行以下操作:if((double)b.denominator == 0.f)
。
在与浮点数比较时也应该小心,或者由于它们在内存中的表示方式而加倍。它几乎不会完全为零,所以你应该与epsilon进行比较。