这里很简单的问题: 当我测试错误的数据输入时,我给出了一个错误信息,但是-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();
}
这是什么意思?它为什么会出现?我该如何摆脱它?
答案 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