linux C,文件中固定保存结构数据的数量
时间: 2024-02-17 16:04:06 浏览: 21
如果你想要在 Linux C 中保存结构化数据,可以考虑将数据存储在一个二进制文件中。为了方便操作,你可以按照固定大小的块来存储数据,每个块中存储一个结构体。为了在文件中保存固定数量的结构体数据,你需要知道每个结构体的大小和数据的总量。
以下是一个简单的实现,可以按照固定大小的块来存储结构体:
```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];
Student s;
int num_blocks, num_students, i, j;
printf("Enter filename: ");
scanf("%s", filename);
fp = fopen(filename, "wb");
if (fp == NULL) {
printf("File cannot be opened.\n");
return 0;
}
printf("Enter number of students: ");
scanf("%d", &num_students);
num_blocks = num_students / BLOCK_SIZE;
for (i = 0; i < num_blocks; i++) {
for (j = 0; j < BLOCK_SIZE; j++) {
s.id = i * BLOCK_SIZE + j + 1;
sprintf(s.name, "Student%d", s.id);
s.score = 100.0 - s.id * 0.5;
block[j] = s;
}
fwrite(block, sizeof(Student), BLOCK_SIZE, fp);
}
int remaining = num_students % BLOCK_SIZE;
if (remaining > 0) {
for (j = 0; j < remaining; j++) {
s.id = num_blocks * BLOCK_SIZE + j + 1;
sprintf(s.name, "Student%d", s.id);
s.score = 100.0 - s.id * 0.5;
block[j] = s;
}
fwrite(block, sizeof(Student), remaining, fp);
}
fclose(fp);
return 0;
}
```
这个程序会提示用户输入文件名和数据的总量,然后按照固定大小的块来存储数据。在这个例子中,我们假设每个结构体的大小是固定的,并且按照顺序对每个结构体进行编号和命名。你可以根据实际情况来修改这个程序,并且根据需要添加读取数据的功能。