| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2193 人关注过本帖
标题:链表文件的读取和保存问题
只看楼主 加入收藏
FireRabbit
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-8-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
链表文件的读取和保存问题
想了一整天,实在想不出到底哪里有问题了

输出结果:
ID:1,a
ID:2,b
ID:3,c
ID:-842150451,屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯 //为什么会出来这个


保存/读取函数:
程序代码:
void save_bin(Book *head){
    //将链表中的所有数据以二进制保存在文件目录
    //参数:头指针
    FILE *fp=fopen("save","wb");
    Book *p=head; //Book是一个typedef声明的结构体
    if(!fp){
        printf("生成文件失败!\n");
        PAUSE;
        return ;    //返回原函数
    }
    else
        while(p){
            fwrite(p,sizeof(Book),1,fp);
            p=p->next;
        }
    printf("文件保存成功!\n");
    fclose(fp);    //关闭文件,并保存
    PAUSE;    //#define PAUSE system("pause")

}

//读取函数
void load_bin(Book *head){
    Book *p1=head,*p2;
    FILE *fp=fopen("save","rb");
    if(!fp)
        printf("读取文件失败!\n");
    else{
        while(1){
            if(fread(p1,sizeof(Book),1,fp)!=1)
                break;
            p2=malloc(sizeof(Book));
            p1->next=p2;
            p1=p2;
        }
        p1->next=NULL;
        fclose(fp);
        printf("读取文件成功!\n");
        PAUSE;
    }
}



[ 本帖最后由 FireRabbit 于 2015-10-3 10:56 编辑 ]
搜索更多相关主题的帖子: 二进制 color 
2015-10-03 10:54
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:14 
自己用調試器跟蹤一下最後一個數據是怎麼出來的啊

授人以渔,不授人以鱼。
2015-10-03 19:13
FireRabbit
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-8-6
收藏
得分:0 
回复 2楼 TonyDeng
是读取那里出问题了,不知道为什么会多出来一个节点,把这个节点除掉就没问题了。
原因还是想不通,难道判断文件结束标志出问题了?
程序代码:
void load_bin(Book *head){
    Book *p1=head,*p2;
    FILE *fp=fopen("save","rb");
    if(!fp)
        printf("读取文件失败!\n");
    else{
        while(1){
                fread(p1,sizeof(Book),1,fp);
                if(feof(fp))
                    break;
                p2=malloc(sizeof(Book));
                p1->next=p2;
                p1=p2;
            }
        }
        p1->next=NULL;
        for(p1=head;p1->next!=NULL;p1=p1->next)//循环找到倒数第二个节点
            p2=p1;
        p1=p2;        //原来的尾节点往前移动一位
        p1->next=NULL;
        printf("读取文件成功!\n");
        fclose(fp);
        PAUSE;
}


 

[ 本帖最后由 FireRabbit 于 2015-10-3 21:15 编辑 ]

我的愿望是用C++开发自己的游戏引擎。
在此之前还有许多东西要学……
2015-10-03 21:13
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
我又不知道你寫出來的文件是怎樣的,答不了,一直都不提供該給的東西,光問有什麼用。

授人以渔,不授人以鱼。
2015-10-03 21:22
FireRabbit
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-8-6
收藏
得分:0 
回复 4楼 TonyDeng
该有的已经注释了,全部代码很长,只截取了有用的部分
不过算了,知道哪里出问题,解开只是时间问题

我的愿望是用C++开发自己的游戏引擎。
在此之前还有许多东西要学……
2015-10-04 08:13
快速回复:链表文件的读取和保存问题
数据加载中...
 
   



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

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