不正确的输出和警告消息''使指针从int''

时间:2013-08-03 22:44:51

标签: c

我正在写一个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@

我想知道警告信息的含义以及我可以采取哪些措施来解决它。

3 个答案:

答案 0 :(得分:3)

问题在于scanfprintf中的格式说明符。

 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

和转换说明符%lfscanf

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 );

告诉我有两个参数,所以你的语法错了