ファイル読み込み

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
luc
記事: 32
登録日時: 10年前

ファイル読み込み

#1

投稿記事 by luc » 9年前

win32API,C++を使用。タイムランキングを作成しております。
流れは現在 タイトル→ゲーム開始→ゲームクリア→タイムランキングの表示→タイトルとループになっています。
プログラムを落とさないでゲームを続けるとタイムランキングは正常に表示されるのですが、一旦プログラムを落として起動するとタイムランキングの値がおかしくなってしまいます。
1位が1秒
2位が0秒
3位が0秒
というふうになってしまいます。

Ranking_Load()をwinmainのウィンドウ生成時に呼び出し、
Ranking_saveはゲームクリア画面で呼び出しています。

Ranking.h

コード:

#include <stdio.h>
#include <windows.h>

extern int r_time[5];   //ランキングのタイム
extern int now_time[5];  //現在プレイしているタイム
static char FileName[] = "Ranking.txt";  //ランキングテキスト
void Ranking_Load();
void Ranking_save();

Ranking.cpp

コード:


void Ranking_Load()  //ランキング読み込み
{
	FILE *fp;
	int i, j, tmp;

	if ((fp = fopen(FileName, "r")) == NULL){
		for (i = 0; i < 3; i++){
			r_time[i] = 999;
		}
	}else{
		for (i = 0; i < 3; i++){
			fscanf(fp, "%d", &r_time[i]);	//読み込み
		}
		fclose(fp);
	}
	return;
}



void Ranking_save()  //ランキング保存
{
	FILE *fp;
	TCHAR mes[80];
	int i,tmp,tmp2;

	if ((fp = fopen(FileName, "w")) == NULL)
	{
		wsprintf(mes, TEXT("データファイルのオープンに失敗しました。保存を中止しました。\n"));
		OutputDebugString(mes);
		return;
	}

						
		if (r_time[0] > S_time){		//ランキング1位より現在プレイしてる人のほうが早ければ
			tmp = r_time[0];
			r_time[0] = S_time;		//現在の1位を上書き
			tmp2 = r_time[1];
			r_time[1] = tmp;		//ランキング1位の人を2位に下げる	
			r_time[2] = tmp2;		//ランキング2位の人を3位に下げる
		}

		else if (r_time[1] > S_time && S_time >r_time[0]){	//ランキング2位より現在プレイしてる人のほうが高ければ
			tmp = r_time[1];
			r_time[1] = S_time;
			r_time[2] = tmp;
		}

		else if (r_time[2] > S_time && S_time >r_time[1]){		
			r_time[2] = S_time;
		}
			fprintf(fp, "1位 %d秒\n", r_time[0]);
			fprintf(fp, "2位 %d秒\n", r_time[1]);
			fprintf(fp, "3位 %d秒\n", r_time[2]);
	fclose(fp);
}

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: ファイル読み込み

#2

投稿記事 by みけCAT » 9年前

luc さんが書きました:1位が1秒
2位が0秒
3位が0秒
というふうになってしまいます。
ファイル中のゴミを読み飛ばす処理が入っていないからですね。
テストはしていませんが、読み込み処理(Ranking_Load)で使われている"%d"を"%*s%d%*s"に変えて、「[1-3]位」と「秒」を読み飛ばすようにしてみてください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

luc
記事: 32
登録日時: 10年前

Re: ファイル読み込み

#3

投稿記事 by luc » 9年前

すいません上の文、修正します。
一回目のゲームクリアは正常に値が入ってます。30秒でクリアした場合
1位 30秒
2位 999秒
3位 999秒
ですがゲームを落として、もう一度クリアすると
1位 1秒
2位 0秒
3位 0秒
となってしまいます。
ゲームを落とさないでもう一度プレイをすると40秒でクリアした場合
1位 30秒
2位 40秒
3位 999秒
と正常に表示されます。
%*s%d%*sに変えてみましたが、最初にクリアした時でも
1位1秒
2位0秒
3位0秒
となってしまいました。

luc
記事: 32
登録日時: 10年前

Re: ファイル読み込み

#4

投稿記事 by luc » 9年前

すいません。解決しました。mainのロードとセーブを読み込むの位置を間違えてました

閉鎖

“C言語何でも質問掲示板” へ戻る