2018年03月18日
《その338》 問題演習 p.443演習12-1
新版明解C++中級編 p.443 演習12-1
次のプログラムでは、名前が filename であるファイルが存在するかどうかを判定している。
ifstream fis(filename);
として、ファイル filename を入力ストリームとしてオープン。
次いで、このオープンに成功したか否かの判断を、
ifstreamクラスのメンバ関数 is_open を用いて行っている。
return fis.is_open(); ★
この ★印のコードを、
【1】 return !fis.fail;
および、
【2】 return fis;
に置きかえたプログラムを作成して、動作を検証せよ。
※メンバ関数 is_open は、オープンの成否を bool型の真偽値で返却する。
※メンバ関数 fail は、failbit が立っているかどうかを調べる(ストリームに対する各種の操作に失敗した場合に、ストリーム内部で failbit というフラグが立つことになっている)。
#include <string>
#include <fstream>
#include <iostream>
using namespace std;
// ファイルが存在するか否かを判定
bool file_exist(const char* filename) {
ifstream fis(filename);
return fis.is_open();
}
int main() {
string file_name;
cout << "ファイル名 : ";
cin >> file_name;
cout << "そのファイルは存在"
<< (file_exist(file_name.c_str()) ?
"します。\n" : "しません。\n");
}
// 解答
// 【1】
#include <string>
#include <fstream>
#include <iostream>
using namespace std;
bool file_exist(const char* filename) {
ifstream fis(filename);
return !fis.fail();
}
int main() {
string file_name;
cout << "ファイル名 : ";
cin >> file_name;
cout << "そのファイルは存在"
<< (file_exist(file_name.c_str()) ?
"します。\n" : "しません。\n");
}
// ------------------------------------------
// 【2】
#include <string>
#include <fstream>
#include <iostream>
using namespace std;
ifstream& file_exist(const char* filename) {
ifstream fis(filename);
return fis;
}
int main() {
string file_name;
cout << "ファイル名 : ";
cin >> file_name;
cout << "そのファイルは存在"
<< (file_exist(file_name.c_str()) ?
"します。\n" : "しません。\n");
}
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/7449446
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック