// Print the last n lines of a file i.e implement your own tail command
#include <iostream>
#include <fstream>
#include <string>
int main()
{
std::ifstream rd("D:\\BigFile.txt");
int cnt = 0;char c;
std::string data;
rd.seekg(0,rd.end);
int pos=rd.tellg();
while(1)
{
rd.seekg(--pos,std::ios_base::beg);
rd.get(c);
if(c=='\n')
{
cnt++;
// std::cout<<pos<<"\t"<<rd.tellg()<<"\n";
}
if(cnt==10)
break;
}
rd.seekg(pos+1);
while(std::getline(rd,data))
{
std::cout<<data<<"\n";
}
}
因此,我编写了这个程序来打印文本文件的最后 10 行。但是它只打印最后 5 ,由于某种原因,每次遇到实际的 '\n' 时,下一个 get() 也会给出一个 \n 导致不正确的输出。这是我的输入文件:
Hello
Trello
Capello
Morsello
Odello
Othello
HelloTrello
sdasd
qerrttt
mkoilll
qwertyfe
我在 Windows 上使用记事本,这是我的输出:
HelloTrello
sdasd
qerrttt
mkoilll
qwertyfe
我无法弄清楚为什么会这样,请帮忙。