ayansir 2022-01-09 19:26 采纳率: 0%
浏览 39

这是一个链表,问题在"删除一个结点在输出后出现一堆乱码",希望帮看一下。

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

  • 写回答

1条回答 默认 最新

  • 关注

    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;
    }
    
    
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 1月9日