如何计算平均值?

时间:2016-12-19 09:17:34

标签: c++ fstream ifstream

我被要求计算10名学生的平均分数。 首先,我能够从data.txt文件中读取和检索数据,如下所示:

  

没有。名称Test1 Test2 Test3

     

1 Ahmad 58 97 83

     

2 Dollah 78 76 70

     

3 Ramesh 85 75 84

     

4 Maimunah 87 45 74

     

5 Robert 74 68 97

     

6 Kumar 77 73 45

     

7 Intan 56 23 27

     

8 Ping 74 58 18

     

9 Idayu 47 98 95

     

10 Roslan 79 98 78

然后我必须计算每个学生的平均值并确定成绩。

这是我到目前为止所做的。

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>

using namespace std;

int main()

{
    ifstream inFile1;
    string temp;
    int line=0;

    inFile1.open("data.txt");
    if(inFile1.fail())
    {
        cout << "File cannot be opened" << endl;
        exit(1);
    }

    while(getline(inFile1, temp))
    {
        line++;
    }
    inFile1.close();

    return 0;
}

该程序至少应包含两个原型函数:average()和grade()。 这就是我被卡住的地方。

1 个答案:

答案 0 :(得分:1)

您可以在此处查看答案:find average salaries from file in c++

基本上,当您遍历文件行时,您应该将temp字符串拆分为您感兴趣的标记。如何?一个选项是将getline与分隔符' '一起使用,或者查看std::noskipws流操作符或只使用operator>>从文件中读取 - 取决于您的详细信息要求。

如果我正确理解您的情况,我会使用operator>>获取学生的姓名,然后使用getline(inFile, gradesText)阅读直至行尾以获取当前所有成绩学生。

然后我会使用一个单独的函数将字符串拆分为等级向量。如何进行拆分,您可以查看Split a string in C++?。这样您就可以准备像vector<int> split(const string& line, char delim = ' ')这样的函数。在实现中,您应该使用std::stoi进行字符串到int的转换。

之后,当您已经有一个合适的集合时,您可以通过以下方式计算其平均值:

const double sum = std::accumulate(grades.begin(), grades.end(), 0.0);
const double gradesMean = sum / grades.size();