如何将文件中的数据读出至结构体数组(或链表)中,并显示 c加加
时间: 2024-03-14 07:47:47 浏览: 73
c语言实现把文件中数据读取并存到数组中
5星 · 资源好评率100%
读取文件中的数据到结构体数组中的步骤如下:
1. 定义一个结构体类型,表示要存储的数据类型,例如:
```c++
struct Student {
int id;
char name[20];
float score;
};
```
2. 定义一个数组,用来存储从文件中读取的数据,例如:
```c++
Student students[100]; // 假设最多存储 100 条数据
```
3. 打开文件,并从文件中读取数据到数组中,例如:
```c++
ifstream fin("stuf.dat", ios::binary); // 打开二进制文件
if (!fin) {
cout << "File open error!" << endl;
return;
}
int n = 0; // 数据条数
while (fin.read((char*)&students[n], sizeof(Student))) {
n++;
}
fin.close(); // 关闭文件
```
在上述代码中,打开文件时使用了 ifstream 类型的对象 fin,并且以二进制模式打开 "stuf.dat" 文件。然后,使用 read() 函数从文件中读取数据,并将其存储到 students 数组中。其中,read() 函数的第一个参数是一个指向数据的指针,第二个参数是要读取的数据字节数。在 while 循环中,每次读取成功后,n 自增,表示已经读取的数据条数。最后,使用 fin.close() 函数关闭文件流对象,确保文件已经被正确地关闭。
4. 在程序中使用读取到的数据,例如:
```c++
// 输出所有的学生信息
for (int i = 0; i < n; i++) {
cout << students[i].id << " " << students[i].name << " " << students[i].score << endl;
}
```
其中,假设要输出所有学生的信息,可以使用 for 循环遍历数组,并输出每个学生的学号、姓名和分数。
读取文件中的数据到链表中的步骤与数组类似,只需要将数组替换为链表即可。例如,定义一个链表节点类型,例如:
```c++
struct Node {
Student data;
Node* next;
};
```
然后,在读取文件中的数据时,将每个数据存储到一个新的链表节点中,并将节点插入到链表末尾。例如:
```c++
Node* head = nullptr; // 链表头指针
Node* tail = nullptr; // 链表尾指针
// 读取文件中的数据到链表中
ifstream fin("stuf.dat", ios::binary); // 打开二进制文件
if (!fin) {
cout << "File open error!" << endl;
return;
}
while (fin.read((char*)&student, sizeof(Student))) {
Node* node = new Node;
node->data = student;
node->next = nullptr;
if (head == nullptr) {
head = tail = node;
} else {
tail->next = node;
tail = node;
}
}
fin.close(); // 关闭文件
```
在上述代码中,首先定义了一个链表的头指针和尾指针,初始值均为 nullptr。然后,使用 while 循环读取文件中的数据,并将每个数据存储到一个新的链表节点中。在插入节点时,如果链表为空,则将头指针和尾指针均指向新节点;否则,将新节点插入到链表末尾,并更新尾指针。最后,使用 fin.close() 函数关闭文件流对象,确保文件已经被正确地关闭。
读取数据到链表后,可以使用 while 循环遍历链表,并输出每个学生的信息。例如:
```c++
// 输出所有的学生信息
Node* p = head;
while (p != nullptr) {
cout << p->data.id << " " << p->data.name << " " << p->data.score << endl;
p = p->next;
}
```
其中,假设链表的头指针为 head,使用 while 循环遍历链表,并输出每个学生的学号、姓名和分数。
阅读全文