亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

求大神知道下,刪除功能怎么錯了,謝謝

求大神知道下,刪除功能怎么錯了,謝謝

芡你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 關注
  • 1696 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號