#include <stdio.h>

struct Student {
    int id;
    char name[20];
    float score;
};

int main() {
    FILE *fp;
    struct Student stu[3] = {
        {101, "张三", 90.5},
        {102, "李四", 85.0},
        {103, "王五", 92.5}
    };
    struct Student temp;
    int i;

    // 二进制写入
    fp = fopen("students.dat", "wb");  // "wb"表示二进制写入
    if (fp == NULL) {
        printf("无法打开文件！\n");
        return 1;
    }
    // 写入整个结构体数组（3个元素）
    fwrite(stu, sizeof(struct Student), 3, fp);
    fclose(fp);

    // 二进制读取
    fp = fopen("students.dat", "rb");  // "rb"表示二进制读取
    if (fp == NULL) {
        printf("无法打开文件！\n");
        return 1;
    }
    printf("学生信息（二进制读取）：\n");
    printf("学号\t姓名\t成绩\n");
    // 循环读取3个结构体
    for (i = 0; i < 3; i++) {
        fread(&temp, sizeof(struct Student), 1, fp);  // 每次读1个结构体
        printf("%d\t%s\t%.1f\n", temp.id, temp.name, temp.score);
    }

    fclose(fp);
    return 0;
}
