この履歴を時間の短い順にクイックソートしたいのですが大体昇順(10個表示)になっているのですが、うまくいきません。 下にコードと実行結果を示してあります。よろしくお願いいたします。 コード/* ラックナンバーサーチ・トレーニング(最近の10回の日時)*/ #include <stdio.h> #include <time.h> #include <float.h> #include <ctype.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> #include "getputch.h" #define MAX_STAGE 3 #define swap(type, x, y) do { type t = x; x = y; y = t; } while (0) #define MAX_NUM 10 char dtfile[] = "LACKNUM.DAT"; char dtfile2[] = "LACKNUM2.DAT";/* 最高記録用のファイル */ typedef struct { int tm_year; int tm_mon; int tm_mday; int tm_hour; int tm_min; int tm_sec; double score; } BEST_TEN; // --------------- 比較用の関数 cmp ------------------- int cmpptr( const void *p, const void *q ) { return (*(BEST_TEN**)p)->score - (*(BEST_TEN**)q)->score; } // ---------------------------------------------------- /*--- 過去のトレーニング情報を取得・表示して最高得点を返す ---*/ double get_data(int *count) { FILE *fp; /* これまでの履歴を指すポインタ */ FILE *fp2; /* これまでの最短所要時間を指すポインタ */ double score; //これまでの履歴の所要時間 double bestscore; //これまでの最短所要時間 int i,j=0; BEST_TEN best_ten[100]={0}; if ((fp = fopen(dtfile, "rb")) == NULL) { printf("ファイルを作成します。\n\n"); bestscore = DBL_MAX; /* float.hに定義されている。double型で表現できる最大値を表すマクロDBL_MAX */ } else { struct tm local; double line[256]; printf("\n過去の履歴\n-------------------------- \n"); while((i = fread(&local, sizeof(struct tm), 1, fp)) > 0 ){ printf("%d年 %d月 %d日 %d時 %d分 %d秒\n", local.tm_year + 1900, local.tm_mon + 1, local.tm_mday, local.tm_hour, local.tm_min, local.tm_sec); fread(&score, sizeof(double), 1, fp); printf("得点(所要時間)は%.1f秒\n\n", score); best_ten[j].tm_year=local.tm_year; best_ten[j].tm_mon=local.tm_mon; best_ten[j].tm_mday=local.tm_mday; best_ten[j].tm_hour=local.tm_hour; best_ten[j].tm_min=local.tm_min; best_ten[j].tm_sec=local.tm_sec; best_ten[j].score=score; j++; (*count)++; } printf("count1は%d\n\n", *count); } BEST_TEN *plst[*count]; for( i = 0; i < *count; i++ ) plst[i] = &best_ten[i]; //qsort(配列名, 配列の数, 配列一つのバイト数, 比較関数) qsort( plst, *count, sizeof(BEST_TEN*), cmpptr ); printf("\n過去のbestten\n-------------------------- \n"); // 並べ替え後の内容を表示 for(i=0;i<10;i++){ printf( "%d年 %d月 %d日 %d時 %d分 %d秒 \n" ,plst[i]->tm_year+1900, plst[i]->tm_mon+1, plst[i]->tm_mday, plst[i]->tm_hour,plst[i]->tm_min,plst[i]->tm_sec ); printf("得点(所要時間)は %.1f秒です。\n\n", plst[i]->score); } bestscore=plst[0]->score; fflush(stdout); fclose(fp); printf("count2は%d\n\n", *count); return bestscore; } int main(void) { int count=0; // double score; // 今回の所要時間 double bestscore; // 最短所要時間 double jikan; // 時間 FILE *fp; struct tm local ; int k; int i, j, x, stage; bestscore= get_data(&count); // get_data()で前回までの最短所要時間を // ファイルから読み込んでbestscoreに代入する。 printf("bestscoreは%.1f\n\n", bestscore); printf("count3は%d\n\n", count); return 0; } /* C:\MinGW\users\chap09\kadai>gcc -I. -o kadai9-1-5 kadai9-1-5.c pdcurs es.a C:\MinGW\users\chap09\kadai>kadai9-1-5 過去の履歴 -------------------------- 2015年 10月 27日 19時 9分 59秒 得点(所要時間)は11.0秒 2016年 1月 4日 19時 15分 11秒 得点(所要時間)は8.0秒 2016年 1月 4日 19時 16分 8秒 得点(所要時間)は9.0秒 2016年 1月 4日 19時 16分 39秒 得点(所要時間)は10.0秒 2016年 1月 4日 19時 19分 7秒 得点(所要時間)は10.0秒 2016年 1月 4日 19時 21分 11秒 得点(所要時間)は10.0秒 2016年 1月 4日 19時 21分 44秒 得点(所要時間)は8.0秒 2016年 1月 4日 19時 22分 55秒 得点(所要時間)は13.0秒 2016年 1月 5日 21時 31分 52秒 得点(所要時間)は12.0秒 2016年 1月 5日 21時 33分 29秒 得点(所要時間)は10.0秒 2016年 1月 31日 20時 41分 8秒 得点(所要時間)は10.0秒 2016年 1月 31日 21時 9分 59秒 得点(所要時間)は17.0秒 2016年 1月 31日 21時 12分 13秒 得点(所要時間)は8.0秒 2016年 1月 31日 21時 41分 42秒 得点(所要時間)は9.0秒 2016年 2月 2日 8時 39分 50秒 得点(所要時間)は13.0秒 2016年 2月 2日 8時 49分 31秒 得点(所要時間)は13.0秒 2016年 2月 2日 8時 58分 15秒 得点(所要時間)は13.0秒 2016年 2月 27日 8時 28分 42秒 得点(所要時間)は14.0秒 2016年 3月 27日 12時 47分 52秒 得点(所要時間)は8.0秒 2016年 3月 27日 12時 52分 31秒 得点(所要時間)は11.0秒 2016年 3月 27日 12時 54分 35秒 得点(所要時間)は9.0秒 2016年 3月 27日 13時 5分 4秒 得点(所要時間)は9.0秒 2016年 3月 27日 13時 15分 12秒 得点(所要時間)は13.0秒 2016年 5月 2日 15時 54分 51秒 得点(所要時間)は16.0秒 2016年 5月 2日 15時 57分 18秒 得点(所要時間)は9.0秒 2016年 5月 2日 16時 24分 25秒 得点(所要時間)は14.0秒 2016年 5月 2日 16時 40分 31秒 得点(所要時間)は16.0秒 2016年 5月 2日 16時 42分 52秒 得点(所要時間)は11.0秒 2016年 5月 2日 16時 43分 30秒 得点(所要時間)は12.0秒 2016年 5月 2日 16時 44分 14秒 得点(所要時間)は12.0秒 2016年 5月 2日 17時 0分 48秒 得点(所要時間)は7.0秒 2017年 8月 14日 16時 36分 8秒 得点(所要時間)は12.0秒 2017年 8月 14日 20時 57分 13秒 得点(所要時間)は10.0秒 2017年 8月 14日 20時 57分 40秒 得点(所要時間)は6.0秒 2017年 8月 14日 21時 3分 21秒 得点(所要時間)は13.0秒 2017年 8月 14日 21時 7分 3秒 得点(所要時間)は11.0秒 2017年 8月 14日 21時 23分 16秒 得点(所要時間)は13.0秒 2017年 8月 14日 22時 11分 55秒 得点(所要時間)は11.0秒 2017年 8月 14日 22時 16分 22秒 得点(所要時間)は8.0秒 2017年 9月 9日 10時 20分 15秒 得点(所要時間)は12.0秒 2017年 9月 9日 10時 25分 1秒 得点(所要時間)は13.0秒 2017年 9月 9日 10時 57分 21秒 得点(所要時間)は12.0秒 2017年 9月 9日 11時 3分 6秒 得点(所要時間)は16.0秒 2017年 9月 9日 11時 10分 34秒 得点(所要時間)は24.0秒 2017年 9月 9日 11時 11分 18秒 得点(所要時間)は28.0秒 2017年 9月 9日 11時 17分 44秒 得点(所要時間)は15.0秒 2017年 9月 9日 11時 22分 20秒 得点(所要時間)は9.0秒 2017年 9月 9日 11時 27分 33秒 得点(所要時間)は12.0秒 2017年 9月 9日 11時 28分 59秒 得点(所要時間)は8.0秒 2017年 9月 9日 12時 0分 59秒 得点(所要時間)は13.3秒 2017年 9月 9日 12時 3分 5秒 得点(所要時間)は6.1秒 2017年 9月 9日 12時 3分 29秒 得点(所要時間)は11.0秒 2017年 9月 9日 12時 4分 2秒 得点(所要時間)は7.5秒 2017年 9月 9日 12時 7分 46秒 得点(所要時間)は22.0秒 2017年 9月 9日 12時 9分 56秒 得点(所要時間)は11.0秒 2017年 9月 9日 12時 14分 36秒 得点(所要時間)は6.2秒 2017年 9月 9日 12時 38分 12秒 得点(所要時間)は8.0秒 2017年 9月 9日 12時 39分 12秒 得点(所要時間)は21.0秒 2017年 9月 10日 12時 48分 1秒 得点(所要時間)は15.0秒 2017年 9月 10日 16時 9分 3秒 得点(所要時間)は11.0秒 2017年 9月 10日 16時 13分 40秒 得点(所要時間)は13.0秒 2017年 9月 10日 16時 15分 25秒 得点(所要時間)は10.0秒 2017年 9月 10日 16時 16分 4秒 得点(所要時間)は22.0秒 2017年 9月 10日 16時 18分 14秒 得点(所要時間)は15.0秒 2017年 9月 10日 16時 19分 27秒 得点(所要時間)は9.0秒 2017年 9月 10日 16時 19分 47秒 得点(所要時間)は9.0秒 count1は66 過去のbestten -------------------------- 2017年 8月 14日 20時 57分 40秒 得点(所要時間)は 6.0秒です。 2017年 9月 9日 12時 14分 36秒 得点(所要時間)は 6.2秒です。 2016年 5月 2日 17時 0分 48秒 得点(所要時間)は 7.0秒です。 2017年 9月 9日 12時 3分 5秒 得点(所要時間)は 6.1秒です。 2016年 1月 4日 19時 15分 11秒 得点(所要時間)は 8.0秒です。 2016年 1月 4日 19時 21分 44秒 得点(所要時間)は 8.0秒です。 2017年 9月 9日 12時 4分 2秒 得点(所要時間)は 7.5秒です。 2017年 9月 9日 12時 38分 12秒 得点(所要時間)は 8.0秒です。 2016年 1月 31日 21時 12分 13秒 得点(所要時間)は 8.0秒です。 2017年 9月 9日 11時 28分 59秒 得点(所要時間)は 8.0秒です。 count2は66 bestscoreは6.0 count3は66 C:\MinGW\users\chap09\kadai> */
質問タグにて言語を指定されたほうが回答を得やすいと思います。
すみません。このコーナーの使い方がいまいちわかりません。質問文を送る時、タグ欄はどうすればいいかよくわからないし、”ここに言語を記入”というところはどこに何を書けばいいのですか、c言語をつかっていますがそれを書くってことですか?質問の内容はここにかいていいのですか?教えてください。
回答1件
あなたの回答
tips
プレビュー