C语言如何改进这段代码void del(){ int sID; printf("请输入要删除的学号:"); scanf("%d",&sID); Node* p=g_head; Node* p1,* p2; if(p->stu1.ID==sID){ p1=p->pNext; free(p1); } if(p->pNext!=NULL){ p2=p->pNext; p->pNext=p->pNext->pNext; free(p2); } printf("学号为%d的信息删除成功!\n",sID); }使其能在学生信息管理系统中正常运行
时间: 2024-01-31 08:04:05 浏览: 54
scanf是C语言中的一个格式化输入函数.docx
这段代码存在以下问题:
1. 如果要删除的学号是第一个节点的学号,删除的是第二个节点而不是第一个节点;
2. 如果要删除的学号不存在,程序不会提示错误信息;
3. 删除第二个及以后的节点时,没有考虑到最后一个节点的情况。
修改代码如下:
```c
void del() {
int sID;
printf("请输入要删除的学号:");
scanf("%d", &sID);
Node *p = g_head;
Node *p1, *p2;
if (p->stu1.ID == sID) {
g_head = p->pNext;
free(p);
printf("学号为%d的信息删除成功!\n", sID);
return;
}
while (p->pNext != NULL) {
p1 = p->pNext;
if (p1->stu1.ID == sID) {
p2 = p1->pNext;
p->pNext = p2;
free(p1);
printf("学号为%d的信息删除成功!\n", sID);
return;
}
p = p->pNext;
}
printf("学号为%d的信息不存在!\n", sID);
}
```
主要修改如下:
1. 如果要删除的学号是第一个节点的学号,直接将第二个节点作为头结点;
2. 在循环中查找要删除的节点,找到后删除节点,并返回;
3. 循环结束后,如果没有找到要删除的节点,提示错误信息。
阅读全文