我被要求计算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()。 这就是我被卡住的地方。
答案 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();