#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,°ree);
cart(&radius,°ree);
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;
}
答案 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);
}
您已声明了名为x
,y
和radians
的指针,但它们尚未指向任何内容。
所以,当你去参考&#39;他们使用*x
,*y
和*radians
来访问不存在的内存,这会导致未定义的行为,可能是分段错误。
我认为你的目标是从主函数中获取x
,y
和radians
以匹配那些,所以你应该将它们传递给函数好。
答案 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, °ree) == 2)
cart(radius, degree, &x, &y);
else
{
fprintf(stderr, "error: invalid input expexted <radius,degree>\n");
exit(1);
}
在您的原始实现中,您声明x
和y
作为指针,但您尚未初始化它们,因为您的意思是在函数中修改它们,您需要传递包含指针的指针您要修改的变量的地址,因为您使用运算符的&
地址。