清除后,stringstream不接受任何数据

时间:2019-08-11 15:47:03

标签: c++ stringstream

我正在尝试从用户读取以“()”结尾的数据块,并将其发送到stringstream,对其进行一些操作(为方便起见,现在我说我只想打印这些数据),然后接受再次输入一个新的数据块,通过输入EOF完成此操作, 这是代码

while(cin >> temp)
    {
        if(temp != "()")
        {
            strem << temp + " ";
        }
        else
        {
            while(strem >> str)
                cout << str << " ";
            cout << "\n";
            strem.str("");
        }

    }

此行strem.str("");之后的strem现在在下一循环中未读取任何数据。我尝试通过添加此行

进行调试

cout << strem.str() << "\n"; 所以整个代码是

while(cin >> temp)
    {
        if(temp != "()")
        {
            strem << temp + " ";
            cout << " strem.str() : " cout << strem.str() << "\n";
        }
        else
        {
            while(strem >> str)
                cout << str << " ";
            cout << "\n";
            //strem.str("");
            strem.str(string());
        }

    }

要查看strem的内容,总结一下,它打印的是第一个块,但是之后什么也不打印。知道发生了什么!

1 个答案:

答案 0 :(得分:2)

这样做

while(strem >> str)

几乎可以肯定在流上设置了一个标志。因此,您需要先清除流状态,然后再尝试对其进行写操作。 您可以使用

strem.clear()