※ ChatGPTを利用し、要約された質問です(原文:C++のifstreamの使い方)
このQ&Aのポイント
C++のifstreamを使ってファイルを読み込む方法について解説します。
ifstreamを使用してファイルを読み込む際、ファイルの中身が空だとどのような例外処理が行われるのか疑問に思っています。
コードの一部を変更することで、ファイルの中身が存在する場合に正しく動作するようになりますが、その違いについて詳しく教えてください。
C++のifstreamの使い方で分からない所があるので、分かる方御教示ください。
下記は、C++で読み込んだファイルの中身が空だった場合を無理やり例外処理を使って書いてみたのですが、中身が存在する場合、たとえば、
line1
line2
line3
ではline1を無限に繰り返してしまいます。(1)を
ifstream instream = inStream(argv[1]);
while (instream >> input)
にするとうまくいくようなのですが、この違いがよくわかりません。
違いを教えてください。
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
ifstream inStream(char *str);
int main(int argc, char *argv[]) {
if (argc < 2)
cout << "ファイル名を指定してください" << endl;
else {
try {
string input;
while (inStream(argv[1]) >> input) // (1)
cout << input << endl;
}
catch (int i) {
cerr << argv[1] << "を開けません" << endl;
}
}
return 0;
}
ifstream inStream(char *str) {
ifstream inStream(str);
if (!inStream) throw 1;
return inStream;
}
お礼
詳しい説明ありがとうございました。