打印在Windows控制台时,需要回车?
-
05-09-2019 - |
题
好像只是把一个换行符是不够好,但我知道它应该是回车+换行。如果你不把回车,只用换行做任何事情太可怕了发生?
这是在ANSI C和不会被重定向到一个文件或其他任何东西。只是一个正常的控制台应用程序。
解决方案
在Windows控制台遵循假定的文件,或与此有关的实际,物理终端在同一行结束约定。它需要看到两个CR和LF正确移动到下一行。
这就是说,有很多的ANSI C程序和控制台之间的软件基础设施。具体而言,任何标准C库I / O功能将试图做正确的事情,假设你允许它的机会。这就是为什么在fopen()
参数t
的b
和mode
改性剂被定义
使用t
(默认为最流,并且尤其是用于stdin
和stdout
)然后印刷任何\n
转换为CRLF序列,而反向发生用于读出。要关闭问题,使用b
改性剂。
顺便提及,端子传统上钩住* nix的盒包括的XTerm仿真也需要CR和LF的DEC VT100。然而,在* nix的世界,从一个换行符的CRLF序列的转换是在tty设备驱动程序处理所以大部分程序并不需要了解它,并且t
和b
修饰都被忽略。在这些平台上,如果你需要在一个tty发送和接收字符没有这种修改,你需要仰视的stty(1)或系统调用它取决于。
如果您否则ANSI C程序避免C库I / O控制台(也许是因为你需要访问控制台的字符颜色等属性),你那么是否需要发送CR与否将取决于Win32 API调用您使用的发送的字符。
其他提示
如果您在* nix的环境\ n是(换行)可能是好的。如果你在Windows,而不是重定向(现在)换行也行,但如果有人在somepoint重定向: - (
如果你正在做的Windows,虽然,可能有问题,如果输出重定向到一个文本文件,然后另一个进程尝试消耗的数据。
在控制台知道要显示什么,但消费者可能高兴不起来......
如果您使用的是C#,您可以尝试Environment.NewLine “常量”。
http://msdn.microsoft.com/en -us /库/ system.environment.newline.aspx
如果您在香草ç真的,你坚持\ r \ n。 : - )
这取决于你使用他们的东西。某些程序无法显示正确换行,如果你不把两者\r
和\n
。
如果您尝试只写\n
一些程序会消耗你的文本文件(或输出)可能会显示您的文本设置为单行而不是多行。
也有一些文件格式和协议,这将完全是无效的,而无需使用两个\r
和\n
。
我都没有这么长时间,我不知道我还记得发生了什么...但是没有一个单独的换行向下移动一行,而不返回到左边的列?
试了一下根据你的编译器,标准输出信号就可以在文本模式下被写入之前打开,在这种情况下,单个换行将被转换为用\ r \ n
修改我只是试图快速测试,并且在XP不返回显示文件正常。我仍然不知道是否有编译器插入回报你。
在C,文件(被称为“流”)有两种形式 - 二进制或文本
这种区别的意义留执行/平台相关,但在Windows(与我见过共同实现)写入文本流“\ n”时,会自动转换为“\ r \ n”,而当从文本流为 “\ r \ n” 被自动转换为 '\ n'。
读在“控制台”实际上是“标准输出”,这是默认打开作为文本流的流。因此,在Windows实践,撰写“!您好,世界\ n”应该是相当充分 - 和便携