鱼C论坛

 找回密码
 立即注册
查看: 1126|回复: 11

[已解决]新手求助

[复制链接]
发表于 2018-9-8 10:11:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
可以正常运行,但是没有输出链表,求指错,蟹蟹







#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define LEN sizeof(struct list)
struct list                                                                                        //定义链表
{
        char *name;
        long int num;
        struct list *next;
};
int main(void)
{
        struct list *p1,*p2,*head,*p;
        p1=p2=(struct list *)malloc(LEN);                                //申请第一个节点
        printf("请输入姓名:");
        scanf("%s",&p1->name);
        printf("请输入学号:");
        scanf("%d",&p1->num);
        head = NULL;
        int n=0;
        while(p1->num)                                                                        //动态申请节点并输入
        {
                n++;
                if(n==1)
                        head=p1;
                else
                        p2->next=p1;
                p2=p1;
                p1=(struct list *)malloc(LEN);
                printf("请输入姓名:");
                scanf("%s",&p1->name);
                printf("请输入学号:");
                scanf("%d",&p1->num);
        }
        p2->next=NULL;

        p=head;                                                                                        //打印链表
        while(head)
        {
                do
                {
                        printf("%d:        姓名:%s    学号:%d\n",n+1,p->name,p->num);
                        p=p->next;
                }while(p);
        }
        return 0;
}
最佳答案
2018-9-9 14:31:53
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define LEN sizeof(struct list)
struct list                                                                                        //定义链表
{
        char *name;
        long int num;
        struct list *next;
};
int main(void)
{               
                int n=0;
        struct list *p1,*p2,*head;
        printf("LEN = %d\n",LEN);
        p1=p2=(struct list *)malloc(LEN);                                //申请第一个节点
                if(p1==NULL)
                {
                        printf("分配内存失败\n");
                }
               
        printf("请输入姓名:");
        scanf("%s",&p1->name);
        printf("请输入学号:");
        scanf("%d",&p1->num);
        head = NULL;
        
        while(p1->num != 0)                                                                        //动态申请节点并输入
        {
                n++;
                if(n==1)
                                {
                    head=p1;
                }
                                else
                                {   
                                        p2->next=p1;
                                        p2=p1;
                                }
               
                p1=(struct list *)malloc(LEN);
                printf("请输入姓名:");
                scanf("%s",&p1->name);
                printf("请输入学号:");
                scanf("%d",&p1->num);
               
        }
        p2->next=NULL;

        p2=head;                                                                                        //打印链表
        while( p2!=NULL )
        {
            
            printf("%d:姓名:%s 学号:%d\n",n+1,&p2->name,p2->num);
            p2=p2->next;
   
        }
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-8 10:58:21 | 显示全部楼层
你好  我在你的程序上做了修改  有些地方你写的不合理  我这只是个参考

注意  循环的时候一定要有结束条件  

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define LEN sizeof(struct list)
struct list                                                                                        //定义链表
{
        char *name;
        long int num;
        struct list *next;
};
int main(void)
{
        struct list *p1,*p2,*head,*p;
        printf("LEN = %d\n",LEN);
        p1=p2=(struct list *)malloc(LEN);                                //申请第一个节点
        printf("请输入姓名:");
        scanf("%s",p1->name);
        printf("请输入学号:");
        scanf("%d",&p1->num);
        head = NULL;
        int n=0;
        while(p1->num != 0)                                                                        //动态申请节点并输入
        {
                n++;
                if(n==1)
                    head=p1;
                else
                        p2->next=p1;
                p2=p1;
                p1=(struct list *)malloc(LEN);
                printf("请输入姓名:");
                scanf("%s",p1->name);
                printf("请输入学号:");
                scanf("%d",&p1->num);
                p2->next=p1;
                p2=p1;
        }
        p2->next=NULL;

        p2=head;                                                                                        //打印链表
        while(p2->next)
        {
            
            printf("%d:姓名:%s 学号:%d\n",n+1,p2->name,p2->num);
            p2=p2->next;
   
        }
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-8 19:24:01 | 显示全部楼层
gpf谦默 发表于 2018-9-8 10:58
你好  我在你的程序上做了修改  有些地方你写的不合理  我这只是个参考

注意  循环的时候一定要有结束条 ...

你好,你的程序我运行了,还是不能正常打印链表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-8 19:25:15 | 显示全部楼层
910201513 发表于 2018-9-8 19:24
你好,你的程序我运行了,还是不能正常打印链表

而且我觉得循环结束条件省略不等于0完全ok
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-8 20:27:26 | 显示全部楼层
910201513 发表于 2018-9-8 19:25
而且我觉得循环结束条件省略不等于0完全ok

等于0  只是个循环终止条件,也可以有其他的写法
我用的是Dev C++ 编译的没问题的 你用的是啥?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-8 20:29:00 | 显示全部楼层
C:\Users\huipu\Desktop\捕获.PNG
捕获.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-9 14:31:53 | 显示全部楼层    本楼为最佳答案   
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define LEN sizeof(struct list)
struct list                                                                                        //定义链表
{
        char *name;
        long int num;
        struct list *next;
};
int main(void)
{               
                int n=0;
        struct list *p1,*p2,*head;
        printf("LEN = %d\n",LEN);
        p1=p2=(struct list *)malloc(LEN);                                //申请第一个节点
                if(p1==NULL)
                {
                        printf("分配内存失败\n");
                }
               
        printf("请输入姓名:");
        scanf("%s",&p1->name);
        printf("请输入学号:");
        scanf("%d",&p1->num);
        head = NULL;
        
        while(p1->num != 0)                                                                        //动态申请节点并输入
        {
                n++;
                if(n==1)
                                {
                    head=p1;
                }
                                else
                                {   
                                        p2->next=p1;
                                        p2=p1;
                                }
               
                p1=(struct list *)malloc(LEN);
                printf("请输入姓名:");
                scanf("%s",&p1->name);
                printf("请输入学号:");
                scanf("%d",&p1->num);
               
        }
        p2->next=NULL;

        p2=head;                                                                                        //打印链表
        while( p2!=NULL )
        {
            
            printf("%d:姓名:%s 学号:%d\n",n+1,&p2->name,p2->num);
            p2=p2->next;
   
        }
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-9 14:33:37 | 显示全部楼层
觉得name那里用数组会比指针简单,不会有这么多错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-10 13:29:08 | 显示全部楼层
gpf谦默 发表于 2018-9-8 20:27
等于0  只是个循环终止条件,也可以有其他的写法
我用的是Dev C++ 编译的没问题的 你用的是啥?

vc6.0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-10 13:31:11 | 显示全部楼层
几番离愁 发表于 2018-9-9 14:31
#include
#include
#include

蟹蟹
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-10 14:23:17 | 显示全部楼层

思想是没问题的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-10 18:13:30 | 显示全部楼层

蟹蟹指点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 16:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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