Проблема с iostream, мои выходные данные - маленькие квадраты - PullRequest
1 голос
/ 25 февраля 2010

У меня проблема с выводом, когда я пишу в файл, я получаю квадраты, когда ставлю endl для изменения строк.

std::ofstream outfile   (a_szFilename, std::ofstream::binary);
outfile<<"["<<TEST<<"]"<<std::endl;

Я получаю что-то вроде этого в моем файле плюс другие выходные данные пишутся не на следующей строке, а на той же самой.

[TEST]square

очевидно, я не могу написать квадрат здесь, но это что-то о том, что ofstream является двоичным или что-то в этом роде?

Ответы [ 3 ]

5 голосов
/ 25 февраля 2010

В этом случае вы действительно не хотите открывать файл в двоичном режиме.

Попробуйте вместо этого:

std::ofstream outfile   (a_szFilename);
outfile<<"["<<TEST<<"]"<<std::endl;
3 голосов
/ 25 февраля 2010

Вы открываете файл в двоичном режиме. в этом случае endl записывается как \ n, а символ новой строки в windows должен быть \ r \ n

Чтобы открыть файл в текстовом режиме, просто не включайте флаг binary, перевод будет выполнен автоматически

std::ofstream outfile(a_szFilename);
outfile<<"["<<TEST<<"]"<<std::endl;
2 голосов
/ 25 февраля 2010

Это, вероятно, потому что вы находитесь в двоичном режиме, и окончания строк неправильны std::endl поместит '\n' в поток перед очисткой. В текстовом режиме это будет преобразовано в правильное окончание строки для вашей платформы. В двоичном режиме такие преобразования не выполняются.

Если вы работаете в Windows, ваш код будет иметь перевод строки (LF), но Windows также сначала требует возврата каретки (CF), что составляет '\r'. То есть он хочет "\ r \ n", а не просто перевод строки.

Ваше исправление - открыть файл в текстовом режиме. Предполагается, что двоичные файлы не выводят символы новой строки или форматированные выходные данные, поэтому вы не хотите использовать операторы извлечения и вставки.

Если вы действительно хотите использовать двоичный файл, то рассматривайте свой файл как двоичный файл и не ожидайте, что он будет отображаться правильно. Двоичный и форматированный вывод не идут рука об руку. Судя по вашему использованию, вы должны открывать текстовый режим.

...