我應該編寫一個類似於Unix tail
函數的小程序,我使用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()
中的實際上是零長度的字符串,但我完全不知道它來自哪裏,因爲它應該是從文件開頭讀取的那個,但是存在正常的文本行。
是否顯示您期望的所有行,或者空行會替換文件中的現有行? – giorashc 2012-04-18 15:30:22
是的,有我期望的一切,加上extraline,詹姆斯Kanze找到了問題,謝謝你的評論 – rivfaader 2012-04-18 15:44:03