2017-05-07 19 views
-4

try、throw and catchは動作しますが、cout < < devide(a、b)< < endlというエラーが発生します。このコードをどのように変更する必要がありますか?後でtryの外に再びそれを呼び出すときに関数を使用した例外

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


double devide(double a, double b) throw(int) 
{ 
double result; 
if (b == 0) throw 0; 
result = a/b; 
return result; 
} 



int main() 
{ 
int a, b; 
cin >> a >> b; 
try { 
    devide(a, b); 
} 
catch (int c) { 
    cout << 100 << endl; 
} 
cout << devide(a,b) << endl; 
    return 0; 
} 
+0

*「それはどういう意味ですか?」とはどういう意味ですか?エラーは何ですか?あなたはメッセージを受け取りますか?それは何と言いますか? –

+0

また、整数をスローしないでください。その代わりに 'std :: invalid_argument'か何かを投げてください。 –

+0

出力をtryブロック内で実行します。 –

答えて

0

ファーストを生成ひどいアイデアです、あなたは例外をスローする必要がありますそれにはheaderがあります。あなたが望むならあなた自身の例外を書くことができますが、それは今のところ問題ではありません。

エラー処理の例外は、関数から「異なる型を返す」ようなスローを使用したり、そのような野蛮なことを行うことはありません。あなたは周りに他の方法がないときだけスローする必要があります。

私の例ではstd::logic_errorを使用しています。なぜなら、ゼロで割ると、どの分割関数の論理的前提条件にも違反するので、状況が一番良いと思うからです。

#include <iostream> 
#include <stdexcept> 

using namespace std; 

double divide(double a, double b) { 
    if (b == 0) { 
     // you cannot divide by zero so you are throwing exception 
     // to handle this edge case which has no mathematical solution 
     throw logic_error("division by zero."); 
    } 
    return a/b; 
} 

int main() { 
    int a = 0, 
     b = 0; 

    cin >> a >> b; 

    try { 
     // result of divide must be evaluated before calling on operator<< of cout 
     // if it returns (b wasn't 0) it gets called and prints result into cout 
     // if it throws an exception (b was 0) it gets handled in catch block 
     cout << divide(a, b) << endl; 
    } catch (const logic_error& err) { 
     // printing error message 
     cout << err.what() << endl; // prints "division by zero." 
    } 

    return 0; 
} 
-1

try内のコールを置くことはむしろ無意味です。

int main() { 
    int a, b, c; 
    cin >> a >> b; 
    try { 
     c = devide(a, b); 
    } 
    catch (exception e) { 
     c = 100; 
    } 
    cout << c << endl; 
    return 0; 
} 
-2
#include <iostream> 
using namespace std; 


double devide(double a, double b) 
{ 
double result; 
if (b == 0) throw 0; 
result = a/b; 
return result; 
} 



int main() 
{ 
int a, b; 


int res=10; 



while(res>0){ 
try { 
    cin >> a >> b; 
     devide(a, b); 
     res=-1; 
    } 
    catch (int c) { 
     cout << 100 << endl; 
    } 
} 

} 

ループ上のすべてを入れて、唯一の正の場合の条件を変更する:あなたは、おそらくこのような何かをしたかったです。

-1

Uは、tryブロックでcout << devide(a,b) << endlを入れなければならない - 例外が発生したときにそれはプログラムをキャッチし、最後に行きますと、これは文句を言わない任意のエラーをすべて投げint型の

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


double devide(double a, double b) throw(int) 
{ 
double result; 
if (b == 0) throw 0; 
result = a/b; 
return result; 
} 



int main() 
{ 
int a, b; 
cin >> a >> b; 
try { 
    devide(a, b); 
    cout << devide(a,b) << endl; 
} 
catch (int c) { 
    cout << 100 << endl; 
} 
    return 0; 
} 
関連する問題