Stringstream не извлекается после очистки входного буфера - PullRequest
0 голосов
/ 22 сентября 2018

У меня проблемы со струнным потоком.Поэтому я получаю токены из 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 голосов
/ 22 сентября 2018

str("") не меняет состояние вашего потока.т.е. если поток находился в состоянии eof до str(""), он все еще будет в том же состоянии после str("").Для очистки состояния используйте clear();

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