清除输入缓冲区后 Stringstream 未提取
Stringstream not extracting after clearing input buffer
我在使用 stringstream 时遇到问题。所以我从一个 csv 文件中获取令牌并将它们分配给一些变量但是我在读取每个令牌之后清除 stringstream sv 并且在第一个令牌之后它停止工作并且我不确定为什么。注释行 'stops working here' 是停止正确提取的地方。在 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
}
str("")
不会更改流的状态。
即,如果流在 str("")
之前处于 eof 状态,它在 str("")
之后仍将处于相同状态。
为了清除状态请使用clear();
sv.str("");
sv.clear();
我在使用 stringstream 时遇到问题。所以我从一个 csv 文件中获取令牌并将它们分配给一些变量但是我在读取每个令牌之后清除 stringstream sv 并且在第一个令牌之后它停止工作并且我不确定为什么。注释行 'stops working here' 是停止正确提取的地方。在 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
}
str("")
不会更改流的状态。
即,如果流在 str("")
之前处于 eof 状态,它在 str("")
之后仍将处于相同状态。
为了清除状态请使用clear();
sv.str("");
sv.clear();