void saveToFile() { ofstream file("members.txt"); if (file.is_open()) { for (int i = 0;i < members.size();i++) { file << members[i].studentID << " " << members[i].name << " " << members[i].department << " " << members[i].grade << " " << members[i].group << " " << members[i].position << endl; } file.close(); cout << "人员数据保存成功" << endl; } else { cout << "保存你失败" << endl; } } 根据这个,怎么写一个文件读取函数
时间: 2024-04-16 21:26:20 浏览: 11
你可以使用以下代码来编写一个文件读取函数:
```
void readFromFile() {
ifstream file("members.txt");
if (file.is_open()) {
string line;
while (getline(file, line)) {
stringstream ss(line);
string studentID, name, department, grade, group, position;
ss >> studentID >> name >> department >> grade >> group >> position;
// 在这里可以将读取到的数据进行处理或存储
}
file.close();
cout << "人员数据读取成功" << endl;
}
else {
cout << "读取文件失败" << endl;
}
}
```
这个函数通过打开 "members.txt" 文件并逐行读取其中的内容。然后,使用 `stringstream` 对每行进行分词,将数据存储到对应的变量中。你可以在注释的部分对读取到的数据进行处理或存储操作。
相关问题
解释这段代码// 保存成绩表到文件void saveToFile() { ofstream file("students.txt"); if (!file.is_open()) { cout << "无法打开文件!\n"; return; } file << numStudents << "\n"; for (int i = 0; i < numStudents; i++) { file << students[i].id << " " << students[i].name << " "; for (int j = 0; j < NUM_SUBJECTS; j++) { file << students[i].scores[j] << " "; } file << students[i].averageScore << "\n"; } file.close(); cout << "保存成功!\n";}
这段代码是一个保存成绩表到文件的函数,其具体实现如下:
1. 首先创建一个 ofstream 对象,并传入文件名作为参数,打开文件用于写操作。
2. 判断文件是否成功打开,如果没有打开,则输出一条错误信息并直接返回。
3. 写入学生数量到文件的第一行。
4. 循环遍历每个学生,将学生的 id、name、scores 和 averageScore 写入文件中。
5. 关闭文件。
6. 输出保存成功的信息。
需要注意的是,这段代码中使用了一个常量 NUM_SUBJECTS,它代表每个学生的科目数量。同时,学生的信息包括 id、name、scores 和 averageScore,其中 scores 是一个数组,保存了每个学生的各科成绩。
帮我优化这段c语言代码:void saveToFile() { FILE* file = fopen("sorted_data.txt", "w"); if (file == NULL) { printf("无法打开文件。\n"); return; } int i; for (i = 0; i < num_students; i++) { fprintf(file, "%d,%s,%c,%.2f\n", students[i].student_id, students[i].name, students[i].gender, students[i].score); } float male_pass_rate = (float)num_male_passed / num_male * 100; float female_pass_rate = (float)num_female_passed / num_female * 100; float average_score = total_score / num_students; fprintf(file, "男生合格率:%.2f%%\n", male_pass_rate); fprintf(file, "女生合格率:%.2f%%\n", female_pass_rate); fprintf(file, "全班成绩平均分:%.2f\n", average_score); fclose(file); }
以下是我对代码进行的优化:
1. 将变量的声明和初始化放在使用的地方,可以更加清晰地表达代码的意图;
2. 使用 `const` 关键字来修饰不会被修改的变量,增加代码的可读性;
3. 使用 `fputs` 函数来输出字符串,比 `fprintf` 函数更高效;
4. 使用 `sprintf` 函数将多个变量格式化为一个字符串,再输出到文件中,这样可以避免多次调用 `fprintf` 函数,提高效率;
5. 使用 `double` 类型代替 `float` 类型,可以提高精度;
6. 对变量名进行了修改,使其更加符合命名规范。
以下是优化后的代码:
```
void save_to_file() {
FILE* file = fopen("sorted_data.txt", "w");
if (file == NULL) {
printf("无法打开文件。\n");
return;
}
for (int i = 0; i < num_students; ++i) {
const int id = students[i].student_id;
const char* name = students[i].name;
const char gender = students[i].gender;
const double score = students[i].score;
fprintf(file, "%d,%s,%c,%.2f\n", id, name, gender, score);
}
char stats[128];
const double male_pass_rate = (double)num_male_passed / num_male * 100;
sprintf(stats, "男生合格率:%.2f%%\n", male_pass_rate);
fputs(stats, file);
const double female_pass_rate = (double)num_female_passed / num_female * 100;
sprintf(stats, "女生合格率:%.2f%%\n", female_pass_rate);
fputs(stats, file);
const double average_score = total_score / num_students;
sprintf(stats, "全班成绩平均分:%.2f\n", average_score);
fputs(stats, file);
fclose(file);
}
```
这样优化后,代码更加清晰,也更加高效。