我已经设置并运行了我的函数,当我运行程序时,它只是跳到末尾,如果我按 Enter,它会要求我输入值,但将所有内容计算为 0.00。
我很确定它在我的范围内 “struct SEGMENTcalculate_segment_v1(struct SEGMENT s)”函数 或应输入值的函数。
感谢任何帮助!
#include <stdio.h>
#include <math.h>
double atan(double x);
struct POINT {
double x;
double y;
};
struct SEGMENT {
struct POINT p1;
struct POINT p2;
double length;
double angle;
};
double distance_of_points(struct POINT p1, struct POINT p2)
{
double length;
length = sqrt(pow((p1.x - p2.x), 2) + pow((p1.y - p2.y), 2));
return length;
};
double angle_x(struct POINT p1, struct POINT p2)
{
double angle;
double berechnung;
berechnung=(pow((p1.x - p2.x), 2)/(pow((p1.y - p2.y), 2)));
angle = atan(berechnung);
return angle;
}
void print_segment(struct SEGMENT s)
{
printf("\n--> Die Strecke verbindet die Punkte"
" (%.2f,%.2f) und (%.2f,%.2f);\n"
"--> Sie hat eine Laenge von %.4f;\n"
"--> Der Winkel betraegt: %.2f Grad.\n\n",
s.p1.x, s.p1.y, s.p2.x, s.p2.y, s.length, s.angle);
}
struct SEGMENT read_segment_v1()
{
struct SEGMENT s;
printf(">> Bitte Koordinaten x,y des ersten"
" Punktes der Strecke eingeben: ");
scanf ("%lf%lf", &s.p1.x, &s.p1.y);
printf(">> Bitte Koordinaten x,y des zweiten"
" Punktes der Strecke eingeben: ");
scanf ("%lf%lf", &s.p2.x, &s.p2.y);
return s;
}
struct SEGMENT calculate_segment_v1(struct SEGMENT s)
{
struct POINT X={s.p1.x, s.p1.y}, Y={s.p2.x ,s.p2.y};
s.length = distance_of_points(X, Y);
s.angle = angle_x(X, Y);
}
int main(void)
{
struct SEGMENT S;
char c;
double l;
while (1) {
printf("Bitte # eingeben fuer Programmende: ");
fflush(stdin);
scanf ("%c", &c);
if (c=='#') break;
S = read_segment_v1();
S = calculate_segment_v1(S);
print_segment(S);
}
printf("Ende des Programms\n");
return 0;
}
最佳答案
您的代码中存在错误。添加
return s;
到 calculate_segment_v1
函数的末尾来修复它。
PS:我忍不住要离题一下,除了这个特定的错误之外,您发布的代码在许多方面都相当糟糕。如果这是您在学习编码时编写的内容,请考虑更改您迄今为止所采取的学习路径。
关于计算中的 C 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53525466/