#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct staff{
int num;
char name[4];
struct staff *next;
}Node;
int main(void)
{
int n;
Node *head,*p,*last;
head=(Node *)malloc(sizeof(Node));
head->next=NULL;
last=head;
while(n!=4){
printf("1.添加员工\n2.删除员工\n3.员工表\n4.退出\n");
scanf("%d",&n);
switch(n){
case 1:
int num;
char name[20];
printf("输入员工号及姓名:\n");
p=(Node *)malloc(sizeof (Node));
scanf("%d %s",&num,&name);
p->num=num;
strcpy(p->name,name);
p->next=NULL;
last->next=p;
last=p;
break;
case 2:
int number;
Node *q,*l;
printf("输入员工号:");
scanf("%d",&number);
p=head->next;
while(p){
q=p->next;
if(p->num==number){
free(p);
}
p=q;
}
break;
case 3:
for(p=head->next;p!=NULL;p=p->next){
printf("%d %s\n",p->num,p->name);
}
break;
case 4:
break;
}
}
return 0;
}
这是一个链表,问题在"删除一个结点在输出后出现一堆乱码",希望帮看一下。
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
技术专家团-小桥流水 2022-01-09 19:29关注case 1:中:
scanf("%d %s",&num,&name);这里,name前面不需要&
case 2逻辑错误。
代码修改如下:#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct staff{ int num; char name[4]; struct staff *next; }Node; int main(void) { int n; Node *head,*p,*last; head=(Node *)malloc(sizeof(Node)); head->next=NULL; last=head; while(n!=4){ printf("1.添加员工\n2.删除员工\n3.员工表\n4.退出\n"); scanf("%d",&n); switch(n){ case 1: int num; char name[20]; printf("输入员工号及姓名:\n"); p=(Node *)malloc(sizeof (Node)); scanf("%d %s",&num,name); //修改1 p->num=num; strcpy(p->name,name); p->next=NULL; last->next=p; last=p; break; case 2: int number; Node *q,*l; printf("输入员工号:"); scanf("%d",&number); p=head->next; q= head; while(p){ if(p->num==number){ q->next = p->next; free(p); break; }else { q = p; p = p->next; } } break; case 3: for(p=head->next;p!=NULL;p=p->next){ printf("%d %s\n",p->num,p->name); } break; case 4: break; } } return 0; }解决 无用评论 打赏 举报 编辑记录