VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 589|回复: 3

[求助] 一个关于C单链表调用的问题

[复制链接]
86_avatar_middle
在线会员 发表于 2015-10-14 13:59:54 | 显示全部楼层 |阅读模式
3驿站币
#include <stdio.h>
#include <stdlib.h>
#define logo  "欢迎来到**超市\n"
#define productname "请输入商品名称:"
#define productprice "请输入商品价钱:"

typedef struct Node *Pesqlist;
typedef struct Node
{
        int price;
        char *name;
        Pesqlist link;
};
typedef struct Node *Linkhead;



void home()
{
        printf(logo);
}




Linkhead createlink(void)
{
        Linkhead head=(Linkhead)malloc(sizeof(struct Node));
        if(head==NULL)
                printf("创建链表失败");
        else
        {
                head->link=NULL;
        }
        return head;
       
}





void firstnode(Linkhead head)
{
        Pesqlist p=(Pesqlist)malloc(sizeof(struct Node));
        if(p==NULL)
                printf("创建结点失败");
       
        p->link=head->link;
        head->link=p;
        printf(productname);
        scanf("%s",&(p->name));
        printf(productprice);
        scanf("%d",&(p->price));
        free(p);
       
}



void linknode(Linkhead head,int x)
{
        Pesqlist p=(Pesqlist)malloc(sizeof(struct Node));
        p=head->link;
        printf("%d\n",p->price);
        for(;x>0;x--)
        {
                Pesqlist q=(Pesqlist)malloc(sizeof(struct Node));
                q->link=p->link;       
                p->link=q;
                p=q;
                printf(productname);
                scanf("%s",&(q->name));
                printf(productprice);
                scanf("%d",&(q->price));
                free(q);
        }

               

}


int sum(Linkhead head,int x)
{
        Pesqlist p=(Pesqlist)malloc(sizeof(struct Node));
        int sum=0;
        int a;
       
        p=head->link;
       
        for(;x>0;x--)
        {
                a=p->price;
               
                sum+=a;
                p=p->link;
               
        }
        return sum;
}

main()
{
       
        Linkhead head;int price,x;
        home();
        printf("要输入的商品数:");
        scanf("%d",&x);
        head=createlink();
        firstnode(head);       
        linknode(head,--x);
        price=sum(head,x);
        printf("总价=%d\n",price);


}



这个程序编译没有问题,但是运行的时候,头结点不能被函数调用,有大神帮我解决一下吗?

最佳答案

查看完整内容

你的结点定义是这样的: typedef struct Node { int price; char *name; Pesqlist link; }; name 是个 char * 类型的指针,并且没有指向任何可用的内存,之后在 firstnode 函数中就调用 scanf("%s",&(p->name)); 向 name 中放东西了,所以这样肯定崩溃呀




上一篇:MFC Listctrl
下一篇:单文档view调整的问题
51_avatar_middle
online_admins 发表于 2015-10-14 13:59:55 | 显示全部楼层
你的结点定义是这样的:
typedef struct Node
{
        int price;
        char *name;
        Pesqlist link;
};

name 是个 char * 类型的指针,并且没有指向任何可用的内存,之后在 firstnode 函数中就调用 scanf("%s",&(p->name)); 向 name 中放东西了,所以这样肯定崩溃呀
84_avatar_middle
online_vip 发表于 2015-10-14 14:06:31 | 显示全部楼层
楼主不妨用STL,STL集成了数据结构和算法,是C++程序员必需掌握技术。
43_avatar_middle
在线会员 发表于 2015-10-14 16:26:07 | 显示全部楼层
2449200260 发表于 2015-10-14 14:06
楼主不妨用STL,STL集成了数据结构和算法,是C++程序员必需掌握技术。

初学者不建议使用stl,还是把原理搞清楚
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-8-19 00:25

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表