我有一個文件,我只想輸出最後一行到控制檯。使用seekg()從文件末尾搜索char C++
這是我的想法,我該怎麼做。使用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,遠遠超出'\n'
的位置。舉一個文本文件的例子,它會是這個樣子:
垃圾
垃圾
跳過此行
這就是我們要找的就行了!
幾乎所有的觀點都是有效的。但是,我的確從-1開始,因此我開始用下一個字符開始搜索。 – Podo
在來到SO之前,我還會確保在未來諮詢我的橡皮鴨。 – Podo
我必須檢查我的眼睛,對不起。我發誓我在代碼中看到了'joke.seekg(0,ios :: end);',其中有一個很大的零,而不是-1。而且,-1會將文件指針放在文件中的最後一個字符上,而不是最後一個字符的下一個字符。 –