【问题标题】:Problem with iostream, my output endl are littles squaresiostream 有问题,我的输出 endl 是小方块
【发布时间】:2010-02-25 15:49:04
【问题描述】:

当我写入文件时,我的输出出现问题,当我将 endl 换行时,我得到了正方形。

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

我在我的文件中得到了类似的内容,而且其他输出没有写在下一行,而是写在同一行。

[TEST]square

显然我不能在这里写正方形,但它是关于 ofstream 是二进制还是什么?

【问题讨论】:

  • 让我大胆猜测一下:您是在 Windows 中运行的吗?您是否在记事本中查看文件?尝试在写字板中查看。
  • 是的,但是应该在记事本中查看...所有其他行在记事本中都有换行符,而我有一些它们没有,我需要它们有一些。

标签: c++ iostream newline


【解决方案1】:

在这种情况下,您并不想以二进制模式打开文件。

试试这个:

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

【讨论】:

  • 我认为这不应该被否决,它是正确的。格式化输出和二进制不能一起使用。
【解决方案2】:

您正在以二进制模式打开文件。在这种情况下,endl 写为 \n 而 windows 上的换行符应该是 \r\n

要以文本模式打开文件,只需不要包含 binary 标志,翻译将自动完成

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

【讨论】:

    【解决方案3】:

    这可能是因为您处于二进制模式并且行尾错误。 std::endl 将在刷新之前将 '\n' 放在流上。在文本模式下,这将转换为您平台的正确行尾。在二进制模式下,不会发生这种转换。

    如果您在 Windows 上,您的代码将有一个换行符 (LF),但 Windows 还需要一个回车符 (CF),即 '\r'。也就是说,它需要 "\r\n",而不仅仅是换行符。

    您的解决方法是以文本模式打开文件。二进制文件不应该输出换行符或格式化输出,这就是您不想使用提取和插入运算符的原因。

    如果您真的想使用二进制文件,请将您的文件视为二进制文件,不要期望它能够正确显示。二进制和格式化输出不能齐头并进。从您的使用情况来看,您似乎应该以文本模式打开。

    【讨论】:

      猜你喜欢
      • 2011-07-26
      • 1970-01-01
      • 2015-08-21
      • 1970-01-01
      • 2018-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多