getline не получает первый токен

#c #csv #ifstream #getline

Вопрос:

Я пытаюсь прочитать CSV-файл, проблема в том, что каждый раз, когда программа читает строку и пытается разделить ее запятыми, она, по-видимому, пропускает первый токен. Почему это так?

 void readCSV(string path) {
    ifstream file;
    string line, cell;
    stringstream ss;
    
    file.open(path);
    if (file.fail()) {
        throw runtime_error("Cannot read file");
    }

    while (getline(file, line)) {
        ss << line;
        while (getline(ss, cell, ',')) {
            cout << cell << " ";
        }
        cout << endl;
        ss.str(string());
        ss.clear();
    }
    
    file.close();
}
 

Содержимое CSV-файла:

 a,b,c,d,e
1,2,3,4,5
 

Выход:

   b c d e
  2 3 4 5
 

Комментарии:

1. Я не могу воспроизвести вашу ошибку. Ваш код отлично работает для меня.

2. вы уверены, что во входном файле нет пробелов? (хотя это дало бы другой результат)

3. По-моему, все в порядке. Вы уверены, что это тот код, который вы запускаете? Вы внесли какие-то изменения и забыли скомпилировать?

4. Вы должны попытаться отладить свой код и пошагово узнать, какие значения в ваших переменных, если вы используете Windows с помощью Visual Studio, вы можете использовать встроенный отладчик, а в Linux вы можете использовать GDB/LLDB.