我正在写一个c程序,其工作是将摄氏温度转换为华氏温度,反之亦然。我希望我的用户以
的形式提供输入 double, char
角色可以是华氏度到摄氏度转换的'F',也可以是摄氏度到华氏度转换的'C'。 我写了这个程序来做。 该计划
#include <stdio.h>
int main( )
{
char in[10];
int i;
printf("Welcome to the Tempurate Conversion Enter a ");
scanf("%s %d", i, &in);
printf(i);
printf(in);
return 0;
}
编译此程序时,我收到此警告: 警告
CtoF.c: In function 'main':
CtoF.c:8:4: warning: passing argument 1 of 'printf' makes pointer from integer w
ithout a cast [enabled by default]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/../../../../include/stdio.h:294:37: note:
expected 'const char *' but argument is of type 'int'
我跑到节目时给了这个输入: 输入
3 C
得到了这个输出: 输出
3@
我想知道警告信息的含义以及我可以采取哪些措施来解决它。
答案 0 :(得分:3)
问题在于scanf
和printf
中的格式说明符。
scanf("%s %d", i, &in);
应该是
scanf("%d %s", &i, in);
并且
printf(i);
printf(in);
应该是
printf("%d", i);
printf("%s", in);
并附注:
我希望我的用户以
的形式提供输入double, char
为此,您必须将int i
更改为
double i;
在%d
中和转换说明符%lf
到scanf
:
scanf("%lf %s", &i, in);
答案 1 :(得分:0)
您的printf
声明错误。
printf
需要一个像char in[10]
这样的字符数组。但是,您传递的是整数。 int i
。
警告通知您,因为printf
需要指针参数并且您传递的是整数,所以此整数会被强制转换为指针。
因此,如果您的整数值为100,它现在会尝试从位于100的内存地址读取并继续转储内存,直到找到\0
个字符/值
答案 2 :(得分:0)
printf以下列方式工作:
printf的第一个参数告诉我们预期有多少个参数
printf( "%d", n );
告诉我们需要一个参数(一个int指针)
printf( "%d %d", n, m );
告诉我有两个参数,所以你的语法错了