c言語 qsortについて
Posted: 2014年12月21日(日) 22:20
都道府県の人口増加率を求めて、人口増加率の大きい順に並べ替えるプログラムを作成したいのですが 'double' から 'int' への変換とでて、qsortでうまく並べ替えができません。qsortでdouble型を比較して並べ替えるにはどのようにすればよいのでしょうか?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct KENMEI_DATA
{
char kenmei[100];
int zinkou1;
int zinkou2;
double zoukaritu;
} KENMEI;
int compare(const void *a, const void *b)
{
KENMEI x=*(KENMEI*)a;
KENMEI y=*(KENMEI*)b;
double tmp1=x.zoukaritu;
double tmp2=y.zoukaritu;
return tmp2-tmp1;
}
int main(void)
{
KENMEI data[5]=
{
{"北海道", 5506, 5628, (double)(5506-5628)/5628*100},
{"青森", 1373, 1437, (double)(1373-1437)/1437*100},
{"岩手", 1330, 1385, (double)(1330-1385)/1385*100},
{"宮城", 2348, 2360, (double)(2348-2360)/2360*100},
{"秋田", 1086, 1146, (double)(1086-1146)/1146*100},
};
int i;
qsort(data, 5, sizeof(KENMEI), compare);
for(i=0; i<5; i++)
{
printf("%d, %s, %f%\n", i+1, data[i].kenmei, data[i].zoukaritu);
}
return 0;
}