我正在学习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
答案 0 :(得分:3)
int main()
{
signed char x;
scanf("%c", &x);
printf("%d\n",x);
}
正确地将x
定义为char,但int也可以。
Char
由C标准定义为能够保留任何ASCII字符的数据类型,即至少127个可能的值。符号无关紧要,未指定。
如果您需要将char用作整数,最好是使用signed char
或unsigned char
来定义它,具体取决于您要执行的操作。
另一方面,printf("%d\n",x)
将正常工作,因为类型强制将输入的signed char转换为整数,正如printf%d所期望的那样。