Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 处理零误差除法_C++_Error Handling - Fatal编程技术网

C++ 处理零误差除法

C++ 处理零误差除法,c++,error-handling,C++,Error Handling,因此,我将代码发布了一段时间,代码运行良好。代码对两个分数执行加法、减法和乘法,然后找出第一个分数是否小于第二个分数,最后在第二行计算分数的十进制形式。但是我需要抛出一个异常,如果分母为0,构造函数将停止并抛出一个无效的输入消息,然后继续下一组输入 输入 预期产量 我在想,我可以在int main中执行所有需要的操作,如果构造函数抛出错误,则打印出无效的输入,否则打印出操作。我只是不知道如何处理类,我想使用Catch-and-throw方法,但我不知道如何从构造函数输出标志 建造师 主要 如果出

因此,我将代码发布了一段时间,代码运行良好。代码对两个分数执行加法、减法和乘法,然后找出第一个分数是否小于第二个分数,最后在第二行计算分数的十进制形式。但是我需要抛出一个异常,如果分母为0,构造函数将停止并抛出一个无效的输入消息,然后继续下一组输入

输入

预期产量

我在想,我可以在int main中执行所有需要的操作,如果构造函数抛出错误,则打印出无效的输入,否则打印出操作。我只是不知道如何处理类,我想使用Catch-and-throw方法,但我不知道如何从构造函数输出标志

建造师

主要

如果出现最坏的情况,我将只进行int main检查,看看它们是否为0,并打印出无效的输入。但它要求构造函数将异常抛出到0分母

我不确定是否需要完整的代码,它有点长,但如果您想查看它,这里有一个链接:


或者如果需要,我可以把它贴出来。真的,我只是在寻找一些伪代码或者一个如何做到这一点的想法

通过将其放入构造函数中,只有在构建对象时才会对其进行测试。您需要在实际需要测试零除法的地方进行测试。@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;

}