printf中'\n'和'\r'之间有什么关系?

Bar*_*an 2 c printf

#include<stdio.h>
int main()
{
printf ("Hello\r");
}
Run Code Online (Sandbox Code Playgroud)

在 gcc 编译器中,执行此代码时不会打印任何内容。如果我添加\n到 printf 语句中,例如

printf ("Hello\r\n");
Run Code Online (Sandbox Code Playgroud)

它打印Hello。为什么它会这样?输出缓冲区发生了什么?

dbu*_*ush 5

\r回车符,而\n字符是换行符。

回车将光标移回行首。这个术语可以追溯到打字机,其中固定滚筒和纸张的托架一直移动到右侧。结果是,从行首开始,任何后续字符都会打印在任何先前字符之上。

行将光标向下移动一行。这个术语也可以追溯到打字机,其中滚筒被转动以向下移动一行。

这些字符的解释方式因操作系统或终端仿真器而异。在您的情况下发生的情况是打印“Hello”,\r打印字符,将光标移回同一行的开头,然后程序退出,shell 在“Hello”上打印其提示。

如果您要打印的字符串比 shell 的提示符长,那么您将看到附加字符。例如,如果我将调用更改printf为:

printf ("Helloxxxxxxxxxxyyyyy111112222333344445555\r");
Run Code Online (Sandbox Code Playgroud)

当我运行你的程序时,我得到这个:

printf ("Helloxxxxxxxxxxyyyyy111112222333344445555\r");
Run Code Online (Sandbox Code Playgroud)

相反,当您打印时,\n光标会移动到下一行转到该行的开头。