鱼C论坛

 找回密码
 立即注册
查看: 2291|回复: 5

动态链表的建立于输出问题

[复制链接]
发表于 2014-5-20 23:43:26 | 显示全部楼层 |阅读模式

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

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

x
//建立一个链表存放学生的信息

struct student
        {
                char *name;
                char sex;
                int age;
                struct student * next;
        };


//建立动态链表
struct student *create()
{
        struct student *head,*p1,*p2;
        int n = 0;
        p1 = p2 = (struct student*)malloc(sizeof(struct student));
        ZeroMemory(p1,sizeof(struct student));
        head = NULL;
        scanf("%s",p1->name);
        scanf("%c",&p1->sex);
        scanf("%d",&p1->age);

        while(p1->name != NULL)
        {
                n = n +1;
                if(n == 1)head = p1;
                else p2->next = p1;
                p2 = p1;
                p1 =(struct student*)malloc(sizeof(struct student));
                scanf("%s",p1->name);
            scanf("%c",&p1->sex);
                scanf("%d",&p1->age);
        }
        p2->next = NULL;
        return head;
}


int main(int argc, char* argv[])
{
        struct student *pt;
        printf("请输入姓名、性别(M\F)、年龄:\n");
        pt = create();
        while(pt != NULL)
        {
                printf("%s\t%c\t%d",pt->name,pt->sex,pt->age);
                pt = pt->next;
        }
        system("pause");
        return 0;
}
请问大神这是怎么回事?
QQ浏览器截屏未命名.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-21 01:06:29 | 显示全部楼层
结构体里姓名定义是一个没用的指针!!野指针……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-21 01:51:02 | 显示全部楼层
char *name = NULL;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-21 09:26:37 | 显示全部楼层
:lol:
灰常感谢大神救助:lol:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-21 13:12:59 | 显示全部楼层
// test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdlib.h>
#include <windows.h>


//建立一个链表存放学生的信息

struct student
        {
                char name[20];
                char sex;
                int age;
                struct student * next;
        };


//建立动态链表
struct student *create()
{
        struct student *head,*p1,*p2;
        int n = 0;
        p1 = p2 = (struct student*)malloc(sizeof(struct student));
        ZeroMemory(p1,sizeof(struct student));
        head = NULL;
        scanf("%s %c %d",p1->name,&p1->sex,&p1->age);

        while(strcmp(p1->name,"end") != 0)
        {
                n = n +1;
                if(n == 1)
                {
                        head = p1;
                        printf("access done!\n");
                }
                else p2->next = p1;
                p2 = p1;
                p1 =(struct student*)malloc(sizeof(struct student));
                ZeroMemory(p1,sizeof(struct student));
                scanf("%s %c %d",p1->name,&p1->sex,&p1->age);
                printf("access done!\n");
        }
        p2->next = NULL;
        return head;
}


int main(int argc, char* argv[])
{
        struct student *pt;
        printf("请输入姓名、性别(M\F)、年龄:\n");
        pt = create();
        if(pt != NULL)
                printf("姓名\t性别\t年龄\n");
        while(pt != NULL)
        {
                printf("%s\t%c\t%d\n",pt->name,pt->sex,pt->age);
                pt = pt->next;
        }
        system("pause");
        return 0;
}
附上完整代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-21 13:14:55 | 显示全部楼层
在对指针进行操作的时候,不管指针在结构体内还是在别处,都要先分配内存才可以使用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 00:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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