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