#include<stdio.h>
int main()
{
printf ("Hello\r");
}

在GCC编译器中,当执行此代码时,它不打印任何内容.如果我将\n加到类似于print语句中

printf ("Hello\r\n");

它可以打印Hello个.为什么会是这样呢?输出缓冲区中发生了什么?

推荐答案

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

carriage return将光标移回行首. 这一术语可以追溯到 typewriter ,在那里举行辊和纸张的滑架移动所有的方式到右边. 其结果是,任何后续字符都将从行的开头开始打印在任何先前字符之上.

line feed将光标向下移动一行. 这个术语也可以追溯到 typewriter ,在 typewriter 中,滚筒向下移动一行.

这些字符的解释方式因操作系统或终端模拟器的不同而有所不同.在您的例子中,打印了"Hello",打印了\r个字符,将光标移回同一行的开始处,然后程序退出,shell 程序在"Hello"上打印提示符.

如果您要打印一个比您的shell 提示符长的字符串,那么您将看到额外的字符.例如,如果我将printf呼叫更改为:

printf ("Helloxxxxxxxxxxyyyyy111112222333344445555\r");

当我运行你的程序时,我得到的信息是:

[dbush@db-centos7 ~]$ ./x1
[dbush@db-centos7 ~]$ 1112222333344445555

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

C++相关问答推荐

char为16位且Short也为16位的c环境合法吗

是否定义了数组指针类型转换为指针类型?""""

变量>;-1如何在C中准确求值?

我可以在C中声明不同长度数组的数组而不带变量名吗?

将宏值传递给ARM链接器,该链接器将变量放置在特定位置

初始变量重置后,char[]的赋值将消失

我怎么才能用GCC编译一个c库,让它包含另一个库呢?

Sizeof(&Q;字符串&Q;)的正确输出是什么?

对于C中给定数组中的每个查询,如何正确编码以输出给定索引范围(1到N)中所有数字的总和?

我的C函数起作用了,但我不确定为什么

在C++中允许使用字符作为宏参数

为什么电路板被循环删除?

从BIOS(8086)中读取刻度需要多少?

C:Assignment中的链表赋值从指针目标类型中丢弃‘const’限定符

如何在Rust中处理C的longjmp情况?

Struct 内的数组赋值

(GNU+Linux) 多个线程同时调用malloc()

Makefile - 将 .o 文件放入子文件夹中

在带中断的循环缓冲区中使用 易失性

C 预处理器中的标记分隔符列表