では、前回保存したファイルからデータをロードするプログラムを作りましょう。
新しくプロジェクトを作った方は「Save.txt」をコピーすることを忘れないようにしておいてください。
読み込んだデータは、書き込んだ時と同じ構造体に格納しますので、まずは構造体を準備します。
<sample program 113-01>
#include <stdio.h> #define NAME_MAX 20 #define PARTY_MAX 4 typedef struct { char name[NAME_MAX]; int hp; int mp; } Player; int main(void) { Player player[PARTY_MAX]; return 0; } |
前回と同じく、ここからすべきことを書きます。
追加すべきプログラムは↓の通りです。
ファイルポインタを用意する ファイルを開く エラーチェックを行う 4人分のデータを読み込む ファイルを閉じる データが読み込まれているかどうか表示してみる |
「4人分のデータを読み込む」以外の箇所から作ってみましょう。
<sample program 113-02>
#include <stdio.h>
#define NAME_MAX 20
#define PARTY_MAX 4
typedef struct
{
char name[NAME_MAX];
int hp;
int mp;
} Player;
int main(void)
{
Player player[PARTY_MAX];
int i;
FILE* fp;
fp = fopen("Save.txt", "r");
if (fp == NULL) {
printf("OPEN ERROR\n");
return 1;
}
/* データを読み込む場所 */
fclose(fp);
for (i = 0; i < PARTY_MAX; i++) {
printf("%s ", player[i].name);
printf("%d ", player[i].hp);
printf("%d\n", player[i].mp);
}
return 0;
}
|
今回は「データを読み込む」ので、モードは「"r"」です。
それでは、データを読み込むプログラムを作ります。
<sample program 113-03>
#include <stdio.h>
#define NAME_MAX 20
#define PARTY_MAX 4
typedef struct
{
char name[NAME_MAX];
int hp;
int mp;
} Player;
int main(void)
{
Player player[PARTY_MAX];
int i;
FILE* fp;
fp = fopen("Save.txt", "r");
if (fp == NULL) {
printf("OPEN ERROR\n");
return 1;
}
/* データを読み込む場所 */
for (i = 0; i < PARTY_MAX; i++) {
fscanf(fp, "%s", player[i].name);
fscanf(fp, "%d", &player[i].hp);
fscanf(fp, "%d", &player[i].mp);
}
fclose(fp);
for (i = 0; i < PARTY_MAX; i++) {
printf("%s ", player[i].name);
printf("%d ", player[i].hp);
printf("%d\n", player[i].mp);
}
return 0;
}
|
<実行結果>
player1 173 57 player2 147 61 player3 184 71 player4 168 53 続行するには何かキーを押してください・・・
これで、データのロードが出来ました。
ゲームのハイスコアやランキングなども保存できるようになりましたので、これまでに作成したものがあれば自分で追加してみてください。