读书人

c语言库函数 qsort()有有关问题

发布时间: 2012-04-12 15:46:35 作者: rapoo

c语言库函数 qsort(),有问题,求解答!

C/C++ code
#include "stdio.h"#include "algorithm"using namespace std;struct Node{    double cj;//成绩    int xh;//学号};int cmp(const void *a, const void *b)//先按成绩排序,如成绩相同按学号排序(降序){/*    struct Node *c = (Node *)a;    struct Node *d = (Node *)b;    if (c->cj >= d->cj)    {        return 1;    }    else         return -1;*/    return (*(Node *)a).cj > (*(Node *)b).cj ? 1:-1;}int main(){    Node node[5];    int i;    int n;    scanf("%d",&n);    for (i = 0; i < n; i++)    {        scanf("%f%d",&node[i].cj,&node[i].xh);    }    qsort(node,n,sizeof(node[0]),cmp);    for(i = 0; i < n; i++)        printf("cj:%f  xh:%d\n",node[i].cj,node[i].xh);    return 0;}

排序函数int cmp();有问题,排序double型 ,我修改后依然不行,求解答!

[解决办法]
C/C++ code
把%f改成%lf就Ok了#include "stdio.h"#include "algorithm"using namespace std;struct Node{    double cj;//成绩    int xh;//学号};int cmp(const void *a, const void *b)//先按成绩排序,如成绩相同按学号排序(降序){    struct Node *c = (Node *)a;    struct Node *d = (Node *)b;    if (c->cj != d->cj)    {        return c->cj - d->cj;    }    else         return d->xh - c->xh;//    return (*(Node *)a).cj - (*(Node *)b).cj;}int main(){    Node node[5];    int i;    int n;    scanf("%d",&n);    for (i = 0; i < n; i++)    {        scanf("%lf %d",&node[i].cj, &node[i].xh);  //把%f改成%lf就Ok了    }    qsort(node,n,sizeof(node[0]),cmp);    for(i = 0; i < n; i++)        printf("cj:%f  xh:%d\n",node[i].cj,node[i].xh);    return 0;} 

读书人网 >C语言

热点推荐