2016-08-19 8 views
-2

Ich fange gerade an, C++ zu lernen. Hier ist mein Code:Warum gibt dieses Programm diese Nummer aus?

#include <iostream> 

using namespace std; 

int main() { 
    double hours,rate,pay; 
    // get the number of hours worked 
    cout << "How many hours did you work?"; 
    cin>> hours; 
    //Get the hourly pay rate 
    cout<<"How much did you get paid per hour?"; 
    cin>> pay; 
    // calculates the pay 
    pay = hours * rate; 
    // Display the pay 
    cout<<"You have earned $" << pay <<endl; 

    return 0; 
} 

Ich habe keine Ahnung, warum dieses Programm die falschen Zahlen ausgibt:

Wie viele Stunden haben Sie gearbeitet 19
Wie viel haben Sie pro Stunde bezahlt? 15
Sie haben verdient $ 4.03179e-313

Vielleicht habe ich installiert die IDE falsch (ich bin mit Eclipse) ?:

+7

'Rate' wurde nicht initialisiert. –

+2

[Kompilieren mit Warnungen] (http://coliru.stacked-crooked.com/a/7922767807c2d9e5) – chris

+0

Sie hätten cppcheck, ein statisches Codeanalyse-Tool, verwenden können. Es gibt aus: Cppcheck 1.75 [test.cpp: 7]: (style) Variable 'Rate' ist kein Wert zugewiesen. [test.cpp: 15]: (Fehler) Nicht initialisierte Variable: rate Fertig! – orbitcowboy

Antwort

3

Ich denke, Ihre cin >> pay Zeile ist falsch, weil Sie es mit pay = hours * rate verfolgen. Da die Rate niemals zugewiesen wird, werden nur Junk-Daten im Speicher abgelegt, sodass die Ausgabe nicht definiert ist. Ändern Sie

2

Es gibt zwei Probleme mit Ihrem Code.

  1. Ihre zweite cin>> Anruf wird pay initialisiert, wenn es rate statt initialisiert werden soll:

    cin >> rate; 
    

    Oder, wenn Sie C++ 11 oder höher verwenden, können Sie std::get_money() statt:

    cin >> get_money(rate); 
    
  2. Ihre cout<< ausgibt a double (a Gleitkommadaten Typ) mit seiner Standard Formatierung, die möglicherweise nicht für Ihre Bedürfnisse geeignet sein. Um Geld Werte anzuzeigen, sollten Sie über die Formatierung, zum Beispiel explizit sein:

    cout << "You have earned $" << fixed << setprecision(2) << pay << endl; 
    

    Oder, wenn Sie C++ 11 oder höher verwenden, können Sie std::put_money() statt:

    cout << "You have earned " << put_money(pay) << endl; 
    
1

zunächst Variablen Initialisierung vor der Verwendung eine gute Praxis ist, so dass Sie versuchen, diese shoud:

double hours = 0, rate = 0, pay = 0; 

zweitens, müssen Sie ersetzen zahlen durch Rate in:

//Get the hourly pay rate 
cout << "How much did you get paid per hour?"; 
cin >> rate; 

Amran AbdelKader.

Verwandte Themen