矩形内的点

3
我想问一下这个函数是否正确。它应该检查点是否在矩形内,如果是,则打印出来。
#include <stdio.h>
#include <stdlib.h>

typedef struct {
  int x;
  int y;
}point;

typedef struct {
  point A;
  point B;
}rectangle;

int main() {
rectangle s;
point T;
printf("Enter rectangle A point x coordinate :\n" );
scanf("%d", &s.A.x);
printf("Enter rectangle A point y coordinate :\n" );
scanf("%d", &s.A.y);
printf("Enter rectangle B point x coordinate :\n" );
scanf("%d", &s.B.x);
printf("Enter rectangle B point y coordinate :\n" );
scanf("%d", &s.B.y);    
printf("\nrectangle - A(%d, %d), B(%d, %d) \n", s.A.x, s.A.y, s.B.x, s.B.y );

for(int i =0; i<2; i++){ 
printf ("X: ");
scanf ("%d", &T.x);
printf ("Y: ");
scanf ("%d", &T.y);
} 

int is_inside(point A, point B){
if((s.A.x <= T.x) && (T.x <= s.B.x) && (s.A.y <= T.y) && (T.y <= s.B.y)) printf("Point (%d, %d)is inside rectangle \n",T.x, T.y);
else printf("No");
}
return 0;
}

我已经添加了整个代码,这样你们可能更清楚了。

3个回答

7

这个函数是错误的。虽然它可以编译,但它并没有实现你想要的功能*

像这样的数学条件

x0 <= X <= x1

C语言中,以下是对应的写法:

x0 <= X && X <= x1

你的条件应该是这样的:

你的条件应该像这样:

if (s.A.x<=T.x && T.x<=s.B.x && s.A.y<=T.y && T.y<=s.B.y)


* 将比较 s.A.x<= T.x 的结果与 s.B.x 进行比较。


1
@Atskalunas 我猜你没有传递正确的值。在调试器中,在if语句所在的行上设置一个断点,并检查条件中使用的变量。 - Sergey Kalinichenko
在某些字母上,例如:A,B,它会显示“当前上下文未找到”。 - AndriusK

2

您不能使用 if (a<=b<=c),因为它从左到右进行评估,这会导致问题。

首先,a<=b 评估为 01,再与第三个术语 c 进行比较

请使用 a<=b && b<=c 语法

因此,在您的情况下,应该像这样:

if ((s.A.x <= T.x) && (T.x <= s.B.x ) && (s.A.y <=T.y )&& (T.y <= s.B.y))

这个语句表示 s.A.x 小于等于 T.xT.x 小于等于 s.B.x 并且 s.A.y 小于等于 T.y 且 T.y 小于等于 s.B.y

1
  • 您缺少函数的返回类型

  • 您需要使用以下代码评估边界

    ((s.A.x <= T.x) && (T.x <= s.B.x) && (s.A.y <= T.y) && (T.y <= s.B.y))
    
  • 另一个问题是: 在您的函数printf中,您正在递归调用is_inside(A,B)。假设if条件为真,您将陷入无限循环。

    printf("Point (%f, %f)is inside rectangle \n", T.x, T.y);
    

1
@Atskalunas,你需要使用printf打印你的分数,而不是递归调用函数。 - bellati

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接