Я написал этот код, и я не могу понять, почему он удваивает строку, когда я компилирую и запускаю ее ...
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;
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Мне прям неловко, что задаю такие вопросыЕсть "дерево":
Работа выполняется в VS 2015, программа компилируется без ошибок, после ввода 1-го числа вызывается фу-я "input" и множество раз сравнивается это...