如何在C ++中除以0

时间:2019-10-07 12:59:27

标签: c++

我已经用c ++制作了一个计算器,并且试图检查用户何时尝试除以0来给出错误。哪里有这样的例子。

这是我到目前为止所得到的

#include "pch.h"
#include <iostream>
using namespace std;

int main()
{
    int num1, num2;
    char symb;

    cout << "Enter the first number: ";
    cin >> num1;

    cout << "Enter the symbol: ";
    cin >> symb;

    cout << "Enter the second number: ";
    cin >> num2;

    int calculation;
    if (symb == '+') {
        calculation = num1 + num2;
    }
    else if (symb == '-') {
        calculation = num1 - num2;
    }else if (symb == '/'){
        calculation = num1 / num2;
    }
    else if (symb == '*') {
        calculation = num1 * num2;
    }
    else if (calculation == 0 ) {
        throw error;
    }
    else {
        cout << "wrong symbol";

    }
    cout << calculation;


    return 0;
}

4 个答案:

答案 0 :(得分:3)

首先,您的程序中有未定义的行为:

int cacluation; // uninitialised!
if (...) { }
else if (...) { }
// ...
else if (cacluation == 0) // <- (!)
{
    // ...
}

如果以前所有这些检查均失败(即用户未输入有效符号),则您现在正在评估未初始化的变量calculation

此外,假设用户输入1 + -11 - 1 ...,此检查还是不正确的。

您确实需要做的是在执行计算之前先检查除数 ,并且只有在用户实际要除法的情况下才这样做:

// ...
else if (symb == '/')
{
    // check BEFORE calculation:
    if(num2 == 0)
    {
        // appropriate error handling, e. g. print some error message
    }
    else
    {
        cacluation = num1 / num2;
    }
}

最后,您还需要避免打印出无效结果。一种非常简单的方法是用直接输出值代替对calculation变量的赋值:

else
{
    std::cout << num1 / num2; // analogously in all other branches
}

答案 1 :(得分:0)

(尽管IEEE754确实定义了浮点类型的行为,但标准C ++中未定义零除行为)。

如果使用throw,则还需要提供相应的catch

但是在这种情况下(因为您已经向控制台发出了错误),您无需这样做

if (!num2){
    std::cerr << "division by zero";
}

在计算除​​法的代码部分中就足够了。

您的分支机构else if (calculation == 0)也是一个错误,因为无需初始化calculation,但是我的修正消除了对此的需要。

答案 2 :(得分:0)

else if (symb == '/'){
    if (num2 ==0)
        cout<<"Mathematical error";
    else
        calcluation = num1 / num2;
}

答案 3 :(得分:-2)

如果char为num2,只需检查/是否等于零。您在行

上有一个运行时异常
else if (symb == '/'){
   cacluation = num1 / num2;
}

如果num2为零。

这是错误的:

else if (cacluation == 0 ) {
     throw error;
}

它可以是零除零以外的任何值。答案将是零。你错了。