printf的意外结果

时间:2010-03-12 04:02:51

标签: c printf

#include<stdio.h>
int main()
{
    printf("He %c llo",65);
}

输出:他A llo

#include<stdio.h>
int main()
{
    printf("He %c llo",13);
}

输出:llo。它不打印他。

我可以理解65是A的ascii值,因此在第一种情况下打印A,但在第二种情况下打印为llo

由于

3 个答案:

答案 0 :(得分:10)

ASCII 13是回车符,在某些系统上只是将光标移动到刚刚开始的行的开头。

其他字符则会删除之前的文字。

答案 1 :(得分:5)

Man ascii:

Oct   Dec   Hex   Char
015   13    0D    CR  '\r'

字符13是回车符,因此它会打印He然后返回到行的开头并打印提醒llo

答案 2 :(得分:3)

由于回车的性质,它只是被渲染得很奇怪*。您可以通过管道传输到另一个工具(例如xxd

)来查看输出的字符
$ gcc b.c && ./a.out | xxd
0000000: 4865 200d 206c 6c6f                      He . llo
$ gcc c.c && ./a.out | xxd
0000000: 4865 2041 206c 6c6f                      He A llo

*请参阅Wikipedia

  

在无法显示图形的打印机,电视类型和计算机终端上,使用回车而不移动到下一行,以允许将字符放在现有字符的顶部以生成字符图形,下划线和交叉出文字。