3

当我使用字符串流时,我的 cpp 程序在作用域方面做了一些奇怪的事情。当我将字符串和字符串流的初始化放在与我使用它的位置相同的块中时,没有问题。但是如果我把它放在上面一个块,字符串流不会正确输出字符串

正确的行为,程序打印由空格分隔的每个标记:

#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;
}

为什么会这样?

4

1 回答 1

7

当您stringstream为每一行“创建和销毁”时,它也会fail重置状态。

您可以通过line.clear();在将新内容添加到line.

于 2013-06-20T14:28:36.360 回答