有关结构数组qsort的问题编译运行没问题,但是过不去oj,求教。

输入: 多组输入数据对于每组数据,第一个数为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");
    }
}

1个回答

不知道,你放到IDE里运行一下就能看到错误信息了吧

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问