你可以试试while 直到n为空时
供参考:
#include <stdio.h>
#include <string.h>
typedef struct student {
char name[11];
int score1, score2, score3;
float avg;
}Stu;
void input(Stu*, int);
void sort(Stu*, int);
void print(Stu*, int);
int main()
{
Stu stu[100];
int n;
while (scanf("%d", &n) == 1 && n != 0) { // 输入 0 ,结束
input(stu, n);
sort(stu, n);
print(stu, n);
}
return 0;
}
void input(Stu* a, int n)
{
int i;
for (i = 0; i < n; i++)
{
scanf("%s%d%d%d", a[i].name, &a[i].score1, &a[i].score2, &a[i].score3);
a[i].avg = (a[i].score1 + a[i].score2 + a[i].score3) / 3.0;
}
}
void sort(Stu* a, int n)
{
int i, j;
Stu tmp;
for (i = n - 1; i > 0; i--) {
for (j = 0; j < i; j++) {
if (a[j].avg < a[j + 1].avg ||
a[j].avg == a[j + 1].avg && strcmp(a[j].name, a[j + 1].name)>0)
tmp = a[j], a[j] = a[j + 1], a[j + 1] = tmp;
}
}
}
void print(Stu* a, int n)
{
int i;
for (i = 0; i < n; i++)
printf(i ? "\n%s %d %d %d %.2f" : "%s %d %d %d %.2f",
a[i].name, a[i].score1, a[i].score2, a[i].score3, a[i].avg);
}