从文件中读取第 11 列数字并求平均值?(c++)

问题描述 投票:0回答:2

这是我的初学者 C++ 作业, 我有一个包含 12 列数字、50 行的文件。

我被要求找到第 11 列数字的平均值并将其显示在标准输出上。

它是初学者课程,因此不允许使用矢量等高级主题。

我试图为每列创建 12 个变量,并使用 while 循环读取第 11 列,但不知道如何将第 11 列的所有数字添加到该变量中。

我使用的 while 循环是这样的:

while(inputfile >> col1 >> col2>> col3>> col4>> col5>> col6>> col7>>
     col8>> col9>> col10>> col11>> col12 ) 
{ cout<< col11 << endl; }

旁注:上面所有的 col 都是 int 变量。

inputfile
ifstream
文件对象

上面的循环会打印出整个第 11 列,但我不知道如何将 50 行(即 50 个数字)的整个第 11 列相加来求平均值(将总数除以 50)

上面的方法也可能是错误的

任何有关此事的帮助将不胜感激。

希望尽快得到答复。

提前致谢。 :)

c++ c++11 text-files filestream ifstream
2个回答
0
投票

由于唯一的答案是错误的,并且评论可能缺少重要线索......

您需要保留第 11 列值的运行总计。我还会跟踪计数,尽管在您的情况下,您可以跳过该计数并对值进行硬编码

50
。所以你需要的是:

int total = 0;
int count = 0;

然后在你的读取循环中:

while (...) {
    total += col11; // keep a running total
    ++count; // add 1 to count
}

然后将一个除以另一个来计算平均值。

但是,这有点棘手。如果直接执行此操作,则会将一个

int
除以另一个
int
,并将结果截断为
int
。例如。
1/2
会给你
0
,这不是你的意思 (
0.5
)。

您需要使用强制转换将至少一个值转换为

double
在除法完成之前

double average = static_cast<double>(total) / count;

查看完整代码这里

解决除法问题的其他方法是首先将

total
count
存储为
double
,尽管我发现这会产生误导,因为它们实际上是整数,或者如果您坚持直接使用 50,那么您可以做
average = total / 50.0
50.0
是一个
double
值)。

由于您是初学者,我也会花点时间建议您不要使用

using namespace std;
使用
endl
,不仅仅是出于性能原因,也是为了通过分离不相关的操作来使代码更清晰写入换行符并刷新流。


0
投票

使用变量存储总和并计数并获取平均值

int sum = 0;
int count = 0;
double average = 0;
cout << "Calculating Average for: \n";
while(inputfile >> col1  >> col2  >> col3 >> col4 >> col5
                >> col6  >> col7  >> col8 >> col9 >> col10 
                >> col11 >> col12 )  { 
    cout << col11 << " ";
    sum += col11;
    ++count;
}
cout << " \n";
average = static_cast<double>(sum)/count;
cout << "Sum: "     << sum << "\n";
     << "Count: "   << count << "\n";
     << "Average: " << average << endl;
© www.soinside.com 2019 - 2024. All rights reserved.