問題CPP00702の解答例と解説 C++ Lv.2

テキストファイルの1行目の読み取り(30分)



<解答例 1>
F11キーでフルスクリーンモード、Escキーで元に戻ります。

これは問題文にあるコードそのままだよ。9行目は、ifsのコンストラクタがファイルパスの文字列のポインタを引数としているので、filePath をそのまま渡すのではなく、c_str() メンバ関数を呼び出して、文字列のポインタを取得しているよ。


<解答例 2>
F11キーでフルスクリーンモード、Escキーで元に戻ります。

ファイルの開き方や開けているかの確認の仕方を解答例1と変えてみたよ。どちらでも同じだよ。

getline 関数は、今度は istream のメンバ変数の istream::getline を使ってみたよ。解答例1のgetlineは、標準ライブラリのgetline で、正確にいうと、std::getline。2つとも同じ関数名だから、紛らわしいね。std::getline の方は、引数に std::string を指定できるからファイルの文字列の長さを気にする必要はないんだけど、istream::getline の方は文字列の長さを指定する必要があるよ。


<解答例 3>
F11キーでフルスクリーンモード、Escキーで元に戻ります。

こちらは、C言語の標準ライブラリを使って書いた場合だよ。C++の時に比べて、少し、プログラマが注意しなければいけないことが少し多いね。例えば、6行目のfopen では、2番目の引数を間違えただけ("w"とか)で、ファイルの中身を初期化して開くこともできてしまうよ。

そのほか、解答例3の場合は、開いたファイルを20行目のように閉じてあげる必要があるんだ。解答例1と2の場合はifstream のデストラクタで閉じるようになっているので、スタックメモリ上で使用している分には、プログラマは必ずしも注意しなくても自動的に閉じてくれるんだ。

ファイルを開いたり閉じたりするのはどういうことかというと、例えば誰かが共有フォルダにある何かのファイル(例えばMicrosoft Excel)を開いている間は、他のユーザはそのファイルは開くことはできても書き込みしたり、ファイルを削除することはできないことがあるよね。複数の人が同時に1つのファイルを編集するには、特別な制御(排他制御)をする必要があるんだけど、このC++のプログラムでのファイルのオープンはもっと低レベルな処理なので、そこまでしてないよ。だから一番最初にファイルを開いた人は終了時にファイルを閉じる必要があるんだ。ファイルが閉じられたら、OSはそのファイルが解放されたことがわかって、他の人が書き換えたり、削除したりできるようになるんだ。だからプログラマはファイルのクローズを忘れてはいけないんだよ。







初めての方へ:このページは、このサイトで用意しているプログラミング問題の解答と解説のページです。このサイトではブラウザ上からプログラミングができます。会員登録(無料)して、プログラミングしてみませんか?
新規登録



ログイン
メールアドレス:

パスワード:



パスワード紛失

新規登録