2016-05-05 59 views
0

我不明白爲什麼在達到最後一個單詞後它不輸出空白或空字符或垃圾值或其他任何東西。爲什麼>>完成字符串後沒有任何影響。stringstream的奇怪行爲?

#include <iostream> 
#include <string> 
#include <sstream> 
#include <vector> 
using namespace std; 
int main() 
{ 
    stringstream ss("I am going to goa for"); // Used for breaking words 
    string word; // To store individual words 
    while (ss >> word) 
     cout<<word<<"\n"; 
    ss >> word; 
    cout<<word<<endl; 
    ss >> word; 
    cout<<word<<endl; 
    ss >> word; 
    cout<<word<<endl; 
} 

OUTPUT:

I 
am 
going 
to 
goa 
for 
for 
for 
for 
+0

你的流有一個錯誤標誌設置(這就是爲什麼while循環終止),但你仍然繼續閱讀它。 –

回答

0

cout << word << endl;線之前,您應該添加if(!ss.fail())檢查沒有錯誤發生在下面的讀取嘗試的stringstream的。

1

>>到達字符串的末尾時,失敗位置位並停止進一步讀取。

#include <iostream> 
#include <string> 
#include <sstream> 
#include <vector> 
using namespace std; 
int main() 
{ 
    stringstream ss("I am going to goa for"); // Used for breaking words 
    string word; // To store individual words 
    while (ss >> word) 
     cout<<word<<"\n"; 

    word = "END"; 
    ss >> word; 
    cout<<word<<endl; 
    ss >> word; 
    cout<<word<<endl; 
    ss >> word; 
    cout<<word<<endl; 
} 

您正在看到for,因爲那是存儲在其中的內容。將其更改爲其他內容,您會發現它不會從stringstream讀取,直到failbit被清除。

輸出是:

I 
am 
going 
to 
goa 
for 
END 
END 
END 

參考stringstream瞭解更多詳情。