代码之家  ›  专栏  ›  技术社区  ›  Sydius

在Windows中打印到控制台时是否需要回车?

  •  2
  • Sydius  · 技术社区  · 15 年前

    似乎仅仅放一个换行符就足够了,但我知道它应该是回车+换行符。如果你不把车厢放回去,只使用换行符,会发生什么可怕的事情吗?

    这是在ANSIC中,不会被重定向到文件或其他任何文件。只是一个普通的控制台应用程序。

    5 回复  |  直到 12 年前
        1
  •  2
  •   RBerteig Keith Adler    15 年前

    Windows控制台遵循与文件或实际物理终端相同的行尾约定。它需要同时看到CR和LF才能正确移动到下一行。

    也就是说,在ANSIC程序和控制台之间有很多软件基础设施。特别是,任何标准的C库I/O函数都会尝试做正确的事情,前提是您允许这样做。这就是为什么 fopen() t b 的修饰符 mode 参数已定义。

    T (大多数流的默认值,尤其是 stdin stdout 然后) \n 打印的被转换成一个CRLF序列,而读的则相反。要关闭该行为,请使用 修饰语。

    顺便说一下,传统上连接到*尼克斯盒的终端,包括Xterm模拟的DEC VT100,也需要CR和LF。然而,在*nix世界中,从换行字符到CRLF序列的转换是在tty设备驱动程序中处理的,因此大多数程序不需要知道它,并且 T 修饰符都被忽略。在这些平台上,如果需要在不进行修改的情况下在tty上发送和接收字符,则需要查找stty(1)或它所依赖的系统调用。

    如果您的ansi c程序正在避免C库对控制台的I/O(可能是因为您需要访问控制台的字符颜色和其他属性),那么您是否需要发送CR将取决于您使用哪个win32 api调用来发送字符。

        2
  •  1
  •   Bennett Dill    15 年前

    如果您处于*nix环境中,则(linefeed)可能正常。如果您在Windows中并且没有重定向(现在),那么linefeed也可以,但是如果某个人在某个点重定向,那么:-(

    但是,如果您使用的是Windows,那么如果将输出重定向到文本文件,然后另一个进程尝试使用数据,则可能会出现问题。

    控制台知道要显示什么,但消费者可能不高兴…

    如果您使用的是C,您可以尝试使用environment.newline“constant”。

    http://msdn.microsoft.com/en-us/library/system.environment.newline.aspx

    如果你真的是香草C,你会被困在\r\n.:-)

        3
  •  0
  •   Brian R. Bondy    15 年前

    这取决于你用它们做什么。如果不同时放置新行,某些程序将无法正确显示新行。 \r \n .

    如果你只想写 \n 某些使用文本文件(或输出)的程序可能将文本显示为一行而不是多行。

    还有一些文件格式和协议在不使用这两种格式和协议的情况下将完全无效。 R \n .

        4
  •  0
  •   Mark Ransom    15 年前

    我已经很久没试过了,我不确定我是否记得发生了什么…但换行符本身是否会在不返回到左列的情况下沿着行移动?

    根据编译器的不同,标准输出可能以文本模式打开,在这种情况下,一个换行符将在写出之前转换为\r\n。

    编辑: 我刚刚尝试了一个快速测试,在xp中,一个没有返回的文件正常显示。我仍然不知道是否有编译器为您插入返回。

        5
  •  0
  •   Hexagon    15 年前

    在C语言中,文件(称为“流”)有两种形式——二进制或文本。

    这一区别的含义取决于实现/平台,但在写入文本流时,Windows(具有我见过的常见实现)会自动转换为“r\n”,在读取文本流时,“r\n”会自动转换为“n”。

    “控制台”实际上是“标准输出”,它是默认情况下作为文本流打开的流。所以,在实践中,在窗户上写着“你好,世界!\ n“应该足够——而且可以携带。