2017-01-14 4 views
0

値を渡して別の変数に代入すると、それらを一緒に追加することはできません。両方の合計をファイルに出力しますが、一緒に出力することはできません。誰も私の間違いを指摘できますか?C++は渡された値を追加しません

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); 

これは私が私のテキストファイルに出力されます取得:

Total4Total5 

また、何らかの理由で、合計と価格の間にスペースはありません。

+1

よくフォーマットされた入力、期待される出力、入手したものを提供してください。 –

+0

だから、入れてlongにだが、ここで予想される、それ のアイデアです: 先:「ブラブラ」 価格:3 先:「何とか2」 価格:4 私は出力を期待していするファイル: 合計:7 しかし、私が得ることTotal4Total3 – Josh

+0

私は、最小完全、かつ検証可能な例を提供してくれるわけ ある - 'financial_logとhttp://stackoverflow.com/help/mcve –

答えて

0

あなたの質問を理解するのが少し難しいですが、私はと思っています。 ++の演算子がどのように動作するかについて混乱を招くことがあります。 variable_name ++は現在のステートメントでの評価後に変数をインクリメントし、++ variable_nameはの変数をインクリメントしてから、の現在のステートメントで評価します。

上記のコードで++は効果がありません。変数テストの合計値が1より大きい値を持つようにする場合。そして、あなたはこの実行する必要があります。

int test = ++total; 

を合計は、その後の機能の任意の場所で使用されていないので、正直にあなたのケースでは、それにも意味がありません。

int test = total + 1; 

iosやイン/アウトの書式に関する懸念については、個別の質問をお試しください。

また、関数呼び出しのたびに合計が0にリセットされるため、動作しないローカル変数を使用して2つの関数呼び出し全体で合計を計算しようとしているようです。

もし私があなたがA.のようにしたら、私はそれを賭けても構わないと思います。ユルチェンコはあなた自身のバグを見つけるかもしれないことを示唆しています。

0

ファイルでtotal値を格納したい場合は、この使用することができます:

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(); 
} 

ここではそれを更新し、それを書き戻す、financial.txtから現在の値を読み取ります。

しかし、あなたはただ、これは、より効率的になる1つの実行時に機能数回呼び出す場合:Total: 11になります

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

こうfinancialReport(5); financialReport(6);が、あなたは再び0なりますtotalプログラムを再起動すると、 。

両方の方法でfinancial.txtを上書きすることに注意してください。この動作を望まない場合は、ofstreamオブジェクトのコンストラクタにios::appフラグを追加します。

関連する問題