为什么以及如何出现涉及回车的以下输出?

时间:2013-12-09 20:42:09

标签: c gcc output

#include <stdio.h>

void main()
{
    printf("ab");
    printf("\bsi");
    printf("\rha");
}

此代码在GCC 4.8编译器

上给出“ha”的输出
#include <stdio.h>

void main()
{
    printf("ab");
    printf("\bsi");
    printf("\rha");
    printf("\n");
}

此代码在GCC 4.8编译器

上给出“hai”的输出

现在的问题是,为什么输出会在添加语句printf(“\ n”)时从“ha”变为“hai”;最后(根据我)不应该因前面的行而影响代码。

3 个答案:

答案 0 :(得分:5)

当你的程序结束时,shell会从光标最后一个位置开始写入提示符。所以在第一种情况下,在\rha之后,光标位于i上。无论提示符的第一个字符是什么,shell都会覆盖i

在第二种情况下,在末尾输出\n,将光标移动到下一行,shell写入其提示符。

答案 1 :(得分:2)

首先,您需要了解空格字符:

  1. \ n ::它将光标移动到下一行。
  2. \ b ::它将光标移回控制台左侧的一个字符。只需简单地退格一个 字符。
  3. \ r \ n :: Carrage Returns.It将光标移动到同一行的最右侧。
  4. 因此printf的结果是:: 1.打印“ab”,光标位于行尾。 2.将光标移回一个空格(\ b)后打印“asi”,光标位于一行的末尾。 3.打印“hai”,光标坐在ha之后,就在我的下方。

    所以,OUTPUT :: hai

    在第一种情况下,由于光标,您无法看到“i”,而在第二种情况下,由于换行符,您可以看到它

答案 2 :(得分:0)

如果你编译第一个代码,在i的位置,有光标,所以你看不到我。在第二个代码中,光标位于一个新行中,并且它不包含任何字符。