2017-02-09 55 views
1

我有計算一個簡單的C程序(1e200)^ 2,這應該引起一個浮點溢出異常以來的最大double是1e308左右。要捕獲浮點溢出excepiton

double square(double x){ 
    return x*x; 
} 

int main(){ 
    double x = 1e200; 
    double y= square(x); 
} 

我的問題是:

(1)你怎麼能通過命令行捕獲例外,在這樣的方式運行程序時,除了可以打印出到終端?

(2)你怎麼可以捕獲通過注射打印出程序執行過程中的浮點異常信號附加聲明的例外呢?爲了通用性,我寧願不使用y==inf來實現此目標。

謝謝。

+0

有關檢查錯誤的非自動方式,請參閱[此處](http://stackoverflow.com/q/15655070/478288)。 – chrisaycock

+0

像'如果(Y == INF){printf的( 「溢出」);}'? –

+0

@ KamiKaze-- AFIK,實現不需要使用'inf'。 –

回答

0

我認爲你正在尋找這樣的事情......雖然這是char類型,你可以這樣類似的東西。我相信,然後你可以輸入你想要的錯誤號== ERANGE ELSEIF條件中任何printf語句。

int check_for_non_number(char *input) 
{ 
    errno = 0; 
    char *endptr; 
    double xnum = strtod(input, &endptr); 
    // IF endptr FOUND A NON-VALID ENTRY AND THAT ENTRY IS NOT THE NEW LINE CHARACTER THEN ITS AN ERROR 
    if((*endptr) && (*endptr != '\n')) 
    { 
     return 1; 
    } 
    else if (errno == ERANGE) 
    { 
     printf("OPERAND IS OUT OF RANGE"); 
     return 1; 
    } 
    // ELSE IF endptr FOUND A NON-VALID ENTRY AND THAT ENTRY IS THE NEW LINE CHARACTER THEN RETURN 2 TO CHECK IF IT SHOULD BE A NEW LINE 
    else if((*endptr) && (*endptr == '\n')) 
    { 
     return 2; 
    } 
    else 
    { 
     return 0; 
    } 
}