#include <stdio.h>
#include <conio.h>
#include <math.h>
int main(void)
{
int x,y,g,f,r,X=0,Y=0;
double res=0;
printf("\nEnter the x and y coordinate of the point separated by a space");
scanf("%d %d",&x,&y);
printf("\nEnter the coordinates of the center of the circle ");
scanf("%d %d",&g,&f);
printf("\nEnter the radius of the circle");
scanf("%d",r);
X=x-g;
Y=y-f;
res=(pow((double)X,2.0)+pow((double)Y,2.0)-pow((double)r,2.0));
printf("%lf",res);
if(res>0)
printf("\nThe point lies inside the circle");
else if(!res)
printf("\nThe point lies on the circle ");
else if(res>0)
printf("\nThe point lies outside the circle");
getch();
return 0;
}
上面的代码是一个程序来检查一个点是否位于一个圆圈内(并且我被特别要求使用C的幂函数)。我正在使用MinGW(截至2013年6月14日的最新版本)来编译我的程序Windows 7操作系统。
程序编译时没有任何错误或警告。
但是,当我在命令提示符下运行它时,一旦我输入了所有细节,程序就会突然终止。由于下一步是计算res
,我认为电源功能的使用存在错误。请指出相关的错误。
答案 0 :(得分:2)
scanf("%d",r);
应为scanf("%d", &r);
总是用警告编译,我的编译器立即指出了问题:
warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘int’ [-Wformat]
答案 1 :(得分:2)
程序编译时没有任何错误或警告
的 FAKE 强> 的
您不能使用-Wall
进行编译,是吗?
quirk.c:12:11: warning: format specifies type 'int *' but the argument has type 'int' [-Wformat]
scanf("%d",r);
~^ ~
quirk.c:12:14: warning: variable 'r' is uninitialized when used here [-Wuninitialized]
scanf("%d",r);
^
quirk.c:5:16: note: initialize the variable 'r' to silence this warning
int x,y,g,f,r,X=0,Y=0;
^
= 0
C仍然是一种仅按值传递的语言。为了使scanf()
能够修改其参数,您需要传递指向该变量的指针。但是不是有效的指针,而是传入一个未初始化的整数,然后它会尝试取消引用作为指针并且 Boom!会出现段错误。
更改
scanf("%d",r);
到
scanf("%d", &r);
(并插入一些垂直空间,这将使您的程序可读。)