\r
会将光标返回到当前行的开头,而非下一行。在 Linux 中使用 \n
时,\r
会自动隐含使用;但在 Windows 中不会。
在类 Unix 系统中使用 \r
可能会导致覆盖同一行上的内容。
我建议你阅读这篇文章。
简而言之,在Windows中换行符是"\r\n"
,而在Unix中换行符只是"\n"
(并且为了让生活变得更加困难,旧版Mac中的换行符是"\r"
)。
实际上,回车符应该将光标移动到当前行的开头。然后,换行符将光标向下移动一行。
现在,编译器通常会自动将其中之一转换为Windows上的\r\n
或Linux上的\n
。Mac曾经使用\r,但他们已经改为了\n的惯例。
(编辑:删除了错误/未经测试的语句)
putchar('\r')
并编译,\r
将被替换为\n
,这是完全错误的。打印\r
会将光标移回控制台行的开头,随后的打印将覆盖光标旁边的字符。 - kennytm不是的。现代文本编辑器通常会将它们视为相同,因为它们在数字文字处理器中的旧用途并不太合理。
例如,\r
字符的字面意思是“返回到行首”。虽然如果您只想覆盖该行上的所有内容,这可能对打字机有用,但这种功能对于数字类型来说并没有太多意义。
另一方面,\n
只是简单地向下移动一行而不返回开头。这在打字机上也很有用,用于缩进或标记项目。同样,对于数字类型来说并不是很有意义。
Telnet 就是一个例子,在其中这两个字符仍然以这种方式使用。
这两个字符都包含在 ASCII 语言中,只是因为当它被规范化时,他们还没有意识到在计算机上有用的功能在打字机上并不太合理。
\r
表示回车,\n
表示移动“纸张”。\n
表示\r\n
。