电源功能运行时错误

时间:2013-06-14 06:19:26

标签: mingw

#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,我认为电源功能的使用存在错误。请指出相关的错误。

2 个答案:

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

(并插入一些垂直空间,这将使您的程序可读。)