为什么我的结构无法在 C 中创建矩形?

Why does my structures fail to create a rectangle in C?

我接到了这个简单的任务:

  1. “矩形”结构必须由 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;
}