为什么我的结构无法在 C 中创建矩形?
Why does my structures fail to create a rectangle in C?
我接到了这个简单的任务:
- “矩形”结构必须由 2 个点定义 - 对角线的边缘。
必须设置以下功能:
A. 矩形输入。
B. 接收矩形及其面积 returns 的函数。
C. 接收一个矩形和一个点的函数。函数 returns 如果点在矩形内找到则为 TRUE,否则 returns FALSE。
这是我的代码:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
// ex1
typedef struct{
double x;
double y;
} Point;
typedef struct{
Point a;
Point b;
} Rect;
void ex1_1(Rect rect1);
double ex1_2(Rect rect1);
int ex1_3(Rect rect1, Point a);
int main()
{
Rect r;
Point p1 = {2, 2}, p2 = {10, 10};
ex1_1(r);
printf("%lf\n", ex1_2(r));
printf("%d\n", ex1_3(r, p1));
printf("%d\n", ex1_3(r, p2));
return 0;
}
void ex1_1(Rect rect1)
{
Point p1, p2;
printf("Enter the bottom left edge (x y): ");
scanf_s("%lf%lf", &p1.x, &p1.y);
printf("Enter the top right edge (x y): ");
scanf_s("%lf%lf", &p2.x, &p2.y);
rect1.a = p1; rect1.b = p2;
}
double ex1_2(Rect rect1)
{
return (rect1.b.x - rect1.a.x) *
(rect1.b.y - rect1.a.y);
}
int ex1_3(Rect rect1, Point p)
{
return rect1.a.x < p.x && p.x < rect1.b.x &&
rect1.a.y < p.y && p.y < rect1.b.y;
}
但是,当我 运行 我的程序只打印零时,这是为什么?
您将未初始化的变量传递给 ex_1_1
函数,这是未定义的行为。此外,将变量的副本传递给函数不会改变 main
.
中 r
的内容
传递指针:
void ex1_1(Rect *rect1);
int main()
{
Rect r;
Point p1 = {2, 2}, p2 = {10, 10};
ex1_1(&r);
...
}
void ex1_1(Rect *rect1)
{
Point p1, p2;
printf("Enter the bottom left edge (x y): ");
scanf("%lf%lf", &p1.x, &p1.y);
printf("Enter the top right edge (x y): ");
scanf("%lf%lf", &p2.x, &p2.y);
rect1->a = p1; rect1->b = p2;
}
我接到了这个简单的任务:
- “矩形”结构必须由 2 个点定义 - 对角线的边缘。 必须设置以下功能: A. 矩形输入。 B. 接收矩形及其面积 returns 的函数。 C. 接收一个矩形和一个点的函数。函数 returns 如果点在矩形内找到则为 TRUE,否则 returns FALSE。
这是我的代码:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
// ex1
typedef struct{
double x;
double y;
} Point;
typedef struct{
Point a;
Point b;
} Rect;
void ex1_1(Rect rect1);
double ex1_2(Rect rect1);
int ex1_3(Rect rect1, Point a);
int main()
{
Rect r;
Point p1 = {2, 2}, p2 = {10, 10};
ex1_1(r);
printf("%lf\n", ex1_2(r));
printf("%d\n", ex1_3(r, p1));
printf("%d\n", ex1_3(r, p2));
return 0;
}
void ex1_1(Rect rect1)
{
Point p1, p2;
printf("Enter the bottom left edge (x y): ");
scanf_s("%lf%lf", &p1.x, &p1.y);
printf("Enter the top right edge (x y): ");
scanf_s("%lf%lf", &p2.x, &p2.y);
rect1.a = p1; rect1.b = p2;
}
double ex1_2(Rect rect1)
{
return (rect1.b.x - rect1.a.x) *
(rect1.b.y - rect1.a.y);
}
int ex1_3(Rect rect1, Point p)
{
return rect1.a.x < p.x && p.x < rect1.b.x &&
rect1.a.y < p.y && p.y < rect1.b.y;
}
但是,当我 运行 我的程序只打印零时,这是为什么?
您将未初始化的变量传递给 ex_1_1
函数,这是未定义的行为。此外,将变量的副本传递给函数不会改变 main
.
r
的内容
传递指针:
void ex1_1(Rect *rect1);
int main()
{
Rect r;
Point p1 = {2, 2}, p2 = {10, 10};
ex1_1(&r);
...
}
void ex1_1(Rect *rect1)
{
Point p1, p2;
printf("Enter the bottom left edge (x y): ");
scanf("%lf%lf", &p1.x, &p1.y);
printf("Enter the top right edge (x y): ");
scanf("%lf%lf", &p2.x, &p2.y);
rect1->a = p1; rect1->b = p2;
}