C 尝试将包含两个元素的结构传递给函数(不使用指针),以获得两个元素的新输出
所以我写了一段代码来翻译x和y的一个点,它们是一个结构的元素,在x方向,y方向,并根据用户输入的x,y和θ角,围绕原点旋转。我如何通过旋转函数传递结构(不使用指针,因为我们还没有讨论),谢谢。代码如下,谢谢C 尝试将包含两个元素的结构传递给函数(不使用指针),以获得两个元素的新输出,c,function,C,Function,所以我写了一段代码来翻译x和y的一个点,它们是一个结构的元素,在x方向,y方向,并根据用户输入的x,y和θ角,围绕原点旋转。我如何通过旋转函数传递结构(不使用指针,因为我们还没有讨论),谢谢。代码如下,谢谢 #include <stdio.h> #include <math.h> typedef struct { float x; float y; }coordinate; float xNew(float x, float x2); float yNew(fl
#include <stdio.h>
#include <math.h>
typedef struct
{
float x;
float y;
}coordinate;
float xNew(float x, float x2);
float yNew(float y, float y2);
coordinate Rotate( coordinate pointA, float angle);
void main()
{
coordinate pointA;
float x,y,x2,y2, theta;
coordinate newpoints;
printf("Enter coordinates>");
scanf("%f%f", &pointA.x, &pointA.y);
printf("Enter x offset>");
scanf("%f", &x2);
x = xNew(pointA.x, x2);
printf("Enter y offset>");
scanf("%f", &y2);
y = yNew(pointA.y, y2);
printf("Enter rotation value in degrees");
scanf("%f", &theta);
newpoints = Rotate(pointA, theta);
printf("offsets were %f%f\n",x2,y2 );
printf("new coords are%f%f\n", x,y);
pointA.x = x;
pointA.y = y;
printf("struc coords are%f%f", pointA.x, pointA.y);
return;
}
float xNew(float x, float x2)
{
float xpos;
xpos = x+x2;
return(xpos);
}
float yNew(float y, float y2)
{
float ypos;
ypos = y + y2;
return(ypos);
coordinate Rotate( pointA, float angle)
{
coordinate pointA;
float theta;
pointA.x = cos(theta)*pointA.x - sin(theta)*pointA.y;
pointA.y = sin(theta)*pointA.x + cos(theta)*pointA.y;
return(pointA);
}
}
#包括
#包括
类型定义结构
{
浮动x;
浮动y;
}协调;
浮动x新(浮动x,浮动x2);
浮动yNew(浮动y,浮动y2);
坐标旋转(坐标点A、浮动角度);
void main()
{
坐标点A;
浮点数x,y,x2,y2,θ;
协调新点;
printf(“输入坐标>”;
scanf(“%f%f”、&pointA.x和&pointA.y);
printf(“输入x偏移量>”;
扫描频率(“%f”和x2);
x=xNew(点A.x,x2);
printf(“输入y偏移量>”;
扫描频率(“%f”和“y2”);
y=yNew(点a.y,y2);
printf(“以度为单位输入旋转值”);
扫描频率(“%f”和θ);
新点=旋转(点A,θ);
printf(“偏移量为%f%f\n”,x2,y2);
printf(“新坐标为%f%f\n”,x,y);
点a.x=x;
点a.y=y;
printf(“结构坐标为%f%f”,点A.x,点A.y);
回来
}
浮动x新(浮动x,浮动x2)
{
浮动XPO;
xpos=x+x2;
返回(xpos);
}
浮动yNew(浮动y,浮动y2)
{
浮动YPO;
ypos=y+y2;
回报率(YPO);
坐标旋转(点A、浮动角度)
{
坐标点A;
浮动θ;
点a.x=cos(θ)*点a.x-sin(θ)*点a.y;
点a.y=sin(θ)*点a.x+cos(θ)*点a.y;
返回(点A);
}
}
编辑:发布更新的代码,只得到一个错误
错误:“浮动”之前应为“)”
坐标旋转(点A、浮动角度)
我不知道发生了什么首先,尝试缩进代码以提高可读性。 第二,这是我的第一个答案,请耐心等待 现在,我注意到的第一个错误是:
float yNew(float y, float y2)
{
float ypos;
ypos = y + y2;
return(ypos);
coordinate Rotate( pointA, float angle)
{
coordinate pointA;
float theta;
pointA.x = cos(theta)*pointA.x - sin(theta)*pointA.y;
pointA.y = sin(theta)*pointA.x + cos(theta)*pointA.y;
return(pointA);
}
}
Rotate
函数似乎是嵌套的pointA
已用作参数(未声明类型),然后您将在函数中重新声明它theta
正在声明并未初始化使用。事实上,它是一个冗余变量
pointA
声明时不带类型<代码>坐标float yNew(float y, float y2)
{
float ypos;
ypos = y + y2;
return(ypos);
}
coordinate Rotate(coordinate pointA, float angle)
{
coordinate pointB;
pointB.x = cos(angle)*pointA.x - sin(angle)*pointA.y;
pointB.y = sin(angle)*pointA.x + cos(angle)*pointA.y;
return(pointB);
}
您已经声明了newpoints
,但从未使用过它。因此,输出值是原始结构(输入值)。试试这个:
printf("Enter rotation value in degrees");
scanf("%f", &theta);
newpoints = Rotate(pointA, theta);
printf("offsets were %f%f\n",x2,y2 );
printf("new coords are%f%f\n", x,y);
printf("struc coords are%f %f", newpoints.x, newpoints.y);
不过,我没有检查转换公式。很抱歉,这是旧的,新代码出现了,我不知道如何将我的pointA struc传递给函数,以便在旋转时获得新坐标。@TomKarzes。你发布所有这些代码只是为了问语法错误吗?如果是这样,请逐字逐句地发布整个错误消息。是的,有代码有助于找到问题,我认为发布一个简单的示例有助于找到问题。如果有什么问题的话,发布你的实际项目会让它变得模糊。我只是在发布之前注意到了最好的结果,谢谢你的建议,我更新了代码(我知道我哪里出错了),它仍然会给出相同的语法错误:/在哪一行你会得到错误?因为在我的IDE(Eclipse)中,它没有显示此类错误。它的第61:26I行使用{}关闭了yNew函数,但是我仍然得到了错误它现在可以工作了!)非常感谢。所以坐标点a可以读作一个参数,比如“输入一个类似坐标的结构”?