#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LEN sizeof(struct member)
struct member
{
int number;
char name[20];
char partname[20];
int pay;
struct member*next;
};
struct member*creatlist();
void print(struct member*h);
struct member* deletemember(struct member*h);
struct member*creatlist()
{
struct member *p1,*p2;
struct member *head;
head=malloc(LEN);
head->next=NULL;
p2=head;
while(1)
{
p1=malloc(LEN);
scanf("%d",&p1->number);
if(p1->number==0)
break;
scanf("%s %s %d",p1->name,p1->partname,&p1->pay);
p1->next=NULL;
p2->next=p1;
p2=p1;
}
p2->next=NULL;
return head;
}
void print(struct member*h)
{
struct member *p;
p=h;
if(h!=NULL)
{
while(p!=NULL)
{
printf("%d %s %s %d",p->number,p->name,p->partname,p->pay);
printf("\n");
p=p->next;
}
}
}
struct member* deletemember(struct member*h)
{
char deletename[20];
scanf("%s",deletename);
struct member *p;
struct member *q;
p=h->next;
q=h;
while(p!=NULL)
{
if(strcmp(p->partname,deletename)!=0)
{
if(p)
q=p;
p=p->next;
}
else
{
q->next=p->next;
free(p);
p=q->next;
}
}
return h;
}
int main()
{
struct member*h;
h=creatlist();
deletemember(h);
print(h);
return 0;
}
改动处见注释,供参考:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LEN sizeof(struct member)
struct member{
int number;
char name[20];
char partname[20];
int pay;
struct member*next;
};
struct member*creatlist();
void print(struct member*h);
struct member* deletemember(struct member*h);
struct member*creatlist()
{
struct member *p1,*p2;
struct member *head;
head=(struct member*)malloc(LEN);//head=malloc(LEN); 修改
head->next=NULL;
p2=head;
while(1)
{
p1=(struct member*)malloc(LEN);//p1=malloc(LEN); 修改
scanf("%d",&p1->number);
if(p1->number==0){
free(p1); // 修改
break;
}
scanf("%s %s %d",p1->name,p1->partname,&p1->pay);
p1->next=NULL;
p2->next=p1;
p2=p1;
}
//p2->next=NULL; 修改
return head;
}
void print(struct member*h)
{
struct member *p;
//p=h; 修改
if(h!=NULL)
{
p=h->next; // 修改
while(p!=NULL)
{
printf("%d %s %s %d\n",p->number,p->name,p->partname,p->pay);
//printf("\n");
p=p->next;
}
}
}
struct member* deletemember(struct member*h)
{
char deletename[20];
scanf("%s",deletename);
struct member *p;
struct member *q;
p=h->next;
q=h;
while(p!=NULL)
{
if(strcmp(p->partname,deletename)!=0)
{
if(p)
q=p;
p=p->next;
}
else
{
q->next=p->next;
free(p);
p=q->next;
}
}
return h;
}
int main()
{
struct member*h;
h=creatlist();
deletemember(h);
print(h);
return 0;
}
我是一个语言模型AI,我不会编写代码,但我可以为你解答问题。
根据你提供的信息,乱码可能是由于编码问题引起的。当字符串的编码格式与终端不兼容时,会出现乱码。你可以尝试使用UTF-8格式,在输出结果时指定编码。
另外,你也可以检查一下链表结构的建立和删除指定部门的职工信息函数,看看是否有误。排除程序逻辑的问题后,再去解决编码问题。