Наиболее вероятное объяснение состоит в том, что файл CSV, который вы читаете, имеет окончание строки Windows, \r\n
.Вызов getline
, который читает строку, будет читать до \r
и сбрасывать символ новой строки, в результате чего последнее поле в каждой строке будет заканчиваться одиночным возвратом каретки.Точка с запятой, которую вы добавляете, будет помещена после возврата каретки, в результате чего она будет напечатана с левого поля.
Очевидно, что когда вы затем отправляете символ новой строки с std::eol
, ваш эмулятор терминала очищает остальную частьстрока вывода, то, чего она не делает, когда за переводом каретки сразу следует символ перевода строки.Это кажется странным поведением, но я уверен, что у любого, кто его реализовал, были благие намерения.
Попробуйте удалить окончания строк Windows с помощью dos2unix
или проверьте, является ли последний символ line
возвратом каретки(и сотрите его, если он есть) перед созданием istringstream
.