bluecat W 2019-09-08 20:38 采纳率: 100%
浏览 448
已采纳

有关结构数组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条回答 默认 最新

  • JonathanYan 2019-09-08 22:52
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 matlab有关常微分方程的问题求解决
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable