C++ 问题我每次运行程序时都会得到“nan”作为输出
Posted
技术标签:
【中文标题】C++ 问题我每次运行程序时都会得到“nan”作为输出【英文标题】:C++ Problem I get "nan" as output everytime I run my program 【发布时间】:2019-03-24 01:40:06 【问题描述】:我需要创建一个程序,该程序具有将高度(英尺)更改为高度(米)的功能。我创建了这个函数,当我从函数中计算出来时,我得到了正确的值,但是当我在 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;
【问题讨论】:
function keeps returning NaN的可能重复 【参考方案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”
【讨论】:
这个答案似乎表明在这种情况下可以保证“nan”结果,但事实并非如此。事实上,该值是未指定的,并且读取它具有未定义的行为。 返回值不仅仅是“未指定”,这意味着可以返回任何有效数字,而是未定义的行为,这意味着可能发生任何事情。正确的是,在未定义的行为得到修复之前,您甚至应该拒绝查看代码。【参考方案2】:heightInMeters
没有明确的return
值。
因此,由于它不是void
函数(或main
),因此您的程序的行为是未定义的。
你的编译器没有警告你吗?对于您的情况,编译器很容易做到这一点,如果您适当地提高警告级别,当前的编译器都会发出警告。
(当然,NaN 是这种未定义行为的一种特殊表现。)
最后,请注意,一英尺 正好 0.3048 米。以此为基础您的转化指标。你的价值观引入了不必要的不精确。
【讨论】:
虽然这肯定是一个问题,但我怀疑NaN
的回报是由于这个原因。更有可能他的cin
正在阅读垃圾邮件。
@Zinki:我猜这在调试版本中是合理的?
谢谢,我添加了一个回报,它的工作!我的编译器没有警告我。我正在使用代码块。
@KhizarMuhammad:你的最后一项工作是修复转换常数;特别是考虑到您使用的是double
,它们是不够的。我会重新编码,所以如果我是你,你只有一个常数。【参考方案3】:
这个函数在这里:
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;
您的编译器是否对您的代码发出任何警告?如果没有,请尝试找出是否可以设置它以给您更多警告。大多数编译器通常会抱怨缺少返回。
【讨论】:
非常感谢,您的回答帮了大忙! 没问题,很高兴它有帮助。以上是关于C++ 问题我每次运行程序时都会得到“nan”作为输出的主要内容,如果未能解决你的问题,请参考以下文章