1

这里非常简单的问题:当我测试错误的数据输入时,我给出了一条错误消息,但是 -1.#IND 出现在它之后?

例如,我在应该有正数的地方输入负数,然后我得到“错误的输入 dummy-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();
}

这是什么意思?为什么会出现?我该如何摆脱它?

4

3 回答 3

2

这是什么意思?

这是微软的“不是数字”。这意味着这k不是一个有效的浮点数。

为什么会出现?

当您的范围测试失败时,您不会返回值。这给出了未定义的行为;在实践中,它可能相当于返回一个未初始化的值,这可能是垃圾。如果您启用了适当的警告,您的编译器应该警告您。

我该如何摆脱它?

我会通过抛出异常来报告错误;如果函数失败,则没有任何东西可以尝试使用无效的返回值。或者,您可以返回具有可测试“无效”状态的类型,例如boost::optional<double>or std::pair<double, bool>,并在使用前对其进行测试。

顺便说一句,如果这应该将摄氏度转换为开尔文,那么你想加上 273.15,而不是乘以它;并在转换后与零进行比较(如果您愿意,也可以在转换前与 273.15 进行比较)。

于 2013-10-09T16:24:00.387 回答
1

一个打开所有警告的好编译器会说执行路径没有返回......,

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

}

和围绕 ctok 调用的 try-catch 异常

于 2013-10-09T16:29:55.110 回答
0

-1.#IND 表示双精度值是“负不确定 NaN”。基本上存储的值不能表示为双精度数。

请参阅http://blogs.msdn.com/b/oldnewthing/archive/2013/02/21/10395734.aspx

于 2013-10-09T16:24:07.680 回答