-1

我正在编写 ac 程序,其工作是将摄氏温度转换为华氏温度,反之亦然。我希望我的用户在表单中提供输入

 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@

我想知道警告消息的含义以及我能做些什么来修复它。

4

3 回答 3

3

问题在于scanfand中的格式说明符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%lfin scanf

scanf("%lf %s", &i, in);
于 2013-08-03T22:53:16.633 回答
0

printf 的工作方式如下:

printf 的第一个参数告诉我们需要多少个参数

printf( "%d", n ); 

告诉我们需要一个参数(一个 int 指针)

printf( "%d %d", n, m );

告诉有两个参数,所以你的语法是错误的

于 2013-08-03T23:20:36.473 回答
0

你的printf说法是错误的。

printf需要一个 char 数组,如char in[10]. 但是,您传递的是一个整数。int i.

警告通知您,因为printf需要一个指针参数并且您正在传递一个整数,所以这个整数被强制转换为一个指针。

因此,如果您的整数的值为 100,它现在会尝试从位于 100 的内存地址读取并继续转储内存,直到\0找到字符/值

于 2013-08-03T22:52:24.607 回答