标题:帮帮忙!!!!单次录入,浏览时无限循环。。多次录入后浏览数据覆盖。。自 ...
只看楼主
thyb0088
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-12-28
结帖率:50%
已结贴  问题点数:20 回复次数:2 
帮帮忙!!!!单次录入,浏览时无限循环。。多次录入后浏览数据覆盖。。自己搞了很久了,实在找不出来了
void book_add()
{
    int i=0;
    FILE* fp;
    char in;
    for(;;)
    {
        i++;
        if(head==NULL)
        {
            head=p1=p2=(struct Book*)malloc(sizeof(struct Book));
            head->next=NULL;
        }
        else
        {
            p1=(struct Book*)malloc(sizeof(struct Book));
            p1->next=NULL;
        }
        printf("编号:\n");
        gets(p1->num);
        printf("书名:\n");
        gets(p1->name);
        printf("作者:\n");
        gets(p1->writer);
        printf("分类号:\n");
        gets(p1->fenlei);
        printf("出版单位:\n");
        gets(p1->pubdanwei);
        printf("出版时间:\n");
        gets(p1->pubtime);
        printf("价格:\n");
        p1->price=0.0f;
        scanf("%f",&(p1->price));
        getchar();
        p2->next=p1;
        p2=p1;
        if((fp=fopen("Book.txt","rb"))==NULL)
        {
            fp=fopen("Book.txt","wb");
        }
        fwrite((char*)p1,sizeof(struct Book),1,fp);
        fclose(fp);
        printf("信息录入完毕,随意键退出\n");
        break;
    }
}
void book_view()
{
    int i=0;
    BOOK *p=NULL;
    p=head;
    for(;p!=NULL;)
    {
        i++;
        printf("-------共有%d条记录--------\n",i);
        printf("编号:%s\n",p1->num);
        printf("书名:%s\n",p1->name);
        printf("作者:%s\n",p1->writer);
        printf("分类号:%s\n",p1->fenlei);
        printf("出版单位:%s\n",p1->pubdanwei);
        printf("出版时间:%s\n",p1->pubtime);
        printf("价格:%f\n",p1->price);
        p=p->next;
    }
}   其中的p,p1已经在外部定义为了全局变量,查询和录入的菜单没有问题
搜索更多相关主题的帖子: head 录入 
2012-12-28 21:02
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
得分:20 
看了半天才明白怎么回事,不得不说楼主很粗心啊,先说单次输入无限循环。
能形成无限循环只有一种可能,循环条件永远成立(跳出语句不能执行也是一样的),楼主for(;p!=NULL;)p=p->next;循环应该是没问题的,那么死循环的原因就是p=p->next自己死循环了,查找后发现
        if(head==NULL)
        {
            head=p1=p2=(struct Book*)malloc(sizeof(struct Book));
和p2->next=p1;这两句构成了p=p->next自己的死循环。
至于楼主说的多次输入数据覆盖是因为文件打开方式的问题,不论是rb还是wb打开的文件文件指针都是在文件开头,这时候如果不进行文件指针的定位就写入的话当然会覆盖原来的内容了,要不就追加打开要不fseek

我也是新手啊,说错勿怪

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-12-29 10:31



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




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

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