game-engineer:classes:2025:game-programing-basic:first-term:06-09-010506

under construction …

* ファイルを書き込む4つのステップ

  1. ファイルポインタの用意
  2. ファイルのオープン
  3. ファイルへの書き込み(読み込み)
  4. ファイルのクローズ
実際にやってみよう
  • 授業では、ファイルの書き込みをはじめにやってみた。
  • 次に、文字列の配列(char xxx[][]の形になるやつ)の書き込みをfor文を使って
  • 構造体の配列の読み込みをfor文を使ってやってみた
Listing. 1: ファイルの書き込み
"main.cpp"
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
 
 
//①ファイルポインタの用意
//②ファイルのオープン
//③ファイルへの書き込み(読み込み)
//④ファイルのクローズ
 
 
int main()
{
	struct CHARACTER//構造体の定義(struct XXXX型を宣言)
	{
		char name[11];//名前を格納する配列
		int life;//HP
		int strength;//腕力
		int defence;//防御
		float luck;//運
	};
 
	struct CHARACTER character[5] = 
	{//構造体の配列の初期化
		{ "Hero",     100, 20, 10,  0.1f },
		{ "Cleric",    80, 10, 15,  0.2f },
		{ "Mage",      60, 15,  5,  0.3f },
		{ "D.Knight", 120, 25, 20, 0.05f },
		{ "Thief",     70, 18,  8, 0.25f }
	};
	//name[配列数][文字数+1] = { "勇者", "神官", "魔法使い", "竜騎士" };
	//文字数+1のところは書かないとダメ!
	char name[][9] = { "Hero", "Cleric", "Mage", "D.Knight" };
	FILE* fp;//①ファイルポインタの用意
	int i;
 
	fp = fopen("data.txt", "w");//②ファイルのオープン //wは書き込みモード //rは読み込みモード
 
	fprintf(fp, "Data Writing Test\n");//③ファイルへの書き込み
	//1行に一人の名前を出力するよ
	//for (i = 0;i < 4; i++)
	//{
	//	fprintf(fp, "%s\n", name[i]);//名前を出力
	//}
	for (i = 0;i < 5;i++)
	{
		fprintf(fp, "%s %d %d %d %.2f\n", 
			character[i].name, character[i].life, 
			character[i].strength, character[i].defence, character[i].luck);
	}
 
	fclose(fp);//④ファイルのクローズ
 
	return 0;
}
Listing. 2: ファイルの書き込み
"main.cpp
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
 
int main()
{
	char data[5][9];
 
	FILE* fp;
	fp = fopen("savedata.txt", "r");//読み込みは"r"を指定 Readのr
	if (fp == NULL) { //ヌルポならプログラムから抜ける
		printf("ファイルが開けませんでした。\n");
		return -1;
	}
	for (int i = 0; i < 5; i++)
		fscanf(fp, "%s", data[i]);
 
	fclose(fp); //ファイルを閉じる
 
	printf("パーティ 5人衆\n");
	for (int i = 0; i < 5; i++)
		printf("%s\n", data[i]);
 
	return 0;
}

その他おまけ要素

  • Windowsの文字変換で超高速に絵文字のリストを呼び出す方法(Win+.)
  • 1つのソリューションに複数のプロジェクトをぶら下げて使う方法
    • ソリューション名を右クリックして追加 ⇒ 新しいプロジェクト
    • プロジェクト名を右クリックして「スタートアッププロジェクトに設定」
  • テキストファイルとバイナリファイルのデータ保存の仕方の違い
  • C++とC言語のstructの扱いの違い
    • どちらでも新しい型として認識してくれるようになるよ
    • struct abc {}を宣言すると?
      • C言語では 「struct abc型」として
      • C++では  「abc型」として
      • 利用可能になるよ!
  • game-engineer/classes/2025/game-programing-basic/first-term/06-09-010506.txt
  • 最終更新: 8カ月前
  • by root