C++ 处理零误差除法
因此,我将代码发布了一段时间,代码运行良好。代码对两个分数执行加法、减法和乘法,然后找出第一个分数是否小于第二个分数,最后在第二行计算分数的十进制形式。但是我需要抛出一个异常,如果分母为0,构造函数将停止并抛出一个无效的输入消息,然后继续下一组输入 输入 预期产量 我在想,我可以在int main中执行所有需要的操作,如果构造函数抛出错误,则打印出无效的输入,否则打印出操作。我只是不知道如何处理类,我想使用Catch-and-throw方法,但我不知道如何从构造函数输出标志 建造师 主要 如果出现最坏的情况,我将只进行int main检查,看看它们是否为0,并打印出无效的输入。但它要求构造函数将异常抛出到0分母 我不确定是否需要完整的代码,它有点长,但如果您想查看它,这里有一个链接:C++ 处理零误差除法,c++,error-handling,C++,Error Handling,因此,我将代码发布了一段时间,代码运行良好。代码对两个分数执行加法、减法和乘法,然后找出第一个分数是否小于第二个分数,最后在第二行计算分数的十进制形式。但是我需要抛出一个异常,如果分母为0,构造函数将停止并抛出一个无效的输入消息,然后继续下一组输入 输入 预期产量 我在想,我可以在int main中执行所有需要的操作,如果构造函数抛出错误,则打印出无效的输入,否则打印出操作。我只是不知道如何处理类,我想使用Catch-and-throw方法,但我不知道如何从构造函数输出标志 建造师 主要 如果出
或者如果需要,我可以把它贴出来。真的,我只是在寻找一些伪代码或者一个如何做到这一点的想法 通过将其放入构造函数中,只有在构建对象时才会对其进行测试。您需要在实际需要测试零除法的地方进行测试。@TriHard8我认为只有在实际进行零除法时才进行测试,但赋值特别说明我需要在这个构造函数中进行此操作,这就是为什么我有点困惑的原因。抛出在构造函数中,catch在main中。@1201programalam噢,我不知道您可以在抛出的范围之外声明catch。@Motorscooter:这是产生异常的主要原因之一,而不仅仅是检查返回值。在本地检查报税表花费不多,但需要在每个级别进行检查,直到有人处理它,这将是一件很难看的事情。异常让不知道如何处理问题的中间堆栈层隐式地将问题推到最前面,直到有人自愿使用try/catch来处理该问题,这样他们的代码就不需要输入代码来重新传输他们无法识别的异常,也无法做任何事情。
2
2 0 4 5
1 2 3 4
Invalid input
5/4 -1/4 3/8 1/24 True
.50 .75
Rational(int n, int d)
{
num = n;
denom = d;
if (denom == 0) {
throw overflow_error("Divide by Zero");
}
normalize();
}
int main()
{
int case_count, a, b, c, d;
cin >> case_count;
for (int i = 0; i < case_count; ++i) {
cout << "Case " << i << "\n";
cin >> a;
cin >> b;
cin >> c;
cin >> d;
Rational frac1(a, b);
Rational frac2(c,d);
Rational frac1(a, b);
Rational frac2(c, d);
Rational add;
Rational sub;
Rational mult;
Rational div;
try {
add = frac1 + frac2;
sub = frac1 - frac2;
mult = frac1 * frac2;
div = frac1 / frac2;
cout << add << " ";
cout << sub << " ";
cout << mult << " ";
cout << div << " ";
cout << (frac1 < frac2) << "\n";
cout << frac1.toDecimal() << " ";
cout << frac2.toDecimal() << "\n";
}
catch (overflow_error e) {
cout << e.what();
}
}
return 0;
}