_std::getline
_関数を使用してファイルの終わりを確認するにはどうすればよいですか? eof()
を使用すると、ファイルの終わりを超えて読み取ろうとするまで、eof
に信号を送りません。
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)
}
読んでから、読み取り操作が成功したことを確認します。
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))