C ++问题我每次运行程序时都会得到“ nan”作为输出

时间:2018-10-19 07:31:01

标签: c++ function nan

要求我创建一个程序,该程序具有将英尺的高度更改为米的高度的功能。我做了函数,当我从函数中退出时,我得到了正确的值,但是当我在main中退出时,我得到了“ 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;
}

3 个答案:

答案 0 :(得分:7)

此功能:

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;

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

答案 1 :(得分:3)

heightInMeters没有明确的return值。

因此,由于它不是void函数(或main),因此程序的行为是不确定的。

您的编译器是否警告过您?对于您的情况而言,这是编译器容易做到的地方,如果适当提高警告级别,当前的所有编译器都会发出警告。

(自然,NaN是这种不确定行为的特殊表现。)

最后,请注意,一只脚正好 0.3048米。从中得出您的转化指标。您的价值观会带来不必要的不​​准确性。

答案 2 :(得分:1)

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”