我是C的新手,在使用gcc在Ubunto上编译下面的代码时遇到了一个奇怪的问题。
#include <stdio.h>
int main()
{
char c;
printf("Inserire la codifica numerica :");
scanf(" %d",&c);
printf("La traduzione é %cn",c);
return 0;
}
当我编译代码时,我得到以下错误:
$ gcc codbin.c -o codbin.out
codbin.c: In function ‘main’:
codbin.c:7:14: warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘char *’ [-Wformat=]
7 | scanf(" %d",&c);
| ~^ ~~
| | |
| | char *
| int *
| %hhd
但是根据教授在大学课程上告诉我们的内容,它应该是有效的。任何想法?
提前感谢,任何帮助将是非常感激的!
我认为错误信息是异常
清晰。%d
期望int
。
但是您提供的变量c
被声明为char
:
char c;
我非常怀疑你的教授说这是可以的,但如果他们这样做,他们只是完全错误的。
具有%
标识符的格式字符串必须匹配所提供的参数。
首先,这只是一个警告,这意味着你的代码应该仍然可以编译,所以请检查文件是否编码。存在。
如果没有,您可能有其他问题没有显示给我们。
第二,正如已经指出的,发出警告的原因是您的格式说明符"%d"与变量类型char
不匹配。
"% d"希望您提供指向int
变量的指针。
你没有被告知的是,你的程序仍然可以工作,但这将是一个侥幸。
因为char
比int
小,scanf
可能会尝试写它不应该使用的内存。这被称为"未定义行为"。这意味着它可以根据你使用的编译器、你运行的操作系统以及你运行程序时计算机所处的状态而改变。
你的程序可能会崩溃,打印一些奇怪的东西,或者即使代码是错误的,也可以正常工作。