| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2559 人关注过本帖
标题:简单链表输出,不知道这样写哪里错了?
只看楼主 加入收藏
peng880610
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:128
专家分:123
注 册:2017-3-29
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:18 
简单链表输出,不知道这样写哪里错了?
#include <stdio.h>
 struct st
{
    char name[20];
    int n;
    float score;
    struct st *next;
};

int main()
{
    struct st *head=NULL;
    struct st *tail=NULL;
    head=malloc(sizeof(struct st*));
    if(head==NULL)
        return -1;
    struct st* s1={"zhangyiyi",5324,98.5,NULL};
    struct st* s2={"Liulili",32121,78.5,NULL};
    struct st* s3={"Hufang",45221,86.0,NULL};
    struct st* s4={"cuichen",21243,89.0,NULL};

    head=&s1;
    s1.next=&s2;
    s2.next=&s3;
    s3.next=&s4;
    s4.next=NULL;

    struct st *p=head;
    while(p!=NULL)
    {
        printf("%s,%d,%.1f\n",p->name,p->n,p->score);
        p=p->next;
    }
    return 0;
}
创建一个链表,里面有任意4个学生的固定信息(非动态输入),怎么把他们的信息输出?
搜索更多相关主题的帖子: include return 
2017-06-06 00:34
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:3 
s1等都是指针。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-06-06 07:21
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:3 
 struct st* s1={"zhangyiyi",5324,98.5,NULL};
    struct st* s2={"Liulili",32121,78.5,NULL};
    struct st* s3={"Hufang",45221,86.0,NULL};
    struct st* s4={"cuichen",21243,89.0,NULL};


应该是不允许这样初始化  还需另避蹊径

这样设置链条
程序代码:
  head=&s1;
    s1.next=&s2;
    s2.next=&s3;
    s3.next=&s4;
    s4.next=NULL;
是书上教的还是自己想的啊  不知道是否能成功呢

DO IT YOURSELF !
2017-06-06 09:36
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 3楼 wp231957
如果s1……s5不是指针的话,是可以的。
但是很遗憾,他的代码s1……s5都是指针。

指针是只有指针本身的存储空间,但是并没有存储结构数据的空间。

字符串可以这样,原因是因为字符串字面值本身就是一个指针。

要存储一个指针的值,需要二级指针。

他的代码从定义s1——s5这几个变量开始就已经错了。
然后再到后面的设置链接。

[此贴子已经被作者于2017-6-6 10:56编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-06-06 10:53
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
话说楼主这样改就能运行了  不过需要改进的地方较多

程序代码:
#include <stdio.h>
#include <string.h>
#include <malloc.h>


 struct st 
{
    char name[20];
    int n;
    float score;
    struct st *next;
};

int main()
{
    struct st *head=NULL;
    struct st *tail=NULL;
    head=(struct st*)malloc(sizeof(struct st*));
    if(head==NULL)  return -1;
    struct st* s1=(struct st*)malloc(sizeof(struct st));
    struct st* s2=(struct st*)malloc(sizeof(struct st));
    struct st* s3=(struct st*)malloc(sizeof(struct st));
    struct st* s4=(struct st*)malloc(sizeof(struct st));
    strcpy(s1->name,"zhangyiyi");
    strcpy(s2->name,"liulili");
    strcpy(s3->name,"huafang");
    strcpy(s4->name,"cuichen");
    s1->n=5324;
    s2->n=32121;
    s3->n=54221;
    s4->n=21243;
    s1->score=98.5;
    s2->score=78.5;
    s3->score=86.0;
    s4->score=89.0;
    s1->next=NULL;
    s2->next=NULL;
    s3->next=NULL;
    s4->next=NULL;
    

    head=s1;
    s1->next=s2;
    s2->next=s3;
    s3->next=s4;
    s4->next=NULL;

    struct st *p=head;
    while(p!=NULL)
    {
        printf("%10s%8d%10.2f\n",p->name,p->n,p->score);
        p=p->next;
    }
    return 0;
}

DO IT YOURSELF !
2017-06-06 14:28
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 5楼 wp231957
为什么不直接删除主题贴代码中变量s1——s5的*号。

[此贴子已经被作者于2017-6-6 14:46编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-06-06 14:44
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 6楼 renkejun1942
1、是按照链表方式写的  都要先申请内存 然后引入数据
2、不知道结构体的那样赋值是否可以 还要反复测试

DO IT YOURSELF !
2017-06-06 14:47
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
  这样也可以运行 的

程序代码:
 #include <stdio.h>
#include <malloc.h>


 struct st 
{
    char name[20];
    int n;
    float score;
    struct st *next;
};

int main()
{
    struct st *head=NULL;
    struct st *tail=NULL;
    head=(struct st*)malloc(sizeof(struct st));
    if(head==NULL)
        return -1;
    struct st s1={"zhangyiyi",5324,98.5,NULL};
    struct st s2={"Liulili",32121,78.5,NULL};
    struct st s3={"Hufang",45221,86.0,NULL};
    struct st s4={"cuichen",21243,89.0,NULL};

    head=&s1;
    s1.next=&s2;
    s2.next=&s3;
    s3.next=&s4;
    s4.next=NULL;

    struct st *p=head;
    while(p!=NULL)
    {
        printf("%s,%d,%.1f\n",p->name,p->n,p->score);
        p=p->next;
    }
    return 0;
}

DO IT YOURSELF !
2017-06-06 14:49
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 8楼 wp231957
这样写 也就是一个DEMO 没啥实际用

DO IT YOURSELF !
2017-06-06 14:50
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 7楼 wp231957

原来如此。


他的代码只要删掉那几个变量的星号就可以了。结构是可以这样赋值的。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-06-06 14:51
快速回复:简单链表输出,不知道这样写哪里错了?
数据加载中...
 
   



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

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