我有一个我不明白的错误代码:
format %d expects type int, but argument 2 has type int *
我不知道int
和int *
之间的区别。我不知道有int
的不同类型,并且在关于printf
和scanf
关键字母的网页上找不到任何关于它的说明。
代码如下:
#include <stdio.h>
#include <math.h>
int main(void)
{
int X = 0, Y = 0, A = 0, D = 0;
printf("This program computes the area of a rectangle ");
printf("and its diagonal length.");
printf("Enter Side 1 dimentions: ");
scanf("%d", &X);
printf("Enter Side 2 dimentions: ");
scanf("%d", &Y);
/* Calc */
A = X * Y;
D = pow(X,2) + pow(Y,2);
D = pow(D, 1 / 2);
/* Output */
printf("Rectangle Area is %d sq. units.", &A);
printf(" Diagonal length is %d.", &D);
return 0;
}
该错误引用了最后两个printf&#39>:
printf("Rectangle Area is %d sq. units.", &A);
printf(" Diagonal length is %d.", &D);
此外,该程序最初使用浮点数编写(将X,Y,A和D声明为浮点数并使用%f)。但这给出了一个更奇怪的错误代码:
格式%f期望类型为double,但参数2的类型为float *
我知道%f用于双打和浮动,所以我无法理解为什么会出现这个错误。在我得到关于浮点数/双打的错误代码后,我尝试将所有内容更改为int(如上面的代码所示),只是为了检查。但是这个帖子的顶部提供了错误代码,我也不明白。
我一直在使用gcc编译器。 有人会解释做错了什么吗?
答案 0 :(得分:4)
问题在于您尝试将指针传递给printf
函数。这是您的代码的样子:
printf("Rectangle Area is %d sq. units.", &A);
printf(" Diagonal length is %d.", &D);
A
是int变量,但&A
是指向int变量的指针。你想要的是这个:
printf("Rectangle Area is %d sq. units.", A);
printf(" Diagonal length is %d.", D);
答案 1 :(得分:1)
int *表示int对象的指针。这就是你得到的,因为你使用&amp;变量名之前(即代码中的&amp; A)
您可以阅读this以了解有关指针和参考的更多信息,但基本上如果省略&amp;在变量名之前,它会正常工作。
答案 2 :(得分:0)
为什么将指针传递给printf(“...%d ...”,&amp; D)?
看一下指针说明: http://www.codeproject.com/Articles/627/A-Beginner-s-Guide-to-Pointers
简化printf()手册: http://www.cplusplus.com/reference/cstdio/printf/
int d = 1;
printf("I'm an integer: %d", 42); // OK, prints "...42"
printf("I'm an integer too: %d", d); // OK, prints "...1"
printf("I'm a pointer, I have no idea why you printing me: %p", (void*)&d); // OK, prints "...<address of d>", probably not what you want
printf("I'm compile-time error: %d", &d); // Fail, prints comiper error: 'int' reqired, but &d is 'int*'