从文件读取信息到链表(用fread)
时间: 2023-07-12 15:17:19 浏览: 54
好的,我可以为您解答这个问题。首先,我们需要定义一个结构体来存储链表节点的信息,例如:
```c
struct Node {
int data;
struct Node *next;
};
```
接下来,我们可以编写一个函数来从文件中读取信息并将其存储到链表中。这个函数的大致步骤如下:
1. 打开文件并检查是否成功打开。
2. 分配一个头节点,并将它的 `next` 指针指向 `NULL`。
3. 读取文件中的数据并将其存储到新节点中。
4. 将新节点插入链表中。
5. 重复步骤3和4,直到文件结束。
6. 关闭文件并返回链表的头节点。
这个函数的代码示例如下:
```c
struct Node *read_file_to_list(char *filename) {
FILE *fp = fopen(filename, "rb");
if (fp == NULL) {
printf("Failed to open file: %s\n", filename);
return NULL;
}
struct Node *head = (struct Node *) malloc(sizeof(struct Node));
head->next = NULL;
struct Node *p = head;
struct Node *new_node;
while ((new_node = (struct Node *) malloc(sizeof(struct Node))) != NULL) {
if (fread(&new_node->data, sizeof(int), 1, fp) != 1) {
free(new_node);
break;
}
new_node->next = NULL;
p->next = new_node;
p = new_node;
}
fclose(fp);
return head;
}
```
在这个函数中,我们使用了 `fread` 函数来从文件中读取数据,它的第一个参数是一个指向存放数据的缓冲区的指针,第二个参数是每个数据项的大小,第三个参数是要读取的数据项的数量,第四个参数是一个指向文件的指针。
请注意,我们在读取数据之前,需要分配一个头节点,并将它的 `next` 指针指向 `NULL`,这是为了避免在链表为空时进行节点插入操作时出现错误。
另外,我们需要在读取数据时检查 `fread` 函数的返回值,以确保成功读取了一个数据项。如果读取失败,我们需要释放新节点的内存并退出循环。
最后,我们需要在函数结束时关闭文件,并返回链表的头节点。
希望这个函数能对您有所帮助!