| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 705 人关注过本帖
标题:链表修改了很多回,可还是错误
只看楼主 加入收藏
鱼欲语雨
Rank: 1
等 级:新手上路
帖 子:38
专家分:9
注 册:2012-9-27
结帖率:90.91%
收藏
已结贴  问题点数:20 回复次数:10 
链表修改了很多回,可还是错误
程序代码:
#include<stdio.h>
#include<string.h>
#include<malloc.h>
struct book
{
    int num;
    char name[30];
    char author[30];
    int classnum;
    char pub[30];
    long int time;
    float price;
    struct book *next;
};
void main()
{   
    struct book *last,*head,*s;

    int x=1;
    float y;
    head=NULL;
    last=NULL;
   
    while(x==1)
    {
        struct book *s;
        s=(struct book*)malloc(sizeof(struct book));
        printf("请输入书号");
        scanf("%d",&s->num);
        printf("输入书名");
        gets(s->name);
        printf("输入作者");
        gets(s->author);
        printf("输入分类号");
        scanf("%d",&s->classnum);
        printf("输入出版社");
        gets(s->pub);
        printf("输入出版时间");
        scanf("%d",&s->time);
        printf("输入价格");
        scanf("%f",&y);
        s->price=y;
        s->next=NULL;
        last->next=s;
        last=s;
        printf("是否继续\n1·是\n2·否\n");
        scanf("%d",&x);

    }   
}
编译链接都没问题,就是运行程序时   当输入完价格就出错,调试器指着        last->next=s;     是这句语句错了吗?
恕我眼搓   找不出错误啊
请各位大大帮我看看
搜索更多相关主题的帖子: color 
2013-06-20 14:55
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:10 
last没有分配空间;
在 s=(struct book*)malloc(sizeof(struct book));  后面加一句     last=(struct book*)malloc(sizeof(struct book*));

三十年河东,三十年河西,莫欺少年穷!
2013-06-20 16:01
鱼欲语雨
Rank: 1
等 级:新手上路
帖 子:38
专家分:9
注 册:2012-9-27
收藏
得分:0 
回复 楼主 鱼欲语雨
修改好了    那不过为什么树上都没有的啊    而且head也没有申请啊
2013-06-20 16:05
lzj12530
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:264
专家分:841
注 册:2013-3-28
收藏
得分:0 
你这一个 函数都不全

C++菜鸟
2013-06-20 16:12
鱼欲语雨
Rank: 1
等 级:新手上路
帖 子:38
专家分:9
注 册:2012-9-27
收藏
得分:0 
回复 2楼 韶志
谢谢   已经修改好了    那不过为什么树上都没有的啊    而且head也没有申请啊
2013-06-20 16:12
lzj12530
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:264
专家分:841
注 册:2013-3-28
收藏
得分:10 
struct book *last,*head,*s; //声明三个结构体指针变量,S是用来指向并代表当前节点。是需要分配内存空间的,而head和last都是指针变量而已,没有结构体内存空间。
last->next=s;       //last不是结构体变量 并且该语句前last=NULL,所以不能调用last->next.直接将这一句删除。
         last=s;

C++菜鸟
2013-06-20 16:18
鱼欲语雨
Rank: 1
等 级:新手上路
帖 子:38
专家分:9
注 册:2012-9-27
收藏
得分:0 
回复 6楼 lzj12530
区分是节点还是指针是不是看有没有经过内存分配呢?
2013-06-20 16:45
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:0 
回复 5楼 鱼欲语雨
head压根就没用   所以没必要申请   你看  你的S不都申请了

三十年河东,三十年河西,莫欺少年穷!
2013-06-20 16:56
lzj12530
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:264
专家分:841
注 册:2013-3-28
收藏
得分:0 
不是看是否内存分配,三个变量都是指针,只是你的s指向了新申请的节点,而head,last你没有指向任何节点是NULL值。

C++菜鸟
2013-06-20 17:11
lzj12530
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:264
专家分:841
注 册:2013-3-28
收藏
得分:0 
比如说你创建链表. 初始head=NULL.表示没有节点,当你创建第一个节点后就应该将head指向该节点,作为链表表头。

C++菜鸟
2013-06-20 17:13
快速回复:链表修改了很多回,可还是错误
数据加载中...
 
   



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

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