C编程中的指针 - 坐标转换

时间:2015-03-17 01:11:50

标签: c pointers

我应该编写一个程序,将笛卡尔坐标转换为Polar,反之亦然,使用指针,我写了下面的代码,但我的函数给了我分段错误。我试图在没有指针的情况下这样做但仍然没有将我的数字发送到函数,有人可以帮助修改我的指针代码吗?我是C的新人。

#include <stdio.h>
#include <math.h>

void cart(float *radius,float *degree)
{
    float *x,*y,*radians;
    *radians= (3.14159265359/180) * *degree;
    *x= *radius * cos(*radians); 
    *y= *radius * sin(*radians);
}

int main()
{
    float radius, radians, degree;
    float x,y;
    int M;
    char C,P;
    printf(" Enter C if you are converting Cartesian to Polar \n"); 
    printf(" Enter P if you are converting Polar to Cartesian \n");
    scanf("%c",&M);

    if (M=='P')
    {
        printf("Enter the Radius and Angle separated by comma \n");
        scanf("%f,%f",&radius,&degree);
        cart(&radius,&degree);
        printf("Cartesian form is (%f,%f) \n",x,y);
    }
    else if (M=='C')
    {
        printf("Enter values of X and Y separated by comma \n");
        scanf("%f,%f",&x,&y);
        radius=sqrt(((x*x)+(y*y))); // finding radius 
        radians=atan(y/x); //finding angle in radians
        printf("Polar form is (%f,%f) \n",radius,radians); //angle is in radians
    }

    return 0;
}

2 个答案:

答案 0 :(得分:2)

首先要注意的是你的购物车&#39;功能:

void cart(float *radius,float *degree)
{
float *x,*y,*radians;
*radians= (3.14159265359/180) * *degree;
*x= *radius * cos(*radians); 
*y= *radius * sin(*radians);
}

您已声明了名为xyradians的指针,但它们尚未指向任何内容。

所以,当你去参考&#39;他们使用*x*y*radians来访问不存在的内存,这会导致未定义的行为,可能是分段错误。

我认为你的目标是从主函数中获取xyradians以匹配那些,所以你应该将它们传递给函数好。

答案 1 :(得分:0)

我认为你的意思是:

void cart(float radius, float degree, float *x, float *y)
 {
    float radians;
    if ((x == NULL) || (y == NULL))
        return;
    radians = 3.14159265359 / 180.0 * degree;
    *x      = radius * cos(radians); 
    *y      = radius * sin(radians);
 }

并像这样称呼它

float x, y, radius, degree;

if (scanf("%f,%f", &radius, &degree) == 2)
    cart(radius, degree, &x, &y);
else
 {
    fprintf(stderr, "error: invalid input expexted <radius,degree>\n");
    exit(1);
 }

在您的原始实现中,您声明xy作为指针,但您尚未初始化它们,因为您的意思是在函数中修改它们,您需要传递包含指针的指针您要修改的变量的地址,因为您使用运算符的& 地址。