我有一个文件,我只想输出最后一行到控制台。使用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会将文件指针放在文件中的最后一个字符上,而不是最后一个字符的下一个字符。 –