我在使用stringstream时遇到麻烦。因此,我从csv文件中获取令牌并将它们分配给一些变量,但是在读取每个令牌后,我正在清除stringstream sv,并且在第一个令牌之后,它将停止工作,我不确定为什么。带注释的行“在这里停止工作”是停止正确提取的地方。在Visual Studio中,即使在插入操作之后,sv仍为'0x000'。我什至在我的代码中还有另一个循环,将其清除一次,然后再次插入即可。
int reviewid;
int userid;
int rating;
string reviewDate;
getline(reviewReader, dummyLine); // skip first line of input
while (getline(reviewReader, input)) {
stringstream ss, sv; // sv used for type conversions
// using delimeter of commas
// order of input in the file is [ movieid, moviename, pubyear]
// , first toiken is movieid, second token will be moviename
// third token will be pubyear
ss << input; // take in line of input
getline(ss, token, ','); // first token
sv << token; // convert toiken to int
sv >> reviewid;
getline(ss, token, ','); //
sv.str("");
sv << token; // STOPS WORKING HERE
sv >> movieid;
sv.str(""); // clear buffer
getline(ss, token, ',');
sv << token;
sv >> userid;
sv.str("");
getline(ss, token, ',');
sv << token;
sv >> rating;
sv.str("");
getline(ss, token, ',');
sv << token;
sv >> reviewDate;
sv.str("");
Review r = Review(reviewid, movieid, userid, rating, reviewDate); // make review object
reviews.push_back(r); // add it to vector of reviews
}
答案 0 :(得分:1)
str("")
不会更改流的状态。
即,如果流在str("")
之前处于eof状态,则在str("")
之后仍将处于相同状态。
为了清除状态,请使用clear();
sv.str("");
sv.clear();