Stringstream 允许在函数中调用 getline
Stringstream is allowing getline call in function
我正在通过引用传递一个从 cin 组装到 class 函数的字符串流。当我在 class 函数中调用 streamstream.str()
时,所有的输入都在那里。但是,在下一行中,当我调用 getline(stringstream,output)
时,它失败了并且从不启动循环。我的字符串流有什么问题?
#include <iostream>
#include <sstream>
using namespace std;
class HRMLMap{
public:
HRMLMap(stringstream& iss){
string line;
cout << iss.str() << endl;
while(getline(iss,line)){
cout << "it never gets here." << "\n";
}
}
};
int main() {
std::string line;
stringstream ss("", ios_base::app | ios_base::out);
for(int i = 0; i < 4; ++i){
getline(cin,line);
ss << line << endl;
}
HRMLMap myHRMLMap(ss);
return 0;
}
此处的问题与您打开 stringstream
的模式有关。你用过
stringstream ss("", ios_base::app | ios_base::out);
这意味着您将附加到流中并且流处于输出模式。这意味着您只能写入它,这意味着您不能从中读取。
要修复它,您可以指定它也可以在输入模式下运行
stringstream ss("", ios_base::app | ios_base::out | ios_base::in);
或者您可以直接使用
stringstream ss;
这给你相同的行为。
我正在通过引用传递一个从 cin 组装到 class 函数的字符串流。当我在 class 函数中调用 streamstream.str()
时,所有的输入都在那里。但是,在下一行中,当我调用 getline(stringstream,output)
时,它失败了并且从不启动循环。我的字符串流有什么问题?
#include <iostream>
#include <sstream>
using namespace std;
class HRMLMap{
public:
HRMLMap(stringstream& iss){
string line;
cout << iss.str() << endl;
while(getline(iss,line)){
cout << "it never gets here." << "\n";
}
}
};
int main() {
std::string line;
stringstream ss("", ios_base::app | ios_base::out);
for(int i = 0; i < 4; ++i){
getline(cin,line);
ss << line << endl;
}
HRMLMap myHRMLMap(ss);
return 0;
}
此处的问题与您打开 stringstream
的模式有关。你用过
stringstream ss("", ios_base::app | ios_base::out);
这意味着您将附加到流中并且流处于输出模式。这意味着您只能写入它,这意味着您不能从中读取。
要修复它,您可以指定它也可以在输入模式下运行
stringstream ss("", ios_base::app | ios_base::out | ios_base::in);
或者您可以直接使用
stringstream ss;
这给你相同的行为。