#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
struct STU{
char name[10+1];
int num;
int time;
};
int main(){
int C, N;
while( scanf("%d", &C) != EOF ){
while( C-- ){
scanf("%d", &N);
STU res = {"", -1, 100001};
STU t;
while( N-- ){
scanf("%s %d %d", t.name, &t.num, &t.time);
if( t.num > res.num )
res = t;
else if( t.num==res.num && t.time<res.time ){
res = t;
}
}
printf("%s %d %d\n", t.name, t.num, t.time);
}
}
return 0;
}
1
原因是少比较一次, while(N--)应改为do while(N --), 或者 while(N){ 比较程序, N--};
N为学生数目,假设N为4, 按照当前的逻辑,第一次比较前 N=3,第二次 N=2,第三次 N=1,第四次直接退出循环了。所以是计数位置的位置。
STU res = {"", -1, 100001};
这个要写在循环外面。
否则结果始终是最后一个,而你碰巧最后一个就是要找的,掩盖了错误。
问题就出在最后打印的结构体
你每次循环都把成绩好的学生放在了res结构体中
但是最后输出的却是t的结构体数据
过程没有错误
结果打印出了问题
希望采纳不明白继续追问