c++ 从输出接收"-1.#IND"?

c++ Receiving "-1.#IND" from output?

本文关键字:#IND 输出 c++      更新时间:2023-10-16

这里非常简单的问题:当我测试错误的数据输入时,我给出了一条错误消息,但之后出现 -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();
}

这意味着什么?为什么会出现呢?我该如何摆脱它?

这是什么意思?

这是微软语,意思是"不是一个数字"。这意味着k不是有效的浮点数。

为什么会出现呢?

当范围测试失败时,不会返回值。这给出了未定义的行为;实际上,这可能等同于返回一个未平凡的值,这很可能是垃圾。如果启用了适当的警告,编译器应就此发出警告。

我该如何摆脱它?

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

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

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

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

}

和 CTOK 呼叫周围的尝试捕获异常

-1.#IND 表示双精度值为"负不确定 NaN"。基本上,存储的值不能表示为双精度中的数字。

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