48

std::getline関数を使用してファイルの終わりを確認するにはどうすればよいですか?使用すると、ファイルの終わりを超えて読み取ろうとするまでeof()通知されません。eof

4

3 に答える 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 に答える