我必须用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请帮忙!
答案 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++)
如果一周只有三行。
因此,您需要检查是否已读取空行。