int SortList(struct student *head) // 按总分成绩排序学生信息(降序) { // 冒泡排序 int count = 0; struct student *p, *q, *temp; temp = (struct student *)malloc(sizeof(struct student)); int length = 0; p = head->next; for ( p != NULL; p = p->next) { length++; //记录表长 } for (int i = 0; i < length - 1; i++) { for (p = head->next; p->next != NULL; p = p->next) { q = p->next; if ((p->sum) < (q->sum)) //排序 { *temp = *p; *p = *q; *q = *temp; } } } free(temp); printf("按总成绩降序排行:\n"); TraverseList(head); }
时间: 2024-02-14 19:10:12 浏览: 30
在这段代码中,有一个错误:在第10行的 for 循环中,判断条件写错了,应该是 `p != NULL` 而不是 `for ( p != NULL; p = p->next)`。下面是修改后的代码:
```
int SortList(struct student *head) // 按总分成绩排序学生信息(降序)
{
// 冒泡排序
int count = 0;
struct student *p, *q, *temp;
temp = (struct student *)malloc(sizeof(struct student));
int length = 0;
p = head->next;
while (p != NULL) //修改此处循环条件
{
length++; //记录表长
p = p->next;
}
for (int i = 0; i < length - 1; i++)
{
for (p = head->next; p->next != NULL; p = p->next)
{
q = p->next;
if ((p->sum) < (q->sum)) //排序
{
*temp = *p;
*p = *q;
*q = *temp;
}
}
}
free(temp);
printf("按总成绩降序排行:\n");
TraverseList(head);
}
```
另外,建议在函数结束时加上 return 语句,虽然这个函数返回类型是 void,在函数结尾加上 `return 0;` 可以让代码更规范。