結果をファイルにちゃんと保存できない
本プログラムは、プログラム(欠けている数字を三回当てるゲーム)の始まりから終了までにかかった時間を関数に引数として渡し、ファイルに保存するプログラムです。
また、二回目以降動作させる場合はかかった時間のベスト10の結果を
表示させます。
その際に使用する関数が下記のかかった時間を二回目以降に表示させるget_data関数とベスト10に入ればファイルに保存するf_hozon関数です。
関数f_hozonは、メインプログラムからの仮引数(double *saikou,int m)→saikouは保存する領域。mは配列saikouの保存する場所です。
ところが、このプログラムを動作させてみたところ
ベスト10までの値が塗り替えられないですし、小数点以下の
桁数が非常に大きい変な値が格納されてしまいます。
また、動作させるたびに変な値が入力されてしまいます。
何がおかしいために、このように動作してしまうのでしょうか?
よろしくお願いいたします。
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<float.h>
#include"getputch.h"
#define swap(type,x,y) do{type t=x;x=y;y=t;}while(0)
char dtfile[] = "LACKNUM.DAT";
double get_data(void)
{
FILE *fp;
double best[10];
int i,j;
if((fp=fopen("dtfile","r"))==NULL)
{
printf("本プログラムを実行するのは初めてですね。\n");
for(j=0;j<10;j++)
{
best[j]=DBL_MAX;
}
}
else
{
printf("これまでのべスト10の得点(所要時間)は");
for(i=0;i<10;i++)
{
fscanf(fp,"%lf",&best[i]);
printf("%d位:%.1f秒\n",i+1,best[i]);
}
}
return *best;
}
void fhozon(double *saikou,int m)
{
FILE *fp;
if((fp=fopen("dtfile","w"))==NULL)
{
printf("エラー発生!!\n");
}
else
{
fprintf(fp," %lf\n",saikou[m]);
fclose(fp);
}
}
int main(void)
{
int vstr[9]={1,2,3,4,5,6,7,8,9};
int hstr[8];
int i,m,retry,x,y;
clock_t start,end;
double jikan;
double saikou[10];
int j,l;
char ch;
srand(time(NULL));
printf("欠けている数字を入力してください。\n");
do{
*saikou=get_data();
start=clock();
for(m=0;m<3;m++)
{
x=rand()%9;
j=0;
for(i=0;i<9;i++)
{
if(i!=x)
{
hstr[j++]=vstr[i];
}
}
for(i=7;i>0;i--)
{
y=rand()%i;
swap(int,hstr[i],hstr[y]);
}
for(i=0;i<8;i++)
{
printf("%d ",hstr[i]);
}
printf(":");
while(1){
ch=getch();
putch(ch);
if(ch!=vstr[x]+'0')
{
printf("\b");
}
else
{
break;
}
}
printf("\n");
}
end=clock();
jikan=(double)(end-start)/CLOCKS_PER_SEC;
printf("%.1f秒かかりました。\n",jikan);
for(l=0;l<10;l++)
{
if(jikan<saikou[l])
{
printf("%d位の得点(所要時間)を更新しました!!\n",l+1);
fhozon(saikou,l);
}
}
printf("もう一度しますか … (0)いいえ(1)はい:");
scanf("%d",&retry);
}while(retry==1);
return 0;
}
お礼
ありがとうございます!これで試してみます。