「実行時間の新しい順」にソートしたいのですが,2017年と2016年の間に2014年が表示されて、上手くいきません。どこが悪いのか分からないので教えてください。
//qsort で構造体のポインタ配列をソートする例 //TIME_DATA型(年,月,日,時,分,秒,秒) //この各要素を指すポインタの配列を用意して、「実行時間の新しい順に」 qsort します。 //jikan_sort-3.c #include <stdio.h> #include <stdlib.h> #include <time.h> #define MAXCNT 100 char dtfile[]="LACKNUM.DAT"; typedef struct // 構造体の宣言 { int tm_year; int tm_mon; int tm_mday; int tm_hour; int tm_min; int tm_sec; double score; }TIME_DATA; int cmp(const void *a1, const void *b1) { long asum, bsum; const TIME_DATA *a = (const TIME_DATA*)a1; const TIME_DATA *b = (const TIME_DATA*)b1; asum = a->tm_year * 10000000000L + a->tm_mon * 100000000L + a->tm_mday * 1000000L + a->tm_hour * 10000L + a->tm_min * 100L + a->tm_sec; bsum = b->tm_year * 10000000000L + b->tm_mon * 100000000L + b->tm_mday * 1000000L + b->tm_hour * 10000L + b->tm_min * 100L + b->tm_sec; if (asum > bsum) return -1; else if (asum < bsum) return 1; return 0; } int main(void) { int i,count,n; FILE *fp; TIME_DATA lst[MAXCNT]; // 構造体の宣言 if((fp=fopen(dtfile, "rb")) == NULL ) { printf( "ファイルがオープンできません\n"); exit( 1 ); } i=count=0; while (fscanf(fp,"%d %d %d %d %d %d %lf" // 構造体配列への読み込み , &lst[i].tm_year,&lst[i].tm_mon,&lst[i].tm_mday, &lst[i].tm_hour,&lst[i].tm_min,&lst[i].tm_sec, &lst[i].score )!= EOF){ i++; count++; } n=count; qsort(lst,n, sizeof(TIME_DATA), cmp); printf("count:%d\n",count); printf( "■並べ替え前\n" ); for(i=0; i<count; i++){ printf("%4d年 %2d月 %2d日 %2d時 %2d分 %2d秒 \n所要時間(score):%.1f\n\n", // 構造体配列への読み出し lst[i].tm_year,lst[i].tm_mon,lst[i].tm_mday, lst[i].tm_hour,lst[i].tm_min,lst[i].tm_sec,lst[i].score); } // 並べ替え qsort(lst, count, sizeof (TIME_DATA), cmp); // 並べ替え後表示 printf( "■並べ替え後\n" ); for(i=0; i<count; i++){ printf("%4d年 %2d月 %2d日 %2d時 %2d分 %2d秒 \n所要時間(score):%.1f\n\n", // 構造体配列への読み出し lst[i].tm_year,lst[i].tm_mon,lst[i].tm_mday, lst[i].tm_hour,lst[i].tm_min,lst[i].tm_sec,lst[i].score); } fclose(fp); printf("count1:%d\n\n", count); return 0; } /* C:\MinGW\users\chap09\kadai>gcc -I. -o jikan_sort-3 jikan_sort-3.c -Wall C:\MinGW\users\chap09\kadai>jikan_sort-3 NDATA:13 C:\MinGW\users\chap09\kadai>jikan_sort-3 count:13 ■並べ替え前 2017年 9月 16日 8時 18分 10秒 所要時間(score):8.6 2017年 9月 14日 10時 21分 18秒 所要時間(score):6.0 ...... ■並べ替え後 2017年 9月 16日 8時 18分 10秒 所要時間(score):8.6 2017年 9月 14日 10時 21分 18秒 所要時間(score):6.0 2017年 9月 6日 8時 18分 9秒 所要時間(score):10.6 2014年 2月 12日 28時 31分 49秒 所要時間(score):13.0 2014年 1月 4日 23時 43分 50秒 所要時間(score):10.2 2016年 8月 7日 22時 31分 52秒 所要時間(score):9.3 2016年 5月 31日 21時 9分 53秒 所要時間(score):7.0 2016年 4月 5日 19時 16分 8秒 所要時間(score):9.0 2016年 2月 28日 2時 27分 20秒 所要時間(score):7.8 ........ count1:13 C:\MinGW\users\chap09\kadai> */
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/09/27 09:12