Это, вероятно, потому что вы находитесь в двоичном режиме, и окончания строк неправильны std::endl
поместит '\n'
в поток перед очисткой. В текстовом режиме это будет преобразовано в правильное окончание строки для вашей платформы. В двоичном режиме такие преобразования не выполняются.
Если вы работаете в Windows, ваш код будет иметь перевод строки (LF), но Windows также сначала требует возврата каретки (CF), что составляет '\r'
. То есть он хочет "\ r \ n", а не просто перевод строки.
Ваше исправление - открыть файл в текстовом режиме. Предполагается, что двоичные файлы не выводят символы новой строки или форматированные выходные данные, поэтому вы не хотите использовать операторы извлечения и вставки.
Если вы действительно хотите использовать двоичный файл, то рассматривайте свой файл как двоичный файл и не ожидайте, что он будет отображаться правильно. Двоичный и форматированный вывод не идут рука об руку. Судя по вашему использованию, вы должны открывать текстовый режим.