逐行读文件到结构体数组
时间: 2024-06-16 14:06:05 浏览: 103
文件读写入链表.zip_C++链表_数据结构_文件读写_读链表_链表读取文本
5星 · 资源好评率100%
逐行读取文件到结构体数组的过程可以分为以下几个步骤:
1. 打开文件:使用文件操作函数打开待读取的文件,可以使用C语言中的fopen函数,指定文件路径和打开方式(例如只读模式)。
2. 定义结构体:根据文件中每行的数据格式,定义一个结构体来存储每行数据的各个字段。结构体的成员变量应与文件中的字段一一对应。
3. 创建结构体数组:根据文件中数据的行数,创建一个足够大的结构体数组来存储所有数据。
4. 逐行读取并解析数据:使用循环结构,每次读取文件中的一行数据,并将其解析为结构体的各个字段。可以使用C语言中的fgets函数逐行读取文件内容,然后使用字符串处理函数(如strtok)将每行数据按照分隔符切割成各个字段。
5. 存储数据到结构体数组:将解析得到的每行数据存储到结构体数组的对应位置。
6. 关闭文件:读取完毕后,使用fclose函数关闭文件。
下面是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE_LENGTH 100
// 定义结构体
typedef struct {
int id;
char name[20];
int age;
} Person;
int main() {
FILE *file;
char line[MAX_LINE_LENGTH];
Person people[100]; // 假设最多有100个人
// 打开文件
file = fopen("data.txt", "r");
if (file == NULL) {
printf("无法打开文件\n");
return 1;
}
int count = 0; // 记录读取的行数
// 逐行读取并解析数据
while (fgets(line, sizeof(line), file)) {
// 解析数据
char *token;
token = strtok(line, ",");
people[count].id = atoi(token);
token = strtok(NULL, ",");
strcpy(people[count].name, token);
token = strtok(NULL, ",");
people[count].age = atoi(token);
count++;
}
// 关闭文件
fclose(file);
// 输出读取的数据
for (int i = 0; i < count; i++) {
printf("ID: %d, Name: %s, Age: %d\n", people[i].id, people[i].name, people[i].age);
}
return 0;
}
```
阅读全文