2013-06-14 6 views
-3
#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 (последняя версия от 6/14/2013), чтобы скомпилировать мою программу, ОС Windows 7.Ошибка выполнения функции питания

Программа компилируется без каких-либо ошибок или предупреждений.

Однако, когда я запускаю его в командной строке, программа внезапно завершается, как только я введу все детали. Поскольку следующим шагом является вычисление res, я понял, что есть ошибка в использовании функции питания. Пожалуйста, укажите соответствующие ошибки.

+0

Что говорит отладчик? –

+1

offtopic, но я знаю, что вас попросили использовать pow, но не используйте 'pow ((double) X, 2.0)', когда вы можете просто написать '(double) X * X' (для следующего раза). –

+0

Извините, я упускал из виду очевидное, в то время как в спешке, (ROOKIE ЗДЕСЬ), но вопрос не может быть удален сейчас, я думаю – rootavish

ответ

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! Там идет segfault.

Изменить

scanf("%d",r); 

в

scanf("%d", &r); 

(А вставить некоторое вертикальное пространство, было бы сделать вашу программу для чтения.)

2

scanf("%d",r); должен быть scanf("%d", &r);

Всегда компилировать с предупреждениями, мой компилятор сразу указал на проблему:

warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘int’ [-Wformat]

Смежные вопросы