В то время как цикл зацикливается только один раз при использовании getline из файла - PullRequest
1 голос
/ 06 марта 2019

У меня есть маленький кусочек кода:

fileopen.open(file_name);
while (getline(fileopen, line, ',')){
    string temp;
    vector<string> mug;
    temp = line;
    stringstream ss(temp);
    while (getline(ss, temp, ' ')){
        mug.push_back(temp);
    }
    stringstream conv;
    double vol, cos;
    conv << mug.at(1);
    conv >> vol;
    stringstream().swap(conv);
    conv << mug.at(3);
    conv >> cos;
    mugs.push_back(make_tuple(mug.at(0), vol, mug.at(2), cos));
    stringstream().swap(conv);
    stringstream().swap(ss);
    temp.clear();
}
sort(mugs.begin(), mugs.end(), sort_by);
for (int i = 0; i < mugs.size(); i++){
    cout << "Country: " << get<0>(mugs[i]) << " ";
    cout << ", Volume: " << get<1>(mugs[i]) << " ";
    cout << ", Material: " << get<2>(mugs[i]) << " ";
    cout << ", Price: " << get<3>(mugs[i]) << "\n";
}

У меня есть несколько очисток и stringstream().swap(), потому что это хорошо известная проблема.<sstream>, кажется, прерывает итерации для циклов while.Однако даже это, похоже, не работает.Ввод данных из файла выглядит следующим образом:

RUS 0.1 Wood 20
USA 0.4 Glass 0.5

Текущий код печатает первую строку по мере необходимости, но не может перебрать и напечатать вторую строку.Любые предложения?

Я пытался использовать continue и goto для решения этой проблемы.Ни одно из этих решений не сработало.

1 Ответ

2 голосов
/ 06 марта 2019

Входной файл, как опубликовано, не имеет , ни в одной из строк. Следовательно, использование

while (getline(fileopen, line, ',')){

не имеет смысла. Используйте

while (getline(fileopen, line)){
...