C++ c++;“接收”-1.“工业”;从输出?

C++ c++;“接收”-1.“工业”;从输出?,c++,C++,这里的问题很简单: 当我测试错误的数据输入时,我会给出一条错误消息,但是-1.#后面会出现IND 例如,我键入一个负数,其中应该有一个正数,我得到“错误的输入伪-1.#IND” #包括“Header.h” 无效错误_rep(){ cout>c; 双k=ctok(c); 库特 这是什么意思 它是Microsoftse的“非数字”的意思。这意味着k不是有效的浮点数 为什么会这样 当范围测试失败时,您不会返回值。这会产生未定义的行为;在实践中,这可能相当于返回一个未斜体的值,这可能是垃圾。如果启用了适

这里的问题很简单: 当我测试错误的数据输入时,我会给出一条错误消息,但是-1.#后面会出现IND

例如,我键入一个负数,其中应该有一个正数,我得到“错误的输入伪-1.#IND”

#包括“Header.h”
无效错误_rep(){
cout>c;
双k=ctok(c);
库特
这是什么意思

它是Microsoftse的“非数字”的意思。这意味着
k
不是有效的浮点数

为什么会这样

当范围测试失败时,您不会返回值。这会产生未定义的行为;在实践中,这可能相当于返回一个未斜体的值,这可能是垃圾。如果启用了适当的警告,编译器应该对此发出警告

我怎样才能摆脱它

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

顺便说一句,如果这是将摄氏度转换成开尔文,那么你需要加上273.15,而不是乘以它;然后在转换后与零进行比较(如果你愿意的话,也可以在转换前与273.15进行比较)。

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


请参见

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

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


然后尝试捕获ctok调用周围的异常

提高警告级别。对于j<273.15,您的返回值没有显式设置,这意味着您可能会获得意外的返回值。ctok返回double,但您的else路径不会返回任何double。请仔细考虑代码中可能存在的重复项。您希望在错误案例中发生什么?这与您实际编写的代码如何匹配?
 double ctok(double c){
 double j = c *273.15;
 if (j >= -273.15){
    return j;
 }
else {
     error_rep();
      ///here
      throw ;//somthing
}