2010-11-20 164 views
2

是否有一個while循環允許我將stringstream的所有值輸入到某種數據類型中?例如:從字符串流中輸入值

stringstream line; 
while(/*there's still stuff in line*/) 
{ 
    string thing; 
    line >> thing; 
    //do stuff with thing 
} 

回答

2

是:

std::stringstream line; 
std::string thing; 
while (line >> thing) 
{ 
    // do stuff with thing 
} 

if (line.fail()) 
{ 
    // an error occurred; handle it as appropriate 
} 

流操作(如>>)返回流;這是什麼讓你連鎖流操作,如:

line >> x >> y >> z 

一個流可以用作布爾;如果數據流處於良好狀態(也就是說,如果數據可以從中讀取),則其評估爲true;否則它評估爲false。這就是爲什麼我們可以使用流作爲循環中的條件。

流有多種原因不會處於良好狀態。

其中之一是當你到達流的末尾(由測試line.eof()指示);顯然,如果你想從流中讀取所有的數據,這是你期望流完成後的狀態。

流不會處於良好狀態的另外兩個原因是,如果某些內部錯誤或流上的操作失敗(例如,如果嘗試提取整數但流中的下一個數據不是代表一個整數)。這兩項都通過line.fail()進行測試。

+0

打我吧,我還在打字! (string thing; line >> thing;){use(thing);'+ 1' – sbi 2010-11-20 21:44:23

+0

' }'如果條件在我們的循環中失敗了,line.fail()將是true;你將不得不打破循環,以保持流暢。小心使用好(這就是爲什麼我認爲),因爲!stream.fail()與stream.good()不相同。 – 2010-11-20 22:06:33