我想问一下这个功能是否正确。它应检查点是否在矩形内部,如果是,则将其打印出来。
#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;
}
添加整个代码可能对你们来说更清楚。
答案 0 :(得分: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 :(得分:2)
你不能使用if (a<=b<=c)
,因为它从左到右进行评估,这会导致你出现问题。
首先a<=b
评估为0
或1
,再次与第三项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 is less than equal to T.x
和T.x is less than or equal to s.B.x
AND s.A.y less than equal to T.y and T.y is less than equal to s.B.y
答案 2 :(得分: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);