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

时间:2015-02-25 07:52:27

标签: c++ c++11 text-files filestream ifstream

我的初学者c ++任务, 我有一个12列数字的文件,有50​​行。

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

它是一个初学者课程,所以不允许像矢量这样的高级主题。

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

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

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

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

上面的循环将打印出整个coloumn 11,但我无法弄清楚如何添加50行(即50个数字)中的整个颜色11来找到平均值(将总数除以50)

上述方法也可能出错

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

很快就会有回应。

提前致谢。 :)

2 个答案:

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

答案 1 :(得分:0)

由于唯一的答案是错误的,评论可能错过了重要的线索......

您需要保留collumn 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.0double值。)

由于您是初学者,我还会花一点时间建议您反对using namespace std;use of endl,不仅仅是出于性能原因,而且还要通过分离编写换行符和刷新流的无关行为。