2016-12-19 263 views
-3

我被要求计算10名学生的平均分数。 首先,我能够从data.txt中文件看起来像这样读出和检索数据:如何计算平均值?

编号名称测试1的Test2 Test3的

1艾哈迈德58 97 83

2 Dollah 78 76 70

3拉梅什85 75 84

4 Maimunah 87 45 74

5罗伯特74 68 97

6库马尔77 73 45

7安顺56 23 27

8平74 58 18

9 Idayu 47 98 95

10罗斯兰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()。 这是我卡住的地方。

+0

请不要张贴链接到包含代码,复制/粘贴代码图像直接到你的问题使用代码示例工具。 – Holt

回答

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();