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

Read 11th coloumn of numbers from a file and average it?(c++)

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

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

它是初学者 class 所以不允许像向量这样的高级主题。

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

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

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

旁注:上面的所有 col 都是 int 变量。 inputfileifstream 文件对象

上面的循环将打印出整个第 11 列,但我无法弄清楚如何将 50 行(即 50 个数字)中的整个第 11 列相加以求平均值(将总数除以 50)

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

如有任何帮助,我们将不胜感激。

希望尽快得到回复。

提前致谢。 :)

使用一个变量来存储总和和计数并得到平均值

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;

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

您需要保留第 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;

查看完整代码 here

解决除法问题的其他方法是首先将 totalcount 存储为 double,尽管我发现这具有误导性,因为它们实际上是整数,或者如果你坚持直接使用 50,你可以只做 average = total / 50.050.0 是一个 double 值)。

既然你是初学者,我也会花点时间劝你反对using namespace std; and use of endl,不仅是出于性能原因,也是为了通过分离写换行符的不相关动作使代码更清晰并冲洗流。