2

C++ プログラミングを学び始めましたが、エラー処理について質問があります。

関数から x を計算するコードを作成しましたax+b=0(したがって、 で割る必要があります-b) a。値は、ユーザーが次の方法で入力します。cin >>

0 で除算する-intと、出力として得られます。エラーをキャッチすることは可能ですか (たとえば、ifステートメントで)?

ゼロで除算することは不可能であることを知っています。また、ユーザーの入力をチェックしない場合、プログラムの動作が適切ではないことも知っています (例: if ((a != 0)){calculate})。問題は、このエラーをキャッチするためにどのように機能するか、またはどのように機能するかを知りたいということです;-)ハードウェア、オペレーティングシステム、またはコンパイラに依存しますか?

私の先生は私を助けることができませんでした;)

ところで。Mac OS X 10.8.2 で C/C++ 用の Eclipse Juno IDE を使用しています。

#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;
}
4

6 に答える 6

7

はい:

C++03 の場合

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

C++11 の場合

 if (std::isinf(x))
于 2013-03-07T17:37:38.450 に答える
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(一般に、aが何らかの値に等しいかどうかをチェックすることは、丸め誤差のために信頼できませんが、ゼロの場合は問題ありません。)

于 2013-03-07T17:00:07.323 に答える
1

計算後ではなく、計算する前に入力が正しいかどうかを確認する必要があります。

if ( a == 0 ) {
 if ( b == 0 )
   cout << "equation valid for all x" << endl;
 else
   cout << "no x satisfies this equation" << endl;
}
于 2013-03-07T17:00:46.707 に答える
1

引数を確認する必要があると言って他のポスターに反論しますが、別の方法があります: http://en.cppreference.com/w/cpp/numeric/math/math_errhandling

そのリンクによると、C++ 11 では、 a を設定し#defineて、ゼロで除算すると type の例外がスローされるようにすることができますFE_DIVBYZERO。ただし、そのページのドキュメントは明確ではないため、ご使用のコンパイラがこれをサポートしているかどうかを調査してください。

于 2013-03-07T17:30:04.203 に答える
0

で例外をキャッチすることはできませんがC、値をチェックすることで例外を回避できます。

このようにしてみてください、それはあなたを助けます

if (a == 0) {
  x = 0;
} else {
  x = b/a;
}
于 2013-03-07T17:00:44.940 に答える