2017-05-07 106 views
-4

嘗試,拋出和捕捉作品,但是,cout < < devide(a,b)< < endl發生錯誤。我應該如何修改這段代碼?例外與功能

#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塊內的輸出。 – 2017-05-07 10:13:17

回答

0

首先投擲INT是可怕的想法,你應該拋出異常這裏有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裏面,當你稍後再打電話吧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

ü應該把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); 
    cout << devide(a,b) << endl; 
} 
catch (int c) { 
    cout << 100 << endl; 
} 
    return 0; 
}