2013-10-09 34 views
1

很簡單的問題在這裏: 當我測試了錯誤的數據輸入我舉一個錯誤信息,但-1#IND後,它出現?C++從輸出接收「-1。#IND」?

比如我輸入一個負那裏應該是一個積極的,我得到「錯誤輸入虛擬-1#IND」

#include "Header.h" 

void error_rep(){ 
cout<<"Wrong input dummy"; 
} 

double ctok(double c){ 
double j = c *273.15; 
if (j >= -273.15){ 
return j; 
} 
else 
    error_rep(); 
} 

int main(){ 
double c = 0; 
cin >> c; 

    double k = ctok(c); 
    cout<<k<<endl; 


keep_window_open(); 
} 

這是什麼意思?爲什麼會出現?我如何擺脫它?

+0

提高警戒級別。 – chris

+0

對於j <273.15,您的返回值沒有明確設置,這意味着您可以獲得意外的返回值。 – thang

+1

ctok返回雙,但你的其他路徑沒有任何回報的雙重 – taocp

回答

1

編譯好了所有警告開啓,將有說,執行路徑沒有回報......,

double ctok(double c){ 
double j = c *273.15; 
if (j >= -273.15){ 
    return j; 
} 
else { 
    error_rep(); 
     ///here 
     throw ;//somthing 
} 

}

,並嘗試 - 克托克呼叫附近的乘客例外

+0

啊,這是我後我。謝謝! – RavenEye

2

這是什麼意思?

它是「不是一個數字」的微軟軟件。這意味着k不是有效的浮點數。

爲什麼會出現?

當您的範圍測試失敗時,您不會返回一個值。這給未定義的行爲;在實踐中,它很可能相當於返回一個非盈利價值,這可能是垃圾。如果您啓用了適當的警告,您的編譯器應該警告您。

我該如何擺脫它?

我通過拋出一個異常來報告錯誤;那麼如果函數失敗,沒有任何東西可以嘗試使用無效的返回值。或者,您可以返回具有可測試「無效」狀態的類型,如boost::optional<double>std::pair<double, bool>,並在使用前對其進行測試。

順便說一句,如果這是應該被轉換攝氏度開爾文,然後要添加273.15,而不是由它繁殖;並在轉換後與零進行比較(或在轉換之前使用273.15進行比較,如果您願意的話)。