• ベストアンサー

構造体とファイル入出力について(C言語)

現在ゲームのスコアのセーブ処理を作っています。 そこで 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などで構造体のメンバー全てを一気に全部書き出すなどというのは可能なのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • GOGOV
  • ベストアンサー率54% (12/22)
回答No.4

数が固定なら #define SCORE_COUNT 3 struct score data[SCORE_COUNT]; fwrite(data, sizeof(struct score), SCORE_COUNT, file); 可変ならmalloc等で領域確保し同じように一括書込み。

その他の回答 (3)

  • MASA_H
  • ベストアンサー率42% (64/151)
回答No.3

環境依存になりますが fwrite(tom,sizeof(score),1,file); で書いて struct score *buf; buf=(struct score *)malloc(sizeof(score)); fread(buf,sizeof(score),1,file); じゃだめですか。

  • phoenix343
  • ベストアンサー率15% (296/1946)
回答No.2

#1さんに同意。あとは可変にするなら配列を使うことも検討した方がいいよ。

  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.1

同じことを繰り返すのなら関数を作ってしまえば? void PrintScore(struct score a, FILE *fp){ fprintf(fp,"%d %d %d ", a.english, a.math, a.physic); } C++なら出力用のメンバ関数を構造体に入れちゃうとかね

関連するQ&A