web-dev-qa-db-fra.com

Problème C++ Je reçois "nan" en sortie à chaque fois que je lance mon programme

Je devais créer un programme avec une fonction qui change la hauteur en pieds en mètres. J'ai créé la fonction et lorsque je l'ai déduite de la fonction, j'obtiens la bonne valeur, mais lorsque je la répète en général, je reçois "nan". Je ne comprends pas pourquoi la valeur n'est pas imprimée. C'est la première fois que j'utilise ce site Web, je suis donc désolé si quelque chose me manque.

#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;
}
6
Khizar Muhammad

Cette fonction ici:

double heightInMeters(double feet , double inches)
{
   double footToMeter = 0.305;
   double inchToMeter = 0.0254;

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

ne retourne rien. C'est un comportement indéfini, ce que vous obtenez ici

calcheight = heightInMeters(feet, inches);

Est très probablement juste une valeur de déchets invalide alors. Peut-être au lieu de cela:

cout << heightInMeters << endl;

Tu voulais ça:

return heightInMeters;

Votre compilateur émet-il des avertissements pour votre code? Sinon, essayez de savoir si vous pouvez le configurer pour qu'il vous avertisse davantage. La plupart des compilateurs se plaignent généralement des retours manquants.

7
Blaze

heightInMeters n'a pas de valeur explicite return

Par conséquent, comme il ne s'agit pas d'une fonction void (ou main), le comportement de votre programme n'est pas défini.

Votre compilateur ne vous en a-t-il pas averti? C'est un endroit facile pour un compilateur à faire dans votre cas, et la récolte actuelle de compilateurs vous avertit si vous augmentez le niveau d'avertissement correctement.

(Certes, NaN est une manifestation particulière de ce comportement indéfini.)

Enfin, notez qu'un pied correspond à exactement 0,3048 mètre. Basez vos métriques de conversion à partir de cela. Vos valeurs introduisent une imprécision inutile.

3
Bathsheba
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;

Comme la valeur de retour de votre code n'est pas spécifiée, le résultat est «nan».

1
Rong Wu