Unixtail
関数に類似した非常に小さなプログラムを作成することになっています。提供されたファイルからstd::deque
読み取った行を保存するために使用していstd::getline
ます。前を押して、後ろからはじける。
私の問題は、ファイルにある行よりも多くの行を印刷しようとすると、出力の先頭に余分な空白行が 1 行出力されることです。これがソースコードで、要求された行数が保存されてTParams
いる場所と、現時点では重要でないものがあります...struct
int lncount
using namespace std;
deque<string> dq;
int counter = 0;
for(string line; ! (*infile).eof(); getline(*infile, line)){
dq.push_front(line);
// not needed lines dropped immediately
if(counter++ >= TParams.lncount)
dq.pop_back();
}
int iter = (TParams.lncount > dq.size()) ?
(dq.size() - 1) : (TParams.lncount - 1);
assert(iter < dq.size());
for(iter; iter >= 0; iter--)
cout << dq[iter] << endl;
パラメータに関するコードがいくつかあり-n +num
ますが、それは条件内にあり、このケースには影響しません。
実際には長さゼロの文字列が格納されていることがわかりましたがdq.back()
、ファイルの先頭から読み取られたものであるため、どこから来たのかまったくわかりませんが、通常のテキスト行があります。