为什么在c中使用%c?

为什么在c中使用%c?,c,C,根据K&R C第1.6节,achar是一种整数。那么为什么我们需要%c。为什么我们不能用%d处理所有事情 因为%d将打印字符的数字字符代码: printf("%d", 'a'); 打印97(在ASCII系统上),而 打印a粗略地说,%c打印字符的ASCII表示形式%d打印其十进制值。当它是整数时,%c将其数值解释为字符值以供显示。例如,对于字符a: 如果使用%d则会得到一个整数,例如97,字符a vs 使用%c显示字符“a”本身(如果使用ASCII) 也就是说,这是一个内部表示与外部解释的问题

根据K&R C第1.6节,a
char
是一种整数。那么为什么我们需要
%c
。为什么我们不能用
%d
处理所有事情

因为
%d
将打印
字符的数字字符代码

printf("%d", 'a');
打印
97
(在ASCII系统上),而


打印
a

粗略地说,
%c
打印字符的ASCII表示形式<代码>%d打印其十进制值。

当它是整数时,
%c
将其数值解释为字符值以供显示。例如,对于字符
a

如果使用
%d
则会得到一个整数,例如97,字符
a

vs

使用
%c
显示字符“
a
”本身(如果使用ASCII)


也就是说,这是一个内部表示与外部解释的问题(例如使用
printf

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

printf("%d", 0x70);

机器如何知道您要输出的是字符,而不是其等效的ASCII值?

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

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

@MaziarBouali不一定。
printf
需要知道参数的大小才能打印它(可以说是正确地转换它)。在大多数机器上,
char
的大小为1,而
int
的大小至少为1。另外,当使用
%c
时,您希望打印的是字符,而不是数字。在
D
语言中,您总是使用
%s
,让编译器担心类型。@MatejNanut不,小于
int
的整数类型在传递到变量函数时会升级为
int
。@Pubby:谢谢,我不知道。但是,在使用long时仍然存在这种歧义,long是整数,不能(或不应该)使用
%d
。不要忘记
scanf
%d
读取和转换数字字符串,其中as
%c
读取和转换单个字符。
printf("%d", 0x70);