C++ 每次运行程序时我都会"nan"输出的问题

C++ Problem I get "nan" as output everytime I run my program

本文关键字:nan 输出 问题 运行 程序 C++      更新时间:2023-10-16

我需要创建一个程序,该程序具有将英尺高度更改为米高度的功能。我做了这个函数,当我从函数中得到正确的值时,我得到了正确的值,但是当我在 main 中 cout 它时,我得到了"nan"。我不明白为什么值不打印。这是我第一次使用这个网站,所以如果我错过了什么,我很抱歉。

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

double heightInMeters(double feet , double inches)
{
double footToMeter = 0.305;
double inchToMeter = 0.0254;
double heightInMeters = ((footToMeter * feet) + (inchToMeter * inches));
cout << heightInMeters << endl;
}

int main()
{
double feet, inches, calcheight;
char ch;
cout << "Enter your height [Use format ft-in]: ";
cin >> feet >> ch >> inches;
calcheight = heightInMeters(feet, inches);
cout << calcheight << endl;
return 0;
}

这个函数在这里:

double heightInMeters(double feet , double inches)
{
double footToMeter = 0.305;
double inchToMeter = 0.0254;
double heightInMeters = ((footToMeter * feet) + (inchToMeter * inches));
cout << heightInMeters << endl;
}

不返回任何内容。这是未定义的行为,你在这里得到什么

calcheight = heightInMeters(feet, inches);

那么很可能只是一些无效的垃圾值。也许代替这个:

cout << heightInMeters << endl;

你想要这个:

return heightInMeters;

编译器是否对代码发出任何警告?如果没有,请尝试确定是否可以将其设置为给您更多警告。大多数编译器通常会抱怨缺少返回。

heightInMeters

没有显式return值。

因此,由于它不是一个void函数(或main(,程序的行为是未定义的。

你的编译器没有警告你吗?对于编译器来说,这是一个很容易在您的情况下做出的地方,如果您适当地调高警告级别,当前的编译器都会发出警告。

(当然,NaN是这种未定义行为的特殊表现。

最后,请注意,一英尺正好是 0.3048 米。您的转化指标据此。您的值引入了不必要的不精确性。

void f()
{
double a=0.3;
cout << a << endl;
}
//
// inside main function 
f();

double f()
{
double a=0.3;
return a;
}
// inside main function 
cout << f() << endl;

由于未指定代码的返回值,因此输出为"nan">