Я написал этот код, и я не могу понять, почему он удваивает строку, когда я компилирую и запускаю ее ...
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;
}
Это происходит из-за того, что после чтения первой строки поток 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;
}
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости