c ++从输出中接收“-1。#IND”?

时间:2013-10-09 16:20:20

标签: c++

这里很简单的问题: 当我测试错误的数据输入时,我给出了一个错误信息,但是-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();
}

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

3 个答案:

答案 0 :(得分:2)

  

这是什么意思?

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

  

为什么会出现?

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

  

我如何摆脱它?

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

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

答案 1 :(得分: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异常

答案 2 :(得分:0)

-1。#IND表示double值为“负不定NaN”。基本上,存储的值不能表示为double中的数字。

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