std::getline
関数を使用してファイルの終わりを確認するにはどうすればよいですか?使用すると、ファイルの終わりを超えて読み取ろうとするまでeof()
通知されません。eof
104090 次
3 に答える
66
C++の正規の読み取りループは次のとおりです。
while (getline(cin, str)) {
}
if (cin.bad()) {
// IO error
} else if (!cin.eof()) {
// format error (not possible with getline but possible with operator>>)
} else {
// format error (not possible with getline but possible with operator>>)
// or end of file (can't make the difference)
}
于 2010-02-12T12:03:59.050 に答える
15
読み取りを行ってから、読み取り操作が成功したことを確認してください。
std::getline(std::cin, str);
if(!std::cin)
{
std::cout << "failure\n";
}
失敗の原因はいくつかある可能性があるため、eof
メンバー関数を使用して、実際に何が起こったのかをEOFで確認できます。
std::getline(std::cin, str);
if(!std::cin)
{
if(std::cin.eof())
std::cout << "EOF\n";
else
std::cout << "other failure\n";
}
getline
よりコンパクトに記述できるようにストリームを返します。
if(!std::getline(std::cin, str))
于 2010-02-12T11:44:41.353 に答える