清除输入缓冲区后未提取Stringstream

时间:2018-09-22 20:03:59

标签: c++ buffer clear stringstream

我在使用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
    }

1 个答案:

答案 0 :(得分:1)

str("")不会更改流的状态。 即,如果流在str("")之前处于eof状态,则在str("")之后仍将处于相同状态。 为了清除状态,请使用clear();

sv.str("");
sv.clear();