3

どのような場合に私たちが持つことができるか知りたいです:

bool(std::ifstream) != std::ifstream::good()

違いは、ビットbool(std::ifstream)をテストしないのeofに対し、ビットstd::ifstream::good()をテストすることです。しかし、実際にeofは、ファイルの末尾の後に何かを読み取ろうとすると、ビットが発生します。しかし、これをやろうとするとすぐに、failまたはbadビットも設定されていると思います。

したがって、どのような場合にのみeofビットを上げることができますか?

4

1 に答える 1

0

簡単に言えば、ファイルの後ろを読み取ろうとせずにファイルの終わりに遭遇したときはいつでも。'1' 文字を 1 つだけ含むファイル "one.txt" を考えてみましょう。

フォーマットされていない入力の例:

#include <iostream>
#include <fstream>

int main()
{
    using namespace std;
    char chars[255] = {0};
    ifstream f("one.txt");
    f.getline(chars, 250, 'x');
    cout << f.good() << " != " << bool(f) << endl;
    return 0;
}

0 != 1
続行するには何かキーを押してください。. .

フォーマットされた入力の例:

#include <iostream>
#include <fstream>

int main()
{
    using namespace std;
    ifstream f("one.txt");
    int i; f >> i;
    cout << f.good() << " != " << bool(f) << endl;
    return 0;
}

0 != 1
続行するには何かキーを押してください。. .

于 2013-05-15T09:04:20.500 に答える