为了账号安全,请及时绑定邮箱和手机立即绑定

求大神知道下,删除功能怎么错了,谢谢

求大神知道下,删除功能怎么错了,谢谢

芡你d太多 2015-12-16 19:05:48
#include<stdio.h>#include<stdlib.h>typedef struct xitong{    char ID[12];    char name[7];    char sex[3];    int age;    char profess[11];    char telephone[12];    struct xitong *next;} xi;void input(xi *head) /*录入人员信息*/{    xi *pnew,*px;    int i=1;    pnew=head;    px=head;    int n;    printf("  请输入录入人数: ");    scanf("%d",&n);    while(i<=n)    {        pnew=(xi *)malloc(sizeof(xi));        printf("\n  *************** 人员信息录入 ******************\n");        printf("\n  请输入第%d个人员的信息:\n",i);        printf("\n  姓名:");        scanf("%s",&pnew->name);        printf("  学号:");        scanf("%s",&pnew->ID);        printf("  性别:");        scanf("%s",&pnew->sex);        printf("  年龄:");        scanf("%d",&pnew->age);        printf("  专业:");        scanf("%s",&pnew->profess);        printf("  电话:");        scanf("%s",&pnew->telephone);        px->next=pnew;        px=pnew;        i++;    }    px->next=NULL;    printf("\n  输入已完成,请键入1返回菜单: ");    scanf("%d",&i);    printf("\n\n\n\n\n\n");    if(i==1)        return;}void output(xi *head)   /*输出人员信息*/{    int i;    xi *p=head;    printf("\n  *************** 人员信息输出 ******************\n");    while(p!=NULL&&p->next!=NULL)    {        p=p->next;        printf("\n  姓名:%s",p->name);        printf("\n  学号:%s",p->ID);        printf("\n  性别:%s",p->sex);        printf("\n  年龄:%d",p->age);        printf("\n  专业:%s",p->profess);        printf("\n  电话:%s",p->telephone);        printf("\n\n\n");    }    printf("\n\n  输出已完成,请键入1返回菜单: ");    scanf("%d",&i);    printf("\n\n\n\n\n\n");    if(i==1)        return;}void search(xi *head)   /*查找人员信息*/{    int i;    char ID[11];    xi *p=head->next;    printf("\n  *************** 人员信息查找 ******************\n");    printf("  请输入人员的学号: ");    scanf("%s",&ID);    while(p->next!=NULL&&p->ID!=ID)    {        p=p->next;    }    printf("\n  姓名:%s",p->name);    printf("\n  学号:%s",p->ID);    printf("\n  性别:%s",p->sex);    printf("\n  年龄:%d",p->age);    printf("\n  专业:%s",p->profess);    printf("\n  电话:%s",p->telephone);    printf("\n\n  查找已完成,请键入1返回菜单: ");    scanf("%d",&i);    printf("\n\n\n\n\n\n");    if(i==1)        return;}void change(xi *head)    /*修改人员信息*/{    int i;    xi *p=head->next;    printf("\n  *************** 人员信息修改 ******************\n");    printf("  请输入要修改人员的名字: ");    char name[10];    scanf("%s",&name);    while(p->next!=NULL&&p->name!=name)    {        p=p->next;    }    printf("\n  姓名:");    scanf("%s",&p->name);    printf("\n  学号:");    scanf("%s",&p->ID);    printf("\n  性别:");    scanf("%s",&p->sex);    printf("\n  年龄:");    scanf("%d",&p->age);    printf("\n  专业:");    scanf("%s",&p->profess);    printf("\n  电话:");    scanf("%s",&p->telephone);    printf("\n  输出已完成,请键入1返回菜单: ");    scanf("%d",&i);    printf("\n\n\n\n\n\n");    if(i==1)        return;}void add(xi *head)   /*添加人员信息*/{    int i;    xi *pnew;    pnew=(xi *)malloc(sizeof(xi));    printf("\n  *************** 人员信息添加 ******************\n");    printf("  请输入人员的信息:\n");    printf("\n  姓名:");    scanf("%s",&pnew->name);    printf("\n  学号:");    scanf("%s",&pnew->ID);    printf("\n  性别:");    scanf("%s",&pnew->sex);    printf("\n  年龄:");    scanf("%d",&pnew->age);    printf("\n  专业:");    scanf("%s",&pnew->profess);    printf("\n  电话:");    scanf("%s",&pnew->telephone);    pnew->next=head->next;    head->next=pnew;    printf("\n  输出已完成,请键入1返回菜单: ");    scanf("%d",&i);    printf("\n\n\n\n\n\n");    if(i==1)        return;}void delete(){    struct student *p,*q;    char *sp;    sp=(char *)malloc(10*sizeof(char));    printf("所删学生的姓名:");    scanf("%s",sp);    fflush(stdin);    if(first==NULL)    {        printf("当前成管为空\n");        return ;    }    if(first!=NULL&&strcmp(first->name,sp)==0)    {        q=first;        first=first->next;        free(q);        return ;    }    for(p=first,q=p->next; q!=NULL; p=q,q=q->next)    {        if(strcmp(q->name,sp)==0)        {            p->next=q->next;            free(q);        }    }    printf("\n     删除成功   \t");    free(sp);}int ui()    /*UI界面*/{    int i;    printf("\n  * * * * * * *实验室人员管理系统* * * * * * **\n");    printf("  *                                           *\n");    printf("  *              1.录入人员信息               *\n");    printf("  *              2.输出人员信息               *\n");    printf("  *              3.查找人员信息               *\n");    printf("  *              4.修改人员信息               *\n");    printf("  *              5.添加人员信息               *\n");    printf("  *              6.删除人员信息               *\n");    printf("  *              7.:(  退出系统               *\n");    printf("  *                                           *\n");    printf("  * * * * * * * * * * * * * * * * * * * * * * *\n");    printf("\n  请选择(1-7): ");    scanf("%d",&i);    if(i>=0&&i<=7)        return i;    else        return 8;}int main(){    int i;    xi *head,*pnew,*px;    head=(xi *)malloc(sizeof(xi));    while(1)    {        switch(i=ui())        {        case 1:            printf("\n\n");            input(head);            break ;        case 2:            printf("\n\n");            output(head);            break ;        case 3:            printf("\n\n");            search(head);            break ;        case 4:            printf("\n\n");            change(head);            break ;        case 5:            printf("\n\n");            add(head);            break ;        case 6:            printf("\n\n");            delet(head);            break ;        case 7:            printf(" \n\n  :) 感谢使用实验室人员管理系统\n\n\n\n");            return 0;        }    }}
查看完整描述

1 回答

已采纳
?
Ivoth

TA贡献13条经验 获得超3个赞

写的什么鬼啊

链表删除节点可不是你这样 啊

q=first;
        first=first->next;
        free(q);

这句话是如果输入的名字匹配链表第一个名字,吧头指针q=first都释放了,也就是没有头节点,其它节点你有没有用其他指针承接, 就是全没了,

下面的for循环也是把,匹配到的名字后面的全删了


查看完整回答
反对 回复 2015-12-16
  • 1 回答
  • 0 关注
  • 1629 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信