1

テキスト ファイルから読み取り、各行の合計を計算するプログラムを C++ で作成する必要があります。テキストファイルはこんな感じ

2
14.4 56.9 54 65.7 86.9
98.6 84.9 34.7 85.5 15.4
24.4 57.9 54.9 70.7 63.5

34.4 16.9 41.9 54.7 84.98
97.6 84.9 14.7 85.5 16.4
23.4 76.9 54.9 74.7 64.5

最初の行は週数です。次の行には、それぞれ 5 つの double があります (各週に 3 行)。Aそして、最初の行で指定された週数を繰り返します。これまでのところ、各週の合計を計算するこのコードがあります。どういうわけか、毎週前の合計として0が得られます

string s; 
 double sum[4]; 

 for(int j = 0; j < weeks; j++)
   {
       for(int i = 0; i <= 3 && getline(in, s); i++)
         {
            istringstream sin(s);
            sum[i] = 0;
            while (sin>>sales)
            {
               sum[i] = sum[i] + sales;
            }
            cout << sum[i] << endl;
         } 
    }

結果は次のとおりです。

0
277.9
319.1
271.4
0
232.88
299.1
294.4

なぜ私がその0を取得しているのか誰か教えてもらえますか? また、各行の合計として数値を保存するにはどうすればよいですか。行数は週数によって異なります。誰か助けてください!

4

3 に答える 3

2

各グループ間の空白行の数を合計しています。これらの行には数字がないため、もちろん合計はゼロのままです。また、週数を取得するために最初の行全体を読んでいないと想定しているため、そこにも先行ゼロがあります。この問題を解決するには、次のように、毎週開始する前に余分な行を読むだけです。

string s; 
double sum[4]; 

for(int j = 0; j < weeks; j++)
{
    getline(in, s);
    for(int i = 0; i < 3 && getline(in, s); i++)
    {
        istringstream sin(s);
        sum[i] = 0;
        while (sin>>sales)
        {
           sum[i] = sum[i] + sales;
        }
        cout << sum[i] << endl;
    }
    cout << endl;
 }

出力は次のとおりです。

277.9
319.1
271.4

232.88
299.1
294.4
于 2013-11-12T18:07:25.357 に答える
1

次のような空行でないことを確認します。

 if (!s.empty())
 {
     cout << sum[i] << endl;
 }
于 2013-11-12T18:16:10.170 に答える
0

問題は、演算子>>を使用して週数を読み取ったことだと思います。その後、次の getline 呼び出しで空の文字列が読み取られました。それは最初のゼロを説明します。また、2 つの行のトライアドの間に空の行があることがわかります。したがって、空の行を再度読んだようです。これとは別に、ループを使用している理由がわかりません

for(int i = 0; i <= 3 && getline(in, s); i++)

1週間に3行しかない場合。

したがって、空の行が読み取られたかどうかを確認する必要があります。

于 2013-11-12T18:09:14.873 に答える