我应该编写一个类似于 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()
但我完全不知道它来自哪里,因为它应该是从文件开头读取的字符串,但是有正常的文本行。