在以下程序中,int
如何将char
转换为printf()
?它是否被隐含地降级了?
#include<stdio.h>
int main()
{
int c=2;
printf("%c",c);
}
答案 0 :(得分:3)
代码工作正常!您将获得c的ASCII字符。 让我们看另一个例子:
int c;
for (c = 97; c < 123; c++)
{
printf("%c",c);
}
此代码将生成以下输出:
abcdefghijklmnopqrstuvwxyz
如果c的值大于char的最大值,则输出刚刚从begin开始。这意味着c = 1将产生与c = 257相同的输出。
答案 1 :(得分:2)
在您的代码中,
printf("%c",c);
有效,因为,根据C11
标准,章节§7.21.6.1, fprintf()
函数,%c
格式说明符,
c
如果不存在
l
长度修饰符,则int
参数将转换为unsigned char
,并写出结果字符。
因此,c
保留的值将转换为unsigned char
,然后将使用%c
格式说明符打印出来。