C応用4 ファイル処理(2)
C応用4 ファイル処理(2)
バイナリファイルの内容は、メモ帳で確認することができません。バイナリファイルの内容を見たい場合は、バイナリエディタと呼ばれる特殊なエディタで、16進数で見るしかありません。
バイナリファイルは、プログラムが扱っているメモリ(メインメモリ)のイメージをそのまま書き込んだり、読み込んだデータのため、プログラムは、非常に簡単に作成できます。バイナリファイルの難しさは、どのデータをどのタイミングで書き込むのかにあります。
先ずは、バイナリファイルの基本を説明します。
・バイナリファイルはオープンのモードにbを追加する
"wb"がバイナリファイルのwriteモードで、"rb"がバイナリファイルのreadモードです。バイナリファイのの入出力は、1バイトずつ入出力するgetc, putc関数か、指定した長さのレコードを指定個数入出力するfread, fwrite関数で行います。
・fread関数とfwrite関数はバイナリファイルしか扱えない
"rb"でオープンしたファイルは、fread関数で入力できます。"wb"でオープンしたファイルは、fwrite関数で出力できます。fread関数やfwrite関数は、構造体配列をファイルに入出力するのに便利です。
・バイナリファイルの入出力は繰返しが不要になる
テキストファイルの入出力では、所定の回数繰返す処理が必要ですが、バイナリファイルでは、入出力する個数を、fread関数やfwrite関数に指定するため、繰返し処理が不要になります。
構造体配列にデータを初期化でセットし、そのデータをバイナリファイルに作成しなさい。プログラムを実行後、バイナリファイルにデータが正しく書き込まれているか、バイナリエディタで確認してみましょう。なお、バイナリファイルにデータを書き込む時、最初の4バイトには、書き込む構造体配列の要素数を、その後ろに、構造体配列を書き込む様にしなさい。
練習問題33で作成したバイナリファイルを動的メモリに読み込んで、その内容を画面に表示しなさい。
練習問題32で作成したバトルゲームで、バトルのコマンドの「逃げる」を選択し、「バトルを続けない」とした時、バトル戦歴をセーブするかどうかを問い合わせ、「セーブ」を選択した時は、バトル戦歴をセーブするようにします。バトル戦歴は、プレイヤー情報と対戦相手情報をバイナリファイルに作成します。ファイル名は、プレイヤー名のファイル名にします。
ゲームでプレイヤー名を入力した時、プレイヤー名に対応したバイナリファイルが存在する場合は、セーブ情報をロードするかどうかを問い合わせ、「ロード」を選択した時は、ファイルに書き込まれた戦歴をバイナリファイルから入力し、中断した状態から再開するようにします。
練習問題35では、コマンドを選択してゲームの中断と再開のプログラムを作成しましたが、ここでは、ゲームを強制終了した場合でも、次にプログラムを起動した時に再開できる様にする方法を説明します。
上記の動画で説明しているゲームの中断と再開を行うプログラムを作成します。左記のYoutube動画の説明の所にダウンロードのURLが記載されいますので、そこからソースファイルをダウンロードしてください。
ゲーム中のデータを、バイナリファイルに出力しておくことで、ゲーム中に強制終了した場合、ゲームを再起動するとゲーム再開できるようになります。
上記で説明した練習問題と同じ問題です。
下記のYoutubeの動画の説明の所にはダウンロードのURLが記載されいます。
main.cppというソースファイルを含むVisual Studio 2022のプロジェクトファイル一式がダウンロードできます。ソースファイルは未完成の状態です。ソリューションファイルからVisual Studioを立ち上げ、プログラムを完成させてください。
《練習問題18》
ファイル出力の実験
《練習問題19》
ファイルの内容表示
《練習問題20》
ファイルの内容を英大文字変換して表示
《練習問題21》
クイズゲーム
《練習問題22》
クイズゲーム(画面出力への切替え)
《練習問題23》
二次元配列にファイル入力して表示する
《練習問題24》
動的メモリに入力して表示する
《練習問題25》
関数化して複数表示する
《練習問題26》
バトルの対戦相手名をファイル入力
《練習問題27》
対戦相手のステータス情報のファイル出力
《練習問題28》
バトル処理の追加
《練習問題29》
自動バトルで勝率を求める
《練習問題30》
勝率の調整
《練習問題31》
プレイヤーを成長させる
《練習問題32》
コマンドでバトルする
《練習問題33》
バイナリファイルの作成
《練習問題34》
バイナリファイルの入力
《練習問題35》
バトルゲームの中断と再開
練習問題24(簡易タイプ)のプログラムの動きを、Visual Studioのデバッグ機能を使って追っていきます。
動的メモリに、どの様に文字ポインタ配列と文字列をセットしていくのか、データが変化していく様子を見ていきます。また、練習問題24のプログラムは、EOFが行頭にないと、最後の行が表示できない問題を抱えています。この修正方法についても説明します。
《練習問題25》を例にVisual Studioが入っていないパソコンでもプログラム実行できるようにするための方法を説明します。
Visual Studioが入っていないパソコンでもプログラムが実行できるようにするには、プログラムのビルドに気を付けなければなりません。
ビルドには、スタティックリンクとダイナミックリンクという、2種類の実行ファイルの作成方法があり、Visuasl Studioが入っていないパソコンでも実行できるようにするためには、スタティックリンクでビルドしなければなりません。
テスト実施フォーム ← テストチャレンジできます
上記テストの解説と解答