ファイルがあり、最後の行のみをコンソールに出力したい。
これが私がそれを行う方法についての私の考えです。file.seekg(0, ios::end)
自分自身をファイルの最後に置くために使用します。
次に、デクリメント変数int decrement = -1;
を作成し、while ループを使用できます。
while (joke.peek() != '\n')
{
decrement--;
}
最後の行の開始位置を取得します (最後から逆行します)。
これを知ってjoke.seekg(decrement, ios::end);
いれば、最終行の先頭に設定する必要があり、以前に宣言したと仮定string input;
すると、
getline(joke, input);
cout << input << endl;
コンソールに出力します。
完全なコード
void displayLastLine(ifstream &joke)
{
string input;
int decrement = -1;
joke.clear();
joke.seekg(0, ios::end);
while (joke.peek() != '\n')
{
decrement--;
}
joke.clear();
joke.seekg(decrement, ios::end);
getline(joke, input);
cout << input << endl;
}
問題は、ファイルに対してこのメソッドを呼び出しても何も起こらないことです。私がそれをステップスルーすると、デクリメントは 1 を減算し続け、a の場所をはるかに超えてい'\n'
ます。テキスト ファイルの例を挙げると、次のようになります。
ジャンク
ごみ
この行をスキップ
これが私たちが探しているラインです!