// 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
なぜこれが起こっているのかわかりません。助けてください。