web-dev-qa-db-de.com

C++ Problem Ich bekomme jedes Mal "nan" als Ausgabe, wenn ich mein Programm starte

Ich musste ein Programm mit einer Funktion erstellen, die die Höhe in Fuß in Höhe in Meter ändert. Ich habe die Funktion erstellt, und wenn ich aus der Funktion herauskomme, bekomme ich den richtigen Wert, aber wenn ich sie in main sehe, bekomme ich "nan". Ich verstehe nicht, warum der Wert nicht gedruckt wird. Ich verwende diese Website zum ersten Mal. Es tut mir leid, wenn ich etwas vermisse.

#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

Diese Funktion hier:

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

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

gibt nichts zurück Das ist undefiniertes Verhalten, was du hier bekommst

calcheight = heightInMeters(feet, inches);

Ist höchstwahrscheinlich dann nur ein ungültiger Müllwert. Vielleicht stattdessen:

cout << heightInMeters << endl;

Du wolltest das:

return heightInMeters;

Gibt Ihr Compiler Warnungen für Ihren Code aus? Falls nicht, versuchen Sie bitte herauszufinden, ob Sie weitere Warnungen einstellen können. Die meisten Compiler beschweren sich in der Regel über fehlende Retouren.

7
Blaze

heightInMeters hat keinen expliziten return-Wert. 

Da es sich nicht um eine void-Funktion (oder main) handelt, ist das Verhalten Ihres Programms undefiniert.

Hat Sie Ihr Compiler nicht davor gewarnt? Es ist ein einfacher Ort für einen Compiler in Ihrem Fall, und die aktuelle Ernte der Compiler warnt Sie, wenn Sie die Warnstufe entsprechend erhöhen.

(NaN ist eine besondere Manifestation dieses undefinierten Verhaltens.)

Beachten Sie schließlich, dass ein Fuß genau 0,3048 Meter beträgt. Basieren Sie Ihre Conversion-Metriken davon. Ihre Werte führen zu unnötigen Ungenauigkeiten.

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;

Da der Rückgabewert Ihres Codes nicht angegeben ist, lautet die Ausgabe „nan“.

1
Rong Wu