こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

-広告-

締切り済みの質問

c言語プログラミング ラックナンバーサーチ

実行時間の短い順に表示するプログラムを作成したいのですが、いろいろネットで検索して試みているのですが、なかなかできません。3ヶ月ほどかかっています。以下のコードを参考にしてどうすればいいか、ご教授してください。頭がこんがらがってなにがなんだかわかりません。
これは新明解C言語9章自由課題9-1の中の問題で、最近の10回を表示するプログラムの作成には
成功しましたが、ベストテンを表示する問題がなかなかうまくいきません。
本来最近の10回を表示するプログラムを添付すると、内容がはっきりするのですが、文字数の関係で載せられません。

/* ラックナンバーサーチ・トレーニング(最近の10回の日時・最高得点を表示)*/
#include <std最近の10回を表示するプログラムio.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_STAGE3
#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";/* 最高記録用のファイル */
double score2;


// 実行時間の短い順に並べて表示する。
int bestten(double best,double p_score)
{
FILE *fp; // これまでの履歴を指すポインタ
double past_score;
int i,N;
struct tm local;


if ((fp = fopen(dtfile, "rb")) == NULL) {
printf("ファイルを作成します。\n\n");
best = DBL_MAX; /* float.hに定義されている。double型で表現できる最大値を表すマクロDBL_MAX */
} else {
while((i = fread(&local, sizeof(struct tm), 1, fp)) > 0 ){

fread(&best, sizeof(double), 1, fp);
past_score=best;
printf("過去の実行時間 %d\n\n",past_score);


// 比較関数を使って短い順に挿入する。あるいはdtfile[]を並べ替える

/* float型のソート */
qsort(best,N,sizeof(float),float_cmp);
for(i = 0; i < N; i++)
printf("%0.1f ",best[i]);

/* float型の比較 */
int float_cmp(const void *arg0, const void *arg1){
float past_score = *(float*)arg0;
float best = *(float*)arg1;
if(past_score == best) return 0;
else if(past_score > best) return 1;
else return -1;

}
}
}

if((fp = fopen(dtfile, "rb")) == NULL){
printf("\aファイルをオープンできません。\n");
}else{
while((i = fread(dtfile, 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(&best, sizeof(double), 1, fp);
printf("得点(所要時間)は%.1f秒\n\n", best);
}

}
fclose(fp);

}

int main(void)
{
int retry;/* もう一度? */
double score;/* 今回の所要時間 */
double best;/* 最短所要時間 */

best = get_data();// get_data()で前回までの最短所要時間を
// ファイルから読み込んでbestに代入する。

init_getputch();

srand(time(NULL));/* 乱数の種を初期化 */
do {
score = go();// トレーニング(go)で実行、返却された所要時間(jika)をscoreに代入する。

if (score < best) {
printf("最短所要時間を更新しました!!\n");
best = score;/* 最高得点更新 */
}

printf("もう一度しますか … (0)いいえ (1)はい:");
scanf("%d", &retry);
} while (retry == 1);

put_data(score,best);/* 今回の日付・時刻・得点を書き込む */

term_getputch();

return 0;

}

投稿日時 - 2015-12-24 08:57:46

QNo.9100522

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(1)

ANo.1

自分が何をしたいのか、何をしようとしているのかを理解しない限り、問題を解決することはできません。
今までに書いたプログラムのことは忘れて、以下の質問に答えてみてください。
1. このプログラムの入力は何か?
2. このプログラムの出力は何か?

投稿日時 - 2015-12-28 01:26:06

-広告-
-広告-
-広告-
-広告-
-広告-