为什么在C语言中使用%c?

7

根据K&R C第1.6节,char是整数类型。那么为什么我们需要%c?为什么不能用%d代替所有东西?


1
@MaziarBouali 不一定。 - Pubby
printf需要知道参数的大小才能打印它(适当地转换类型,可以这么说)。char大小为1,int至少有1个大小,在大多数机器上更多。此外,使用%c时,您要打印一个字符,而不是数字。 在D语言中,您将始终使用%s,让编译器担心类型问题。 - Matej
1
@MatejNanut 不,比 int 更小的整数类型在传递到可变参数函数时会被提升为 int - Pubby
@Pubby:谢谢,我不知道这个。然而,当使用长整型时仍然存在歧义,因为它们是整数,你不能(或者不应该)使用“%d”来表示它们。 - Matej
6个回答

30

因为%d会输出char的数字字符代码:

printf("%d", 'a');

在 ASCII 系统中,输出 97

printf("%c", 'a');

输出 a


3
不要忘记 scanf%d 读取并转换数字字符串,而 %c 则读取并转换单个字符。 - John Bode

4
当使用%c时,虽然它是一个整数,但它会将其数字值解释为要显示的字符值。例如对于字符a
如果您使用%d,您将获得一个整数,例如97,这是字符a的内部表示。
相比之下,使用%c可以显示字符'a'本身(如果使用ASCII)。
也就是说,这是内部表示与解释的问题,用于外部目的(例如printf)。

1
大致而言,%c 打印字符的 ASCII 表示形式。%d 打印其十进制值。

1

如果您使用%c,您将打印(或扫描)一个字符或char。如果您使用%d,您将打印(或扫描)一个整数。

printf("%d", 0x70);

机器怎么知道你想输出一个字符,而不是它的 ASCII 值?


-1

%d 用于打印 十进制(整数) 数字,而 %c 用于打印 字符。如果您尝试使用 %d 格式打印字符,则计算机将打印该字符的 ASCII 码。


-1

%d认为char是32位并像整数一样打印,但%c将char的int值转换为ASCII字符然后打印。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接