2012-11-08 67 views
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; 
} 

添加整个代码也许它会更清楚地给你们。

回答

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 is less than equal to T.xT.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

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) 


* r比较 s.A.x<= T.x的esult然后比较 s.B.x

+0

我纠正它,但为什么printf的什么都不做? – AndriusK

+1

@Atskalunas我的猜测是你没有通过正确的价值观。在调试器中设置'if'行,并检查条件中使用的变量。 – dasblinkenlight

+0

以某封信为例:A,B表示在当前上下文中找不到。 – AndriusK

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你需要打印你的观点,而不是你递归地调用你的函数。 – bellati