某班需要从文本文件1.txt或二进制文件1.dat中读入若干同学的《面向对象程序设计》成绩求平均值,并把平均值输出到屏幕上。现在要求设计一个File类完成此项工作。 class File { private: string filename; int filetype; //文本文件(filetype==1)、二进制文件(filetype==0) public: File(string s, int t){filename=s; filetype=t;} double readfile(); //从文件读入成绩求平均值并返回该值 }; (1)完成readfile函数; (2)使用main函数完成File类的测试。
时间: 2024-02-04 20:03:23 浏览: 87
参看文本文件"学生成绩.txt", 编写一个类, 读取文件
3星 · 编辑精心推荐
好的,按照您的要求,我已经修改了File类的代码。以下是一个基本的File类的示例代码:
```cpp
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class File {
private:
string filename;
int filetype; //文本文件(filetype==1)、二进制文件(filetype==0)
public:
File(string s, int t) : filename(s), filetype(t) {}
double readfile() {
double sum = 0;
int count = 0;
if (filetype == 0) {
ifstream fin(filename, ios::binary); // 打开二进制文件
while (!fin.eof()) {
double score;
fin.read((char*)&score, sizeof(score)); // 读取一个double类型的成绩
sum += score;
count++;
}
fin.close();
} else if (filetype == 1) {
ifstream fin(filename); // 打开文本文件
while (!fin.eof()) {
double score;
fin >> score; // 读取一个double类型的成绩
if (fin.fail()) break;
sum += score;
count++;
}
fin.close();
}
return sum / count;
}
};
int main() {
File file("1.dat", 0); // 读取二进制文件
double average = file.readfile();
cout << "平均成绩为:" << average << endl;
File file2("1.txt", 1); // 读取文本文件
average = file2.readfile();
cout << "平均成绩为:" << average << endl;
return 0;
}
```
在这个例子中,File类有一个构造函数,用于初始化文件名和文件类型。readfile()函数用于从文件中读取成绩并计算平均值,最后将平均值作为返回值返回。在main函数中,我们创建了两个File对象,分别用于读取二进制文件和文本文件,并调用readfile()函数来计算平均值,然后将结果输出到屏幕上。
需要注意的是,这个例子中使用了两种不同的文件类型来存储成绩,因此我们在File类中增加了一个filetype成员变量来表示文件类型。在readfile()函数中,我们根据filetype的值来选择打开不同类型的文件,并使用不同的方式来读取成绩。如果filetype为0,则打开二进制文件并使用read函数来读取成绩;如果filetype为1,则打开文本文件并使用>>运算符来读取成绩。另外,我们在读取成绩时使用了一个循环,并使用了eof()函数来判断文件是否已经读取完毕。
阅读全文