把通过屏幕输入的学生信息输出存储到文本中。 输入第n个学生的学号、姓名、成绩,保存到Data.dat中,并重新从文件读出数据并显示。 利用fstream的write和read函数。
时间: 2024-03-25 15:40:17 浏览: 40
Ex_Ctrl1SDI.rar_joytis_用对话框输入学生成绩
很抱歉,我之前理解错了你的问题。下面是使用 fstream 的 write 和 read 函数将学生信息存储到文件中,并读取文件中的信息并显示的代码:
```c++
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
struct Student {
int id;
string name;
double score;
};
void saveStudentInfoToFile(const Student& student) {
ofstream fout("Data.dat", ios::binary | ios::app);
fout.write(reinterpret_cast<const char*>(&student), sizeof(student));
fout.close();
}
vector<Student> readStudentInfoFromFile() {
vector<Student> students;
ifstream fin("Data.dat", ios::binary);
if (!fin) {
cerr << "Failed to open file!" << endl;
return students;
}
fin.seekg(0, ios::end);
int length = fin.tellg();
fin.seekg(0, ios::beg);
int count = length / sizeof(Student);
for (int i = 0; i < count; ++i) {
Student student;
fin.read(reinterpret_cast<char*>(&student), sizeof(student));
students.push_back(student);
}
fin.close();
return students;
}
int main() {
int n;
cout << "Please input the student's index (starting from 0): ";
cin >> n;
Student student;
cout << "Please input the student's id, name and score: ";
cin >> student.id >> student.name >> student.score;
saveStudentInfoToFile(student);
vector<Student> students = readStudentInfoFromFile();
if (n >= 0 && n < students.size()) {
cout << "The " << n + 1 << "th student's info is:" << endl;
cout << "ID: " << students[n].id << endl;
cout << "Name: " << students[n].name << endl;
cout << "Score: " << students[n].score << endl;
} else {
cout << "Invalid index!" << endl;
}
return 0;
}
```
在这个程序中,我们首先通过 `saveStudentInfoToFile` 函数将学生信息以二进制方式写入到文件中。然后,我们通过 `readStudentInfoFromFile` 函数从文件中读取所有学生信息,并将其存储到一个向量中。
接下来,我们通过键盘输入获取要查看的学生信息的索引,然后通过键盘输入获取要存储的学生信息。我们将新的学生信息写入到文件中,并读取文件中的所有学生信息。
最后,我们根据索引从向量中获取指定的学生信息,并将其输出到控制台上。
需要注意的是,我们在写入和读取文件时,都要使用二进制模式打开文件,并使用 `write` 和 `read` 函数进行读写。同时,我们在写入数据时,要将学生信息的地址转换为 `const char*` 类型,以便能够使用 `write` 函数将其写入到文件中。在读取数据时,同样要使用 `reinterpret_cast` 将读取的内容转换为 `Student` 结构体类型。
希望这个解答能够帮到你。
阅读全文