2017-01-13 49 views
0

我想了解C++中stringstream的細節。但是當我嘗試重新輸入stringstream對象時(「< <」),我發現了一個麻煩。 (即obj的內容仍然保持不變)。我的代碼如下。輸出顯示在評論中。C++:爲什麼重新輸入stringstream不起作用?內容保持不變

#include <iostream> 
#include <string> 
#include <sstream> 

using namespace std; 

int main() 
{ 
    stringstream sso; 
    cout <<"orginal: " << sso.str() <<endl; //orginal:"empty" 
    sso << "A" << " " << "B" << " " << "C"; 
    cout <<"flowin:" << sso.str() <<endl; //flowin:A B C 

    string r1, r2, r3; 
    sso >> r1 >> r2 >> r3; 
    cout << "flowout:" << r1 << r2 << r3 << endl;//flowout:ABC 
    cout << "base: " << sso.str() << endl; //base: A B C 

    cout << "----problem here-----" << endl; 
    sso << "D" << " " << "E" << " " << "F"; 
    cout <<"flowin:" << sso.str() <<endl; //flowin:A B C 

    cout << "----this works-----" << endl; 
    sso.clear(); //clear flag 
    sso.str(""); //clear content 
    sso << "D" << " " << "E" << " " << "F"; 
    cout <<"flowin:" << sso.str() <<endl; //flowin:D E F 

    return 0; 
} 

爲什麼?我不明白「---這裏---問題---」的結果。爲什麼sso不接受新的輸入?

Apprecited,

回答

0

sso >> r1 >> r2 >> r3;最後讀取的將流進,因爲沒有更多的字符是可用的,同時它仍在努力爲r3更多字符失效狀態。

在失敗狀態下,流無法寫入或讀取。要解決您的問題,請將sso.clear();移至sso << "D"之前。

如果您在C之後輸出額外空間,您可以看到不同的行爲,因爲流未進入失敗狀態(它在流中仍存在空間時成功讀取r3)。

+0

非常感謝。 :) –