怎么口述这串代码的运行。。TUT
//删除职工信息
void del(struct worker *m)
{
int n; //用户选择
char Name[100]; //待查询姓名
char idNum[100]; //待查询工号
do
{
printf("1 按姓名删除\n");
printf("2 按工号删除\n");
scanf ("%d",&n);
switch (n)
{
case 1:name2(m,Name);
break ;
case 2:id2(m,idNum);
break ;
default: printf("输入错误!\n");
break ;
}
}while(n!=1 && n!=2);
printf("按任意键返回主菜单!\n");
getch();
}
void name2(struct worker *m)
{
char Name[100];
struct worker *p=m;
struct worker *p1=m->next;
printf("请输入需要删除的职工姓名:");
scanf("%s",Name);
while(p1!=NULL)
{
if(strcmp(p1->name,Name)==0)
{
p->next=p1->next;
free(p1);
p1=NULL;
printf("删除成功!\n");
break;
}
p=p1;
p1=p1->next;
}
}
void id2(struct worker *m)
{
char idNum[100];
struct worker *p=m;
struct worker *p1=m->next;
printf("请输入需要删除的职工工号:");
scanf("%s",idNum);
while(p1!=NULL)
{
if(strcmp(p1->id,idNum)==0)
{
p->next=p1->next;
free(p1);
p1=NULL;
printf("删除成功!\n");
break;
}
p=p1;
p1=p1->next;
}
}
del是一个总的入口,允许用户选择按照什么方式删除
id2 name2的思路其实都一样,
差别只是输入的信息不同,以及if语句判断找到哪条记录的方式不同
思路都是遍历链表,然后判断每一条和输入的是否一样,这个判断用了 strcmp 字符串比较
然后如果匹配,说明找到了要删除的记录
就让链表指向下一个节点,再释放找到的节点,从而完成删除。
下面我们分两步走:先翻译汇编成C伪代码,再把伪代码还原成C代码。