0
#include<stdio.h>
int main(){
    printf("%d\n", (int)('a'));
    printf("%d\n", (char)(97));
}

为什么上面的程序会给出输出

97
97

代替

97
a
4

5 回答 5

1
#include<stdio.h>
int main(){
    printf("%d\n", (int)('a'));
    printf("%c\n", (char)(97));
}

char是整数类型(与 , 等相同int),只有范围不同longlong long

%dprintf 整数,字符常量'a'的类型int和值97ASCII.

您的示例中不需要强制转换:

#include<stdio.h>
int main(){
    printf("%d\n", 'a');
    printf("%c\n", 97);
}
于 2022-01-20T18:42:15.093 回答
1

97,0x61并且'a'只是产生相同int值的不同方式(至少在基于 ASCII 的机器上)。

Andchar只是另一种整数类型,因此将值转换为 achar不会有帮助。

要将该值打印为a,请使用%c

#include <stdio.h>

int main(void) {
   printf("%d\n", 97);   // 97
   printf("%d\n", 'a');  // 97

   printf("%c\n", 97);   // a
   printf("%c\n", 'a');  // a
}
于 2022-01-20T18:43:02.417 回答
1

在第二次调用中,您尝试使用转换说明符将字符输出为整数%d

printf("%d\n", (char)(97));

相反,您可以只使用转换说明符编写%c

printf("%c\n", 97);

在这种情况下,不需要铸造。

即使你会写也要注意这一点

printf("%c\n", (char)(97));

或者

char c = 'a';
printf("%c\n", c);

int然而,由于整数提升,第二个参数表达式将被提升为类型。

同样在 C 整数字符常量中,如'a'具有类型int.

于 2022-01-20T18:43:42.720 回答
0

因为你需要在最后一行写 %c,而不是 %d。

printf("%d\n", (char)(97));

printf("%c\n", 97);
于 2022-01-20T18:42:04.583 回答
0

您想要的是打印一个字符,但是在您的第二个 printf 调用中您指定 format%d而不是%c,然后 printf 将您输出(char)(97)为整数。

于 2022-01-20T18:44:30.337 回答