2 qierupup qierupup 于 2017.01.11 15:01 提问

新手 C语言运行时停止运行 求大神解决谢谢了 急!

#include
#include

struct stu
{
int id;
int name;
struct stu next;
};
//初始化学生链
struct stu
init_link()
{
struct stu* head=(struct stu*)malloc(sizeof(struct stu));
head->id=-1;
head->next=NULL;
return head;
}
//创建一个新学生
struct stu* new_stu()
{
return (struct stu*)malloc(sizeof(struct stu));
}
//获取链表的尾部元素
struct stu* get_tail(struct stu* head)
{
struct stu* cur=head;
while(!(cur->next==NULL))
{
cur=cur->next;
}
return cur;
}
//根据id查询所有学生,把目标学生返回
struct stu* get_stu_byid(struct stu* head, int id)
{
struct stu* cur=head;
while(!(cur->next==NULL))
{
cur=cur->next;
if(cur->next->id==id)
{
return cur;
}
}
return NULL;
}

int main()
{
//1.添加学生
//2.删除学生
//3.修改学生
//4.查询所有学生
//5.根据id查询指定学生
//6.退出
int choice=0, id, name;
struct stu* head=init_link();
struct stu* ns=NULL;
struct stu* tail=NULL;
struct stu* cur=NULL;
struct stu* tar=NULL;
printf("*****welcome to stu_manage_system*****\n");

while(1)
{
    printf("1.insert stu info\n");
    printf("2.delete stu info\n");
    printf("3.update stu info\n");
    printf("4.query all stu info\n");
    printf("5.query stu info by id\n");
    printf("6.exit\n");
    printf("make your choice:");
    scanf("%d",&choice);
    if(choice==1)
    {
        printf("input stu_id, plz:");
        scanf("%d", &id);
        printf("input stu_name, plz:");
        scanf("%d", &name);
        ns=new_stu();
        ns->id=id;
        ns->name=name;
        ns->next=NULL;
        tail=get_tail(head);
        tail->next=ns;
    }
    if(choice==2)
    {
        cur=head;
        printf("请输入学生学号");
        scanf("%d",&id);
        tar=get_stu_byid(head,id);
        cur=tar->next;
       tar->next=tar->next->next;
       free(cur);

    }
    if(choice==3)
    {
        cur=head;
        printf("input stu_id.pize");
        scanf("%d",&id);
        tar=get_stu_byid(head,id);
        cur=tar->next;
        printf("input stu_name.pize");
        scanf("%d",&name);
        cur->name=name;
    }
    if(choice==4)
    {
        cur=head;
        while(!(cur->next==NULL))
        {
            cur=cur->next;
            printf("stu_id=%d\n",cur->id);
            printf("stu_name=%d\n",cur->name);
            printf("++++++\n");
        }
    }
    if(choice==5)
    {  
    cur=head;
      // struct stu* get_stu_byid(head,id);
       printf("");
    }
    if(choice==6)
    {
       return 0;
    }

}

}

4个回答

a29562268
a29562268   2017.01.11 18:54
已采纳

我有篇双向链表list容器的实现,你可以参考下

shen_wei
shen_wei   Ds   Rxr 2017.01.11 17:13
sum_TW
sum_TW   2017.01.11 17:34

把错误信息发过来啊,一般常见错误就是你的链表访问时候访问到链表以外的地方,遍历链表的时候要注意,在Linux下面编译就是段错误,你可以加断点试下。

tr1912
tr1912   2017.01.11 19:27

一定要理解双向链表的使用方法和特性

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!