C语言中,将多个结构体数据写到一个文件中,应该如何读取?

本人思路:
将结构体3个结构体用typedef将3个结构体分别定义成3个类型
login_node, p2log_innode;
basic_info_node, p2baisc_info_node;
score_info_node, p2score_info_node;
写入到一个文件中,用3个fwrite分别写入。
因为写入的文件的是二进制数,所以只能用fread读取。
但是读取时用3个fread,结构体之间会有干扰吧?

我现在想,是不是我的思路错了。
我是不是可以考虑将3个结构体合并到一个结构体中?
还是将3个结构体分别写入到3个文件中?

本人最希望的还是将3个结构体写入到一个文件中,然后分别读出,但是想到应该会有干扰,现在没有思路了!

可以不可以用一个fwrite同时将3个结构体同时写入到文件中?然后再用一个fread再读出来?如果可以,麻烦举个例子,或者写的格式。

如果我用fprintf是不是就可以解决这一问题?
在用fprintf的基础上,然后用frscanf读出?

本人QQ724835496,C菜鸟,希望有大神靠山,以后可以求教。
实在抱歉,三个结构体类型定义有误,应该是
login_node, *p2log_innode;
basic_info_node, *p2baisc_info_node;
score_info_node, *p2score_info_node;
本人是用链表将各个循环信息赋值,然后写入到文件中,所以各个结构体中是有*nextp来存放下一个结构体变量的地址的。

C语言把一个结构体数组写入文件分三步:
1、以二进制写方式(wb)打开文件
2、调用写入函数fwrite()将结构体数据写入文件
3、关闭文件指针

相应的,读文件也要与之匹配:
1、以二进制读方式(rb)打开文件
2、调用读文件函数fread()读取文件中的数据到结构体变量
3、关闭文件指针

参考代码如下:

#include<stdio.h>
struct stu {
    char name[30];
    int age;
    double score;
};
int read_file();
int write_file();
int main()
{
    if ( write_file() < 0 ) //将结构体数据写入文件
        return -1;
    read_file(); //读文件,并显示数据
    return 0;
}
int write_file()
{
    FILE *fp=NULL;
    struct stu student={"zhang san", 18, 99.5};
    fp=fopen( "stu.dat", "wb" ); //b表示以二进制方式打开文件
    if( fp == NULL ) //打开文件失败,返回错误信息
    {
        printf("open file for write error\n");
        return -1;
    }
    fwrite( &student, sizeof(struct stu), 1, fp ); //向文件中写入数据
    fclose(fp);//关闭文件
    return 0;
}
int read_file()
{
    FILE *fp=NULL;
    struct stu student;
    fp=fopen( "stu.dat", "rb" );//b表示以二进制方式打开文件
    if( fp == NULL ) //打开文件失败,返回错误信息
    {
        printf("open file for read error\n");
        return -1;
    }
    fread( &student, sizeof(struct stu), 1, fp ); //读文件中数据到结构体
    printf("name=\"%s\" age=%d score=%.2lf\n", student.name, student.age, student.score ); //显示结构体中的数据
    fclose(fp);//关闭文件
    return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-27
1。如果你知道存入文件的第一个结构是什么类型的,此种就非常方便了,自己根据 从文件读出的第一个结构里面的下个结构指针 来读文件中下个结构。
2。如果你不知道存入文件的第一个结构式啥类型,但又想分三个结构来存取,那你只能在每个结构里面加上一个变量来区分是什么结构,这样在读文件之前先读出这个变量,根据其值来判断结构类型本回答被提问者采纳
第2个回答  2012-04-08
不太方便,如果用vb.net的xml不容易出错,
你存结构体到文本,需要精确地定位,非常麻烦啊。
相似回答