2017-01-14 2 views
0
übergeben wurden

Wenn ich einen Wert übergebe und ihn einer anderen Variablen zuweise, scheint er sie nie zusammenzufügen. Es gibt nur beide Summen in der Datei aus, aber nicht zusammen. Kann jemand auf meinen Fehler hinweisen?C++ fügt keine Werte hinzu, die in

void financialReport(int price) 
{ 
    ofstream financial_log("financial.txt", ios::app); 

    int total = 0; 
    total += price; 
    int test = total++; 
    financial_log << "Total: " << test; 


    financial_log.close(); 
} 


    cout << "Destination: "; 
cin >> destination; 
cout << "Price agreed: "; 
cin >> price; 

financialReport(price); 

Dies ist die Ausgabe ich in meiner Textdatei erhalten:

Total4Total5 

Auch aus irgendeinem Grunde gibt es keinen Raum zwischen den gesamten und dem Preis.

+1

Stellen Sie uns bitte die gut formatierte Eingabe, erwartete Ausgabe und was Sie bekommen, bitte. –

+0

So ist es zu lange zu setzen, aber hier ist die Idee der es Erwartet: Destination: "Blah" Preis: 3 Reiseziel: "Blah 2" Preis: 4 Ich erwarte die Ausgabe in der Datei sein: insgesamt wurden 7 Aber was ich bekommen ist Total4Total3 – Josh

+0

biete ich meine, uns mit Minimal, Complete, und prüfbare Beispiel - http://stackoverflow.com/help/mcve –

Antwort

0

Es ist ein wenig schwer, Ihre Frage zu verstehen, aber ich denke ein Problem conuld Verwirrung über wie der ++ Operator funktioniert. Variablenname ++ erhöht die Variable nach ihrer Auswertung in der aktuellen Anweisung und ++ Variablenname erhöht die Variable vor ihre Auswertung in der aktuellen Anweisung.

In Ihrem obigen Code hat ++ keine Wirkung. Wenn Sie möchten, dass Ihr Variablentest einen Wert größer eins als eins hat. Dann brauchen Sie, dies zu tun:

int test = ++total; 

jedoch ehrlich in Ihrem Fall, dass nicht einmal Sinn macht, da insgesamt nicht überall in der Funktion danach verwendet wird. Sie würden besser dran, nur einfach tun:

int test = total + 1; 

Versuchen Sie eine separate und spezielle Fragen zu irgendwelchen ios oder in/out Formatierung Bedenken öffnen.

Es sieht auch so aus, als ob Sie irgendwie versuchen, eine Summe über zwei Funktionsaufrufe mit einer lokalen Variablen zu erstellen, die niemals funktionieren wird, da die Summe bei jedem Funktionsaufruf auf 0 zurückgesetzt wird.

Ich wäre bereit zu wetten, wenn Sie tun, wie A. Yurchenko schlägt vor, Sie werden wahrscheinlich Ihren eigenen Fehler finden.

0

Wenn Sie total Wert in einer Datei speichern möchten, können Sie diese verwenden:

void financialReport(int price) { 

    ifstream financial_log_in("financial.txt"); 
    int total = 0; 
    string dummy; 
    while (financial_log_in >> dummy && dummy != "Total:") { 
    } 
    if (dummy == "Total:") { 
     financial_log_in >> total; 
    } 

    ofstream financial_log_out("financial.txt"); 
    total += price; 
    financial_log_out << "Total: " << total << endl; 
    financial_log_out.close(); 
} 

Hier haben wir den aktuellen Wert von financial.txt lesen, aktualisieren sie und schreibt sie zurück.

Aber falls Sie rufen Sie die Funktion ein paar Mal während einer Laufzeit dieses effizienter sein wird:

void financialReport(int price) { 
    static int total = 0; 
    ofstream financial_log("financial.txt"); 
    total += price; 
    financial_log << "Total: " total << endl; 
} 

Auf diese Weise financialReport(5); financialReport(6); in Total: 11 führen, aber wenn Sie das Programm neu gestartet wird total0 wieder . Bitte beachten Sie, dass beide Methoden financial.txt überschreiben. Wenn Sie dieses Verhalten nicht möchten, fügen Sie dem Konstruktor ios::app Flag hinzu.

Verwandte Themen