利用c语言的feof,sscanf,fgets函数将文本中的数据存入链表
时间: 2024-03-17 11:40:07 浏览: 63
用C语言实现链表的各种操作
5星 · 资源好评率100%
可以使用 C 语言标准库中的 `fgets` 和 `sscanf` 函数来读取文本文件中的数据,同时使用 `feof` 函数来检查文件是否读取到了结尾。以下是具体的实现过程:
```c
Node *head = NULL; // 链表头指针
Node *tail = NULL; // 链表尾指针
FILE *fp = fopen("data.txt", "r"); // 打开文件
if (fp == NULL) {
printf("Failed to open file!\n");
return 0;
}
char line[100];
while (fgets(line, sizeof(line), fp) != NULL) { // 读取每行数据,并将其存储到链表中
int num;
if (sscanf(line, "%d", &num) != 1) { // 将每行数据转换为整数
printf("Failed to read data from file!\n");
break;
}
Node *node = (Node *) malloc(sizeof(Node));
node->data = num;
node->next = NULL;
if (head == NULL) {
head = node;
tail = node;
} else {
tail->next = node;
tail = node;
}
if (feof(fp)) { // 检查文件是否读取到了结尾
break;
}
}
fclose(fp); // 关闭文件
```
上述代码中,我们首先使用 `fgets` 函数读取每行数据,然后使用 `sscanf` 函数将每行数据转换为整数。接着,我们动态申请内存空间,创建一个新的链表节点,并将读取到的数据存储到该节点中。最后,根据链表是否为空,更新链表头指针和尾指针,并使用 `feof` 函数检查文件是否读取到了结尾。
需要注意的是,为了避免内存泄漏,需要在程序结束前释放链表中所有节点的内存空间。
阅读全文