#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”;最后(根据我)不应该因前面的行而影响代码。
答案 0 :(得分:5)
当你的程序结束时,shell会从光标最后一个位置开始写入提示符。所以在第一种情况下,在\rha
之后,光标位于i
上。无论提示符的第一个字符是什么,shell都会覆盖i
。
在第二种情况下,在末尾输出\n
,将光标移动到下一行,shell写入其提示符。
答案 1 :(得分:2)
首先,您需要了解空格字符:
因此printf的结果是:: 1.打印“ab”,光标位于行尾。 2.将光标移回一个空格(\ b)后打印“asi”,光标位于一行的末尾。 3.打印“hai”,光标坐在ha之后,就在我的下方。
所以,OUTPUT :: hai
在第一种情况下,由于光标,您无法看到“i”,而在第二种情况下,由于换行符,您可以看到它
答案 2 :(得分:0)
如果你编译第一个代码,在i的位置,有光标,所以你看不到我。在第二个代码中,光标位于一个新行中,并且它不包含任何字符。