linux C,逐个读取文件中固定保存结构数据,实例
时间: 2024-02-17 13:04:08 浏览: 23
如果你已经在 Linux C 中保存了结构化数据,并且希望从文件中逐个读取这些数据,可以按照以下步骤进行操作:
1. 打开文件,并移动文件指针到文件开头。
2. 每次读取一个固定大小的块,并将其转换为结构体数组。
3. 对于每个结构体数组中的元素,你可以进行相应的操作,比如输出它们的内容。
4. 重复步骤 2 和 3,直到文件结束。
以下是一个简单的实现,可以逐个读取文件中的结构体数据:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int id;
char name[20];
double score;
} Student;
#define BLOCK_SIZE 100
int main() {
FILE *fp;
char filename[100];
Student block[BLOCK_SIZE];
int num_students, num_blocks, i, j;
printf("Enter filename: ");
scanf("%s", filename);
fp = fopen(filename, "rb");
if (fp == NULL) {
printf("File cannot be opened.\n");
return 0;
}
fseek(fp, 0, SEEK_END);
num_students = ftell(fp) / sizeof(Student);
num_blocks = num_students / BLOCK_SIZE;
rewind(fp);
for (i = 0; i < num_blocks; i++) {
fread(block, sizeof(Student), BLOCK_SIZE, fp);
for (j = 0; j < BLOCK_SIZE; j++) {
printf("ID: %d, Name: %s, Score: %.2lf\n", block[j].id, block[j].name, block[j].score);
}
}
int remaining = num_students % BLOCK_SIZE;
if (remaining > 0) {
fread(block, sizeof(Student), remaining, fp);
for (j = 0; j < remaining; j++) {
printf("ID: %d, Name: %s, Score: %.2lf\n", block[j].id, block[j].name, block[j].score);
}
}
fclose(fp);
return 0;
}
```
这个程序会提示用户输入文件名,并逐个读取文件中的结构体数据,然后输出它们的内容。在这个例子中,我们假设每个结构体的大小是固定的,并且按照顺序对每个结构体进行编号和命名。你可以根据实际情况来修改这个程序,并且根据需要添加其他的功能。