上面这段代码有问题吗,如果有请修改
时间: 2024-03-23 11:43:05 浏览: 53
这段代码存在一些问题,比如:
1. 在内部循环中,如果遇到与外部循环相同的学院,也会进行计数,导致重复计数。
2. 在内部循环中,如果某个学院不存在任何学生,也会被输出,导致结果不准确。
3. 在内部循环中,不需要遍历整个链表,只需要遍历到外部循环的当前节点即可。
下面是修改后的代码:
```c
// 统计各学院人数
void calculate_department(struct student* head) {
struct student* p = head;
while (p != NULL) {
int count = 0;
struct student* q = head;
while (q != p) { // 只需遍历到外部循环的当前节点即可
if (strcmp(p->department, q->department) == 0) {
count++;
}
q = q->pNext;
}
if (count == 0) { // 如果某个学院不存在学生,不输出
p = p->pNext;
continue;
}
printf("%s有%d名学生。\n", p->department, count + 1);
p = p->pNext;
}
}
```
修改后的代码,避免了重复计数和输出不存在学生的学院,输出结果更加准确。
阅读全文