0

次のような関数を使用してファイルを読み取っています。

#include <iostream>
#include <fstream>
#include <string>
...
void readfile(string name){

    string line;
    int p = 0;
    ifstream f(name.c_str());

    while(getline(f,line)){
        p++;
    }
    f.seekg(0);
    cout << p << endl;        

    getline(f,line);
    cout << line << endl;
}

Mi ファイルには 3 行あります。

first
second
third

私は出力を期待していました:

3
first

代わりに私は得る:

3
(nothing)

シークが機能しないのはなぜですか?

4

2 に答える 2

2

seekg()ストリームがファイルの最後に到達した場合 (が設定されている場合) に失敗するため、ループeofbitが原因で発生します。getlinesftrabbit が示すように、呼び出すclear()とそのビットがリセットされ、適切にシークできるようになります。(または、C++11 を使用することもできます。これは、それ自体seekgをクリアeofbitします。)

于 2014-01-14T18:59:31.220 に答える