输入文本

读取和写入struct结构体

生成代码

#include <stdio.h>

// 定义结构体
struct Person {
    char name[20];
    int age;
};

int main() {
    // 创建结构体变量
    struct Person person = {"Alice", 20};

    // 打开文件
    FILE* file = fopen("person.txt", "wb");
    if (file == NULL) {
        printf("无法打开文件\n");
        return 1;
    }

    // 写入结构体
    if (fwrite(&person, sizeof(struct Person), 1, file) != 1) {
        printf("写入结构体失败\n");
        fclose(file);
        return 1;
    }

    // 关闭文件
    fclose(file);

    // 重新打开文件进行读取
    file = fopen("person.txt", "rb");
    if (file == NULL) {
        printf("无法打开文件\n");
        return 1;
    }

    // 读取结构体
    struct Person readPerson;
    if (fread(&readPerson, sizeof(struct Person), 1, file) != 1) {
        printf("读取结构体失败\n");
        fclose(file);
        return 1;
    }

    // 输出读取的结构体信息
    printf("Name: %s\n", readPerson.name);
    printf("Age: %d\n", readPerson.age);

    // 关闭文件
    fclose(file);

    return 0;
}
此示例首先定义了一个Person结构体,包括姓名和年龄。然后,创建一个Person结构体变量,并将它写入名为person.txt的二进制文件中。接着,重新打开文件,从文件中读取结构体,并输出读取的结构体信息。



我自己改了一下代码,扩展成struct数组

#include <stdio.h>


// 定义结构体
struct Person {
    char name[20];
    int age;
};

int main() {
    
    // 创建结构体变量
    struct Person persons[]={ //结构体数组
    {"张三",145.0},
    {"李四",130.5},
    {"王五",148.5},
    {"赵六",139.0},
    {"小林",150.0}
};

    // 打开文件
    FILE* file = fopen("person.txt", "wb");
    if (file == NULL) {
        printf("无法打开文件\n");
        return 1;
    }

    // 写入结构体
    int num=sizeof(persons)/sizeof(persons[0]);
    for (int i = 0; i < num; i++)
    {
        if ( fwrite(&(persons[i]), sizeof(struct Person), 1, file)!= 1) {
            printf("写入结构体失败\n");
            fclose(file);
            return 1;
        }
    }
    
    // 关闭文件
    fclose(file);

    // 重新打开文件进行读取
    file = fopen("person.txt", "rb");
    if (file == NULL) {
        printf("无法打开文件\n");
        return 1;
    }

    // 读取结构体
    struct Person readPerson[num];
    for (int  i = 0; i < num; i++)
    {
        if (fread(&(readPerson[i]), sizeof(struct Person), 1, file) != 1) {
            printf("读取结构体失败\n");
            fclose(file);
            return 1;
        }
         // 输出读取的结构体信息
        printf("Name: %s\n", readPerson[i].name);
        printf("Age: %d\n", readPerson[i].age);
    }
    

    // 关闭文件
    fclose(file);

    return 0;
}
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐