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

标签 c++

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

相关文章:

c++ - constexpr 返回多维 C 样式数组的维度元组

c++ - 从 __int64 到 size_t 的安全转换

c++ - C++ 中的通用函数包装器是否可行?

c++ - 在 OpenCV 中乘以矩阵的 SVD 分量

c++ - 是什么导致此 Visual Studio Pro 2013 警告?

c++ - 凯撒密码解密

c++ - 在其他源文件中没有公共(public)头文件访问功能

C++:如何根据条件选择构造函数?

c++ - C++ 中的跨平台 GUI 窗口

c++ - 使用静态链接声明静态成员