如何在C中以整数形式存储字符的ASCII码?

How to store ASCII code of character in integer in C?

我正在学习我的 C 课程作业,我需要获取 char 作为输入,我想将该字符的 ASCII 值存储在 int 变量中。我知道这可以通过以下方式完成:

int main()
{
    int x;
    scanf("%c", &x);
    printf("%d\n",x);
}

这里的问题是,每当我在启用 -Wformat 的 gcc 中编译此程序时,我都会收到此警告:

Warning: format ‘%c’ expects argument of type ‘char *’, but argument 2 has type ‘int *’

根据课程作业的规范,如果有任何编译器警告,我会减掉一些分数。那么,有没有其他方法可以在没有任何编译器警告的情况下完成所需的任务?


在我的实际程序中,我在一个数组中扫描,我还需要存储超出 char 范围的其他整数,所以我不能使用 char x

int main()
{
    signed char x;
    scanf("%c", &x);
    printf("%d\n",x);
}

正确的做法是将 x 定义为 char,但 int 也可以。

Char 由 C 标准定义为能够保留任何 ASCII 字符的数据类型,即至少 127 个可能的值。符号无所谓,不指定。

如果您需要将 char 作为整数使用,最好是使用 signed charunsigned char 来定义它,具体取决于您想要做什么。

另一方面,printf("%d\n",x) 将正常工作,因为类型强制会将输入的有符号字符转换为整数,正如 printf%d 所期望的那样。