#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;
}
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;
}