2014-12-06 46 views
1

我試圖通過逐行閱讀並解析每行使用stringstream來解析文件。下面是我的代碼如果行不是空格終止,stringstream會進入失敗狀態

#include <sstream> 
#include <fstream> 
#include <iostream> 

using namespace std; 

int main() { 
    fstream f("input.txt", ios::in); 
    stringstream ss; 
    string line; 
    while (getline(f, line)) { 
     cout << "Got line `" << line << "'" << endl; 
     ss.str(line); 
     string prefix; 
     ss >> prefix; 
     cout << "Prefix: " << prefix << endl; 
    } 
    return 0; 
} 

的簡化版本在類似input.txt中的情況下(↲用來表示換行符)

a b↲ 
c d↲ 
e f↲ 

一切工作的建議,但對於文件,如

a↲ 
c d↲ 
e f↲ 

stringstream在a↲行之後進入失敗(不確定)狀態。看起來stringstream期望該行被空白終止或類似。當然,我可以手動添加一個空格或換行符。無論如何,我在stringstream手冊中未能找到關於此行爲的任何信息。

所以我的問題是爲什麼會發生這種情況,以及如何正確解決這個問題。

+1

如果沒有更多輸入,您希望流如何處理? – jxh 2014-12-06 17:02:12

+0

哦,所以它僅僅是stringstream的eof。我的壞,非常感謝。 – uranix 2014-12-06 17:04:02

回答

2

當僅有要提取的令牌時,行ss >> prefix達到EOF字符。您必須清除標記ss.clear()

ss.clear(); 
ss.str(line); 
相關問題