C ++从文本文件中读取并计算每行的总计:

时间:2013-11-12 17:56:50

标签: c++ io computer-science ifstream

我必须用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

第一行有周数。接下来的行各有五个双打(每周3行)。并且它将重复第一行中给出的周数。到目前为止,我有这个代码来计算每周的总数。因此,它给出了我每周前的总数为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?另外,我应该如何将数字存储为每行的总数。线数将根据数周而变化。 SOmebody请帮忙!

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

检查它是不是这样的空行:

 if (!s.empty())
 {
     cout << sum[i] << endl;
 }

答案 2 :(得分:0)

我认为问题是使用运算符&gt;&gt;读取周数。之后,下一个getline调用读取一个空字符串。它将解释第一个零点。我也看到两条三元组之间有一条空行。所以看来你又读了一句空行。 除此之外,我不明白你为什么要使用循环

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

如果一周只有三行。

因此,您需要检查是否已读取空行。