私の cpp プログラムは、文字列ストリームを使用すると、スコーピングに関して奇妙なことをしています。文字列と文字列ストリームの初期化を使用する場所と同じブロックに配置すると、問題はありません。しかし、1ブロック上に配置すると、文字列ストリームは文字列を正しく出力しません
正しい動作である場合、プログラムは空白で区切られた各トークンを出力します。
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main () {
while (true){
//SAME BLOCK
stringstream line;
string commentOrLine;
string almostToken;
getline(cin,commentOrLine);
if (!cin.good()) {
break;
}
line << commentOrLine;
do{
line >> almostToken;
cout << almostToken << " ";
} while (line);
cout << endl;
}
return 0;
}
不適切な動作: プログラムは最初の入力行のみを出力します。
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main () {
//DIFFERENT BLOCK
stringstream line;
string commentOrLine;
string almostToken;
while (true){
getline(cin,commentOrLine);
if (!cin.good()) {
break;
}
line << commentOrLine;
do{
line >> almostToken;
cout << almostToken << " ";
} while (line);
cout << endl;
}
return 0;
}
なぜこれが起こるのですか?