c++, 某班需要从文本文件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(); //从文件读入成绩求平均值并返回该值 };
时间: 2024-02-04 09:03:24 浏览: 78
好的,我会根据你的要求回答问题,并且不会透露你的要求。针对你的问题,可以参考以下代码实现:
```c++
#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() {
ifstream fin;
double sum = 0;
int count = 0;
if (filetype == 1) {
fin.open(filename.c_str());
if (!fin.is_open()) {
cout << "文件打开失败!" << endl;
return 0;
}
double grade;
while (fin >> grade) {
sum += grade;
count++;
}
}
else if (filetype == 0) {
fin.open(filename.c_str(), ios::binary);
if (!fin.is_open()) {
cout << "文件打开失败!" << endl;
return 0;
}
double grade;
while (fin.read((char*)&grade, sizeof(double))) {
sum += grade;
count++;
}
}
fin.close();
if (count == 0) {
cout << "文件为空!" << endl;
return 0;
}
return sum / count;
}
};
int main() {
string filename = "1.txt"; // 文件名
int filetype = 1; // 文件类型:1为文本文件,0为二进制文件
File f(filename, filetype);
double avg = f.readfile();
cout << "平均成绩为:" << avg << endl;
return 0;
}
```
在上述代码中,File类包含了一个构造函数和一个读取文件并求平均值的函数。在主函数中,我们首先创建了一个File对象,然后调用readfile函数读取文件并求平均值,最后将平均值输出到屏幕上。
需要注意的是,在读取二进制文件时,我们使用了read函数而不是“>>”运算符,因为“>>”运算符默认是以空格为分隔符读取文件的,而二进制文件中不一定有空格,因此需要使用read函数读取固定字节数的数据。同时,在读取二进制文件时,我们需要使用ios::binary模式打开文件,否则文件读取可能会出现问题。
希望这个例子能够帮助你理解如何使用File类读取文件并求平均值。如果你还有什么问题,欢迎随时问我哦!
阅读全文