Проблема C ++ Я получаю "Nan" в качестве вывода каждый раз, когда я запускаю свою программу - PullRequest
0 голосов
/ 19 октября 2018

Мне потребовалось создать программу с функцией, которая изменяет высоту в футах на высоту в метрах.Я сделал функцию, и когда я cout из функции, я получаю правильное значение, но когда я coutout его в основном, я получаю «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 голосов
/ 19 октября 2018

heightInMeters не имеет явного значения return.

Следовательно, поскольку это не функция void (или main), поведение вашей программы не определено.

Разве ваш компилятор не предупреждал вас об этом?Это легко сделать для вашего компилятора, и текущий набор компиляторов предупреждает вас, если вы соответствующим образом повышаете уровень предупреждения.

(Конечно, NaN является своеобразным проявлением этого неопределенного поведения.)

Наконец, обратите внимание, что одна нога равна точно 0,3048 метра.Исходя из этого, ваши показатели конверсии.Ваши значения привносят ненужную неточность.

0 голосов
/ 19 октября 2018
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»

0 голосов
/ 19 октября 2018

Эта функция здесь:

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;

Выдает ли ваш компилятор какие-либо предупреждения для вашего кода?Если нет, пожалуйста, попробуйте выяснить, можете ли вы установить его, чтобы дать вам больше предупреждений.Большинство компиляторов обычно жалуются на пропущенные возвраты.

...