C ++除以零

时间:2013-03-07 16:56:42

标签: c++

我开始学习C ++编程,并对错误处理有疑问。

我已经制作了一个代码来计算函数ax+b=0中的x(所以我必须将-b除以a)。用户通过cin >>

输入值

如果我除以0,我得到-int作为输出。是否可以捕获错误(例如使用if语句)?

我知道除以零是不可能的,而且我也知道如果不检查用户的输入(例如if ((a != 0)){calculate}),它就不是一个好的行为。问题是我想知道如何/如何捕获此错误;-)它是否依赖于硬件,操作系统或编译器?

我的老师无法帮助我;)

顺便说一下。我在Mac OS X 10.8.2上使用Eclipse Juno IDE for C / C ++

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    float a, b, x;   //float da Kommazahlen erwartet werden
    cout << "ax + b = 0" << '\n'<< endl;
    cout << "Bitte geben Sie einen Wert für a ein:" << endl;
    cin >> a;
    cout << "Bitte geben Sie einen Wert für b ein:" << endl;
    cin >> b;

    x = -b/a;
    cout << "Ergebnis:" << x << endl;

    if (x == #INF )
    {
        cout << "Du bist a Volldepp - durch Null kann man nicht teilen!" << endl;
    }

    return 0;
}

6 个答案:

答案 0 :(得分:7)

是:

在C ++ 03中

 if ((x == +std::numeric_limits<float>::infinity()) || 
     (x == -std::numeric_limits<float>::infinity())
    )

在C ++ 11中

 if (std::isinf(x))

答案 1 :(得分:4)

在尝试除法之前,只需检查a == 0

if (a == 0) {
    std::cerr << "I'm not even going to try\n";
    return 1;
} else {
    std::cout << "-b/a = " << (-b/a) << std::endl;
}

但是,对于一些非常小的数字,这仍然会产生inf

(请注意,一般情况下,检查float是否等于某个值是not reliable because of round-off errors,但是对于零则没问题。)

答案 2 :(得分:1)

您应该在计算之前检查输入的正确性,而不是之后:

if ( a == 0 ) {
 if ( b == 0 )
   cout << "equation valid for all x" << endl;
 else
   cout << "no x satisfies this equation" << endl;
}

答案 3 :(得分:1)

是的,处理这种情况的最佳方法是== 0条件。除以零也不例外,它在硬件级别处理。硬件向操作系统和操作系统发送中断,从而导致应用程序崩溃。 它可以通过信号捕获:

#include <csignal>
#include <iostream>

using namespace std;

void handler(int nVal) 
{
    cout << "Divid By Zero Error" << endl;
}

int main() 
{
    signal(SIGFPE, handler);
    int nVal = 1/0;
}

答案 4 :(得分:1)

我回应其他海报说你应该检查你的论点,但还有另一种选择:http://en.cppreference.com/w/cpp/numeric/math/math_errhandling

根据该链接,在C ++ 11中,您可以设置#define以使其在除以零时抛出FE_DIVBYZERO类型的异常。但该页面上的文档并不清楚,因此请调查一下您自己的编译器是否支持此功能。

答案 5 :(得分:0)

您无法在C中捕获异常,但可以通过检查值来避免异常。

尝试这样,它会帮助你

if (a == 0) {
  x = 0;
} else {
  x = b/a;
}