鱼C论坛

 找回密码
 立即注册
查看: 1829|回复: 1

[已解决]链表 新手 总在输入的时候崩溃 未释放内存 谢谢大佬

[复制链接]
发表于 2018-2-18 20:40:06 | 显示全部楼层 |阅读模式

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

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

x
#include<stdio.h>
#include<stdlib.h>
struct school
{
        int date;
        struct school *next;
};
void scan(struct school *student)
{
        printf("请输入数据");
        scanf("%d",student->date);
}
void addstudent(struct school **head)
{
        struct school *student=NULL,*temp=NULL;
        student=(struct school *)malloc(sizeof(struct school));
        if(student==NULL)
        {
                printf("内存分配失败");
                exit(1);
        }
        scan(student);
        printf("666");
        if(*head!=NULL)
        {
                temp=*head;
                *head=student;
                student->next=temp;
        }
        else
        {
                *head=student;
                student->next=NULL;
        }


}
void printstudent(struct school *head)
{
        struct school *student;
        student=head;
        while(student!=-NULL)
        {
                printf("%d",student->date);
                student=student->next;
        }
}
int main()
{
        struct school *head=NULL;
        char ch;
        while(1)
        {        printf("是否输入y/n?");
                scanf("%c",&ch);
                if(ch=='y')
                {
                        addstudent(&head);   
                }
                if(ch=='n')
                {
                        break;
                }
        }
        printf("是否打印");
        while(ch!='y'||ch!='n')
        {
                scanf("%c",&ch);
        }
        if(ch=='y')
        {
                printstudent(head);
        }


        return 0;
}
K2JX({98W80QT4C3~ND}P[2.png
最佳答案
2018-2-18 22:12:49
#include<stdio.h>
#include<stdlib.h>
struct school
{
        int date;
        struct school *next;
};
void scan(struct school *student)
{
        printf("请输入数据");
        scanf("%d",&student->date); // 关键错误 &
                student->next = NULL;
}
void addstudent(struct school **head)
{
        struct school *student=NULL,*temp=NULL;
        student=(struct school *)malloc(sizeof(struct school));
        if(student==NULL)
        {
                printf("内存分配失败");
                exit(1);
        }

        scan(student);

        if(*head!=NULL)
        {
                temp=*head;
                *head=student;
                (*head)->next=temp;
        }
        else
        {
                *head=student;
        }


}
void printstudent(struct school *head)
{
        struct school *student;
        student=head;
        while(student!=NULL)
        {
                printf("%d\n",student->date);
                student=student->next;
        }
}
int main()
{
        struct school *head=NULL;
        char ch;
        while(1)
        {        printf("是否输入y/n?");
                scanf("%c",&ch);
                if(ch=='y')
                {
                        addstudent(&head);    
                }
                if(ch=='n')
                {
                        break;
                }
                        while(getchar() != '\n') continue;
        }
        
                while(getchar() != '\n') continue;

        printf("是否打印y/n?");
                scanf("%c",&ch);
        while(ch!='y'||ch!='n')
        {
                        
                                if(ch=='y')
                                {
                                        printstudent(head);
                                        break;
                                }
                                while(getchar() != '\n') continue;
                                printf("是否打印y/n?");
                                scanf("%c",&ch);
        }




        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-2-18 22:12:49 | 显示全部楼层    本楼为最佳答案   
#include<stdio.h>
#include<stdlib.h>
struct school
{
        int date;
        struct school *next;
};
void scan(struct school *student)
{
        printf("请输入数据");
        scanf("%d",&student->date); // 关键错误 &
                student->next = NULL;
}
void addstudent(struct school **head)
{
        struct school *student=NULL,*temp=NULL;
        student=(struct school *)malloc(sizeof(struct school));
        if(student==NULL)
        {
                printf("内存分配失败");
                exit(1);
        }

        scan(student);

        if(*head!=NULL)
        {
                temp=*head;
                *head=student;
                (*head)->next=temp;
        }
        else
        {
                *head=student;
        }


}
void printstudent(struct school *head)
{
        struct school *student;
        student=head;
        while(student!=NULL)
        {
                printf("%d\n",student->date);
                student=student->next;
        }
}
int main()
{
        struct school *head=NULL;
        char ch;
        while(1)
        {        printf("是否输入y/n?");
                scanf("%c",&ch);
                if(ch=='y')
                {
                        addstudent(&head);    
                }
                if(ch=='n')
                {
                        break;
                }
                        while(getchar() != '\n') continue;
        }
        
                while(getchar() != '\n') continue;

        printf("是否打印y/n?");
                scanf("%c",&ch);
        while(ch!='y'||ch!='n')
        {
                        
                                if(ch=='y')
                                {
                                        printstudent(head);
                                        break;
                                }
                                while(getchar() != '\n') continue;
                                printf("是否打印y/n?");
                                scanf("%c",&ch);
        }




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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-6 07:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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