文件和流
文件概述
文件是信息的集合,通常是指记录在外部存储介质(如磁盘等)上的信息集合。 文件在程序中为输入设备和输出设备承担着缓冲的功能,一般程序中,文件在程序的作用如图所示。
文件流类
在C++中有一个stream类,所有的输入/输出(I/O)都是以这个“流”类为基础的,类stream有两个重要的运算符。
- 流输出运算符(<<):向流输出数据。
- 流输入运算符(>>):向流输入数据。
文件流是I/O中是非常重要的一个内容,它的输入是指从磁盘文件流向内存,输出是指内存流向磁盘。C++中提供了三个文件流类:ofstream、ifstream、fstream,其中sftream是ofstream和ifstream多重继承的子类1。文件流类的关系如图所示。
案例
自定义CSV文件,内容有No、Chinese、English、Math,总共50条数据,前22条数据如图所示。
实现功能:
- 统计各科目平均分并显示;
- 按三门成绩总分排名并显示编号、总分;
- 筛选有不及格科目的编号记录,并将该行记录写入2.CSV
读取CSV文件,使用ifstream输入流类中infile读取文件数据。
ifstream infile("D:/CProject/1.csv", ios::in);
string line;
vector<struct Studet> studentVector;
getline(infile, line);
while (getline(infile, line)) {
stringstream ss(line);
string str;
Studet studet;
getline(ss, str, ',');
studet.id = stod(str);
getline(ss, str, ',');
studet.chinese = stold(str);
getline(ss, str, ',');
studet.english = stold(str);
getline(ss, str, ',');
studet.math = stold(str);
studentVector.push_back(studet);
}
统计各科目平均分并显示,遍历student结构体的数据大小,获取Chinese、English、Math总数的和并计算平均数。
chineseAvg = chineseSum / studentVector.size();
englishAvg = englishSum / studentVector.size();
mathAvg = chineseSum / studentVector.size();
cout << "统计各科目平均分并显示:" << endl;
cout << "语文平均分:" << chineseAvg << "\n英语平均分:" << englishAvg << "\n数学平均分:" << mathAvg << endl;
cout << endl;
根据Chinese、English、Math三门成绩总分排名并显示编号、总分。
int temp