输入: 多组输入数据对于每组数据,第一个数为n(1<=n<=10000),表示共有n名同学,接下来分别为各位同学的姓名(不超过12个字符,没有空格),学号(int范围内),成绩(0<=grade<=100)。接下来一个数m,表示共有m组查询,每行只有一个学号,请输出该同学对应的信息。
输出: 每组查询输出一行,分别为该同学的姓名,学号,成绩(保留两位小数),以及该同学的排名。排名按照降序排列,即成绩高的在前,若成绩相同,则学号小的在前。如果查询的学号没有对应的同学,输出”Only god knows where he is."。请问下程序有什么错误?
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
struct student{
char c[13];
int number;
double grade;
};
//建立结构体存放名字,学号,成绩
void search(int );
int cmp(const void *,const void *);
int main()
{
int n;
while(scanf("%d",&n)!=EOF) {
search(n);
//查找成绩及排名
}
return 0;
}
int cmp(const void *a,const void *b)
{
struct student *x = (student *)a;
struct student *y = (student *)b;
if(abs(x->grade - y->grade)>0.001) return (y->grade - x->grade);
//学号升序
else return (x->number - y->number);
//成绩降序
}
void search(int n)
{
int i,j;
struct student a[n];
for(i = 0;i < n;i++) scanf("%s %d %lf",&a[i].c,&a[i].number,&a[i].grade);
qsort(a,n,sizeof(a[0]),cmp);
//快排
int m,target,flag;
scanf("%d",&m);
while(m--) {
scanf("%d",&target);
//m次查找
flag = 0;
for(i = 0;i < n;i++) {
if(target==a[i].number) {
printf("%s %d %.2f %d",a[i].c,a[i].number,a[i].grade,i+1);
flag = 1;
//找到输出各项信息
break;
}
}
if(!flag) printf("Only god knows where he is.");
//未找到按题意要求输出
printf("\n");
}
}