プロが教える店舗&オフィスのセキュリティ対策術

現在ゲームのスコアのセーブ処理を作っています。
そこで

struct score {
int english;
int math;
int physic;
};
struct score tom, judy, tanaka;

などという構造体を作ってセーブファイルを作る場合
の処理を書いたのですが、

FILE *file; //ファイルオープン

file = fopen("save.txt","w+");
fprintf(file,"%d %d %d ", tom.english, tom.math, tom.physic);
fprintf(file,"%d %d %d ", judy.english, judy.math, judy.physic);
fprintf(file,"%d %d %d ", tanaka.english, tanaka.math, tanaka.physic);

fclose(file); //ファイルクローズ

などと同じことを冗長に何度も繰り返して書かねばなりません。
fprintfなどで構造体のメンバー全てを一気に全部書き出すなどというのは可能なのでしょうか?

A 回答 (4件)

数が固定なら


#define SCORE_COUNT3

struct score data[SCORE_COUNT];

fwrite(data, sizeof(struct score), SCORE_COUNT, file);

可変ならmalloc等で領域確保し同じように一括書込み。
    • good
    • 0

環境依存になりますが


fwrite(tom,sizeof(score),1,file);
で書いて
struct score *buf;
buf=(struct score *)malloc(sizeof(score));
fread(buf,sizeof(score),1,file);
じゃだめですか。
    • good
    • 0

#1さんに同意。

あとは可変にするなら配列を使うことも検討した方がいいよ。
    • good
    • 0

同じことを繰り返すのなら関数を作ってしまえば?



void PrintScore(struct score a, FILE *fp){
fprintf(fp,"%d %d %d ", a.english, a.math, a.physic);
}

C++なら出力用のメンバ関数を構造体に入れちゃうとかね
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!