我正在尝试从用户读取以“()”结尾的数据块,并将其发送到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的内容,总结一下,它打印的是第一个块,但是之后什么也不打印。知道发生了什么!
答案 0 :(得分:2)
这样做
while(strem >> str)
几乎可以肯定在流上设置了一个标志。因此,您需要先清除流状态,然后再尝试对其进行写操作。 您可以使用
strem.clear()