标题:关于结构体写入文件的问题
只看楼主
hanyuhang
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-9-12
结帖率:100%
已结贴  问题点数:20 回复次数:10 
关于结构体写入文件的问题
写入文件以后再读取的数量和写入的不一致
写入2组数据(每组5个),读出来11个数据,不知道是什么原因?
temp.zip (1.42 KB)
搜索更多相关主题的帖子: 结构体 写入 文件 数据 读出 
2017-09-12 22:28
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:20 
#include <stdio.h>

typedef struct _abc_
{
    char a[10];
    int b;
    char c;
} ABC, *PABC;

void main()
{
    ABC a[3] = {
        "ABC", 123, 'A',
        "BAC", 213, 'B',
        "CBA", 321, 'C'};
    FILE *fp = fopen("test.dat", "wb");
    int i;
    for (i=0; i<3; ++i)
        fwrite(&a[i], sizeof(ABC), 1, fp);
    fclose(fp);
    ABC b[3];
    fp = fopen("test.dat", "rb");
    for (i=0; i<3; ++i)
        fread(&b[i], sizeof(ABC), 1, fp);
    fclose(fp);
    for (i=0; i<3; ++i)
        printf("%s\t%d\t%c\n", b[i].a, b[i].b, b[i].c);
}
2017-09-12 23:14
hanyuhang
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-9-12
得分:0 
回复 2楼 吹水佬
ABC b[3];
请问如果不知道有多少组数据怎么办啊?
还有我的代码输入的数据好像没有逗号分隔,这种情况怎么办啊?
2017-09-12 23:25
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用hanyuhang在2017-9-12 23:25:58的发言:

ABC b[3];
请问如果不知道有多少组数据怎么办啊?
还有我的代码输入的数据好像没有逗号分隔,这种情况怎么办啊?

1、文件从头读到尾,如果要载入内存,可用链表。
    ABC b;
    fp = fopen("test.dat", "rb");
    while (fread(&b, sizeof(ABC), 1, fp)==1)
        printf("%s\t%d\t%c\n", b.a, b.b, b.c);
    fclose(fp);
2、那几个数据是自动填上去的示例数据,没有输入模块。
2017-09-13 05:44
hanyuhang
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-9-12
得分:0 
回复 4楼 吹水佬
还是不行   可以看下我的代码帮忙看下应该怎么改吗?谢谢
2017-09-13 13:12
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用hanyuhang在2017-9-13 13:12:15的发言:

还是不行   可以看下我的代码帮忙看下应该怎么改吗?谢谢

不是讨论“关于结构体写入文件的问题”吗?示例代码只是简单地说明结构体数据写入文件,不能照抄,只作参考。
还有什么问题?
2017-09-13 14:29
hanyuhang
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-9-12
得分:0 
回复 6楼 吹水佬
我就是参考修改的,但保存可以,读取就不行
2017-09-13 14:32
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用hanyuhang在2017-9-13 14:32:05的发言:

我就是参考修改的,但保存可以,读取就不行

    ABC b;
    fp = fopen("test.dat", "rb");
    while (fread(&b, sizeof(ABC), 1, fp)==1)
        printf("%s\t%d\t%c\n", b.a, b.b, b.c);
    fclose(fp);
这几句是读取已经保存在文件的数据并显示出来,不行吗?
2017-09-13 15:03
hanyuhang
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-9-12
得分:0 
回复 8楼 吹水佬
不行  应用到我的代码里不行
2017-09-13 16:38
hanyuhang
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-9-12
得分:0 
回复 8楼 吹水佬
麻烦帮忙看下我那个代码……这个通用的可能不适合我的代码==!
2017-09-13 17:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-480650-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.059785 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved