#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。为什么它会这样?输出缓冲区发生了什么?
是\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光标会移动到下一行并转到该行的开头。