. 某班需要从文本文件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-21 10:02:02 浏览: 120
以下是实现File类的示例代码:
```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() {
double sum = 0;
int count = 0;
if (filetype == 1) { //文本文件
ifstream infile(filename);
if (!infile) {
cerr << "无法打开文件!" << endl;
exit(1);
}
double score;
while (infile >> score) {
sum += score;
count++;
}
infile.close();
}
else if (filetype == 0) { //二进制文件
ifstream infile(filename, ios::binary);
if (!infile) {
cerr << "无法打开文件!" << endl;
exit(1);
}
double score;
while (infile.read((char*)&score, sizeof(double))) {
sum += score;
count++;
}
infile.close();
}
if (count == 0) {
cerr << "文件中没有数据!" << endl;
exit(1);
}
return sum / count;
}
};
int main() {
string filename;
int filetype;
cout << "请输入文件名:";
cin >> filename;
cout << "请输入文件类型(1表示文本文件,0表示二进制文件):";
cin >> filetype;
File f(filename, filetype);
double average = f.readfile();
cout << "平均值为:" << average << endl;
return 0;
}
```
在上述代码中,readfile函数根据filetype的值来判断文件类型,然后使用ifstream读入文件数据并计算平均值。在main函数中,首先要求用户输入文件名和文件类型,然后创建File对象并调用readfile函数计算平均值,最后输出平均值。
阅读全文