这里很简单的问题: 当我测试错误的数据输入时,我给出了一条错误消息,但是 -1.#IND 在它之后出现?
例如,我在应该是正数的地方输入了负数,结果出现“wrong input 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();
}
这是什么意思?为什么会出现?我该如何摆脱它?
最佳答案
What does this mean?
在微软语中是“不是数字”的意思。这意味着 k
不是有效的 float 。
and why is it coming up?
当范围测试失败时,您不会返回值。这给出了未定义的行为;实际上,它可能等同于返回一个未初始化的值,这很可能是垃圾。如果您启用了适当的警告,您的编译器应该警告您。
How do i get rid of it?
我会通过抛出异常来报告错误;那么如果函数失败,则没有任何东西可以尝试使用无效的返回值。或者,您可以返回具有可测试“无效”状态的类型,例如 boost::optional<double>
或 std::pair<double, bool>
,并在使用前进行测试。
顺便说一下,如果这应该是将摄氏度转换为开尔文,那么您需要加上 273.15,而不是乘以它;并在转换后与零进行比较(如果您愿意,也可以在转换前与 273.15 进行比较)。
关于c++从输出中接收 "-1.#IND"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19277436/