| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 708 人关注过本帖
标题:链表的调试
只看楼主 加入收藏
鱼游海底
Rank: 1
来 自:中国
等 级:新手上路
帖 子:132
专家分:2
注 册:2015-4-16
结帖率:57.14%
收藏
 问题点数:0 回复次数:5 
链表的调试
/*指针2_22题*/
/*单向链表的降序排列*/
#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct member)
/*足球队员记录的结构体*/
struct member
{
    char name[20];
    char club[20];
    float height;
    int old;
    struct member *next;
};
/*建立一个动态的单向链表*/
struct member *creat()
{
    struct member *head,*p1,*p2;
    p1=p2=(struct member*)malloc(LEN);
    head=NULL;
    printf("输入足球队员的记录(姓名,所属俱乐部,身高,年龄):\n");
    scanf("%s,%s,%f,%d",p1->name,p1->club,&p1->height,&p1->old);
    while(p1->old!=0)     /*队员的年龄为0表示结束*/
    {
        (head==NULL)?(head=p1):(p2->next=p1);
        p2=p1;
        p1=(struct member*)malloc(LEN);
        printf("输入足球队员的记录(姓名,所属俱乐部,身高,年龄):\n");
        scanf("%s,%s,%f,%d",p1->name,p1->club,&p1->height,&p1->old);
    }
    p2->next=NULL;
    return head;
}
/*单向链表的排序(身高从大到小)*/
struct member *paixu(struct member *head)
{
    struct member *p,*p1,*p2,*temp1,*temp2;
    for(p1=head;p1->next!=NULL;p1=p1->next)
    {
        p=p1;
        for(p2=p->next;p2!=NULL;p2=p2->next)
            if(p->old<p2->old)p=p2;     /*p向身高最高的结点*/
        /*要与头结点交换*/
            if((p1=head)&&(p!=p1))
            {
                head=p2;
                temp1=p2->next;
                p2->next=p1->next;
                p2=p1;
                p1->next=temp1;
            }
        /*不与头结点交换*/
            if((p1!=head)&&(p!=p1))
            {
                temp1=p1;
                p1=p1->next;
                temp2=p2->next;
                p2->next=temp1;
                p1->next=temp2;
            }
    }
    return head;
}
/*输出链表*/
void print(struct member *head)
{
    struct member *p;
    p=head;
    while(p!=NULL)
    {
        printf("姓名:%s,所属俱乐部:%s,升高:%f,年龄:%d",p->name,p->club,&p->height,&p->old);
        p=p->next;
    }
}
int main()
{
    struct member *head;
    head=creat();
    head=paixu(head);
    print(head);
    return 0;
}


问题是:编译连接过程都没有出现问题,但是在执行的时候,总是陷入输入的死循环。。。。



搜索更多相关主题的帖子: 动态 结构体 member 俱乐部 include 
2015-06-04 10:12
calix
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:28
帖 子:249
专家分:1442
注 册:2015-5-4
收藏
得分:0 
应该是这句的问题
scanf("%s,%s,%f,%d",p1->name,p1->club,&p1->height,&p1->old);
最好把不同类型的输入分开
2015-06-04 14:55
情.难言ゝ
Rank: 3Rank: 3
来 自:安徽安庆
等 级:论坛游侠
威 望:1
帖 子:74
专家分:137
注 册:2013-9-8
收藏
得分:0 
scanf("%s,%s,%f,%d",p1->name,p1->club,&p1->height,&p1->old);
改成
scanf("%s %s %f %d",p1->name,p1->club,&p1->height,&p1->old);

树叶的离去,是风的追求、还是树的不挽留???
2015-06-04 16:56
鱼游海底
Rank: 1
来 自:中国
等 级:新手上路
帖 子:132
专家分:2
注 册:2015-4-16
收藏
得分:0 
回复 3楼 情.难言ゝ
图片附件: 游客没有浏览图片的权限,请 登录注册





/*指针2_22题*/
/*单向链表的降序排列*/
#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct member)
/*足球队员记录的结构体*/
struct member
{
    char name[20];
    char club[20];
    float height;
    int old;
    struct member *next;
};
/*建立一个动态的单向链表*/
struct member *creat()
{
    struct member *head,*p1,*p2;
    p1=p2=(struct member*)malloc(LEN);
    head=NULL;
    printf("输入足球队员的记录(姓名,所属俱乐部,身高,年龄):\n");
    scanf("%s,%s,%f,%d",p1->name,p1->club,&p1->height,&p1->old);
    while(p1->old!=0)     /*队员的年龄为0表示结束*/
    {
        (head==NULL)?(head=p1):(p2->next=p1);
        p2=p1;
        p1=(struct member*)malloc(LEN);
        printf("输入足球队员的记录(姓名,所属俱乐部,身高,年龄):\n");
        scanf("%s %s %f %d",p1->name,p1->club,&p1->height,&p1->old);
    }
    p2->next=NULL;
    return head;
}
/*单向链表的排序(身高从大到小)*/
struct member *paixu(struct member *head)
{
    struct member *p,*p1,*p2,*temp1,*temp2;
    for(p1=head;p1->next!=NULL;p1=p1->next)
    {
        p=p1;
        for(p2=p->next;p2!=NULL;p2=p2->next)
            if(p->old<p2->old)p=p2;     /*p向身高最高的结点*/
        /*要与头结点交换*/
            if((p1=head)&&(p!=p1))
            {
                head=p2;
                temp1=p2->next;
                p2->next=p1->next;
                p2=p1;
                p1->next=temp1;
            }
        /*不与头结点交换*/
            if((p1!=head)&&(p!=p1))
            {
                temp1=p1;
                p1=p1->next;
                temp2=p2->next;
                p2->next=temp1;
                p1->next=temp2;
            }
    }
    return head;
}
/*输出链表*/
void print(struct member *head)
{
    struct member *p;
    p=head;
    while(p!=NULL)
    {
        printf("姓名:%s,所属俱乐部:%s,升高:%f,年龄:%d",p->name,p->club,&p->height,&p->old);
        p=p->next;
    }
}
int main()
{
    struct member *head;
    head=creat();
    head=paixu(head);
    print(head);
    return 0;
}




这个就是按照你指引的方式改后的代码,。。。
结果还是出乎意料。。
2015-06-05 21:22
你欠我人情
Rank: 2
等 级:论坛游民
威 望:1
帖 子:46
专家分:52
注 册:2015-6-5
收藏
得分:0 
老师说学习C语言必须先学会读程序,楼主,我要开始慢慢读你的程序了

我是小白我是小白我是小白我是小白我是小白我是小白
2015-06-05 21:48
鱼游海底
Rank: 1
来 自:中国
等 级:新手上路
帖 子:132
专家分:2
注 册:2015-4-16
收藏
得分:0 
记得调试哦!!!
2015-06-10 10:58
快速回复:链表的调试
数据加载中...
 
   



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

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