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

时间:2016-12-06 12:52:10

标签: c char int ascii warnings

我正在学习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

1 个答案:

答案 0 :(得分:3)

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)将正常工作,因为类型强制将输入的signed char转换为整数,正如printf%d所期望的那样。