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 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀