Удваивание вывода при простом парсинге csv в C++

157
03 октября 2017, 06:06

Я написал этот код, и я не могу понять, почему он удваивает строку, когда я компилирую и запускаю ее ...

data.csv состоит из:
0, person, 8, 12, 344, 486

Пожалуйста, скажите мне, почему это происходит и что я могу сделать, чтобы избежать этого.. Спасибо за любую помощь.

Вот код:

ifstream myfile("data.csv");
if(!myfile.is_open()) cout<<"error";
        string num1;
        string num2;
        string num3;
        string num4;
        string num5;
        string num6;
            while(myfile.good()){
                    getline(myfile,num1,',');
                    getline(myfile,num2,',');
                    getline(myfile,num3,',');
                    getline(myfile,num4,',');
                    getline(myfile,num5,',');
                    getline(myfile,num6,'\n');
                    cout<<num1<<","<<num2<<","<<num3<<","<<num4<<","<<num5<<","<<num6<<"\n";
            }
myfile.close();
return 0;
}
Answer 1

Это происходит из-за того, что после чтения первой строки поток myfile все еще имеет состояние good (ибо неудачных попыток чтения еще не было). На второй итерации цикла, num1 принимает пустое значение, а в потоке встречается конец файла. Остальные num уже не читаются, и сохраняют считанные на первой итерации цикла значения. Предлагаю такую модификацию кода:

for(;;)
{
    getline(myfile,num1,',');
    getline(myfile,num2,',');
    getline(myfile,num3,',');
    getline(myfile,num4,',');
    getline(myfile,num5,',');
    getline(myfile,num6,'\n');
    if(myfile.good())
        cout<<num1<<","<<num2<<","<<num3<<","<<num4<<","<<num5<<","<<num6<<"\n";
    else
        break;
}
READ ALSO
Проблемы с GCC в MinGW

Проблемы с GCC в MinGW

gcc: installation problem, cannot exec `cc1': No such file or directory

195
Как обратиться к #include &ldquo;..&rdquo; уровнем выше?

Как обратиться к #include “..” уровнем выше?

Наверно, я туплюУ меня есть файл "stdafx

214
fatal error C1010 в Visual Studio - как правильно решить?

fatal error C1010 в Visual Studio - как правильно решить?

Мне прям неловко, что задаю такие вопросыЕсть "дерево":

300
Зацикливание функции

Зацикливание функции

Работа выполняется в VS 2015, программа компилируется без ошибок, после ввода 1-го числа вызывается фу-я "input" и множество раз сравнивается это...

187