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;
}

コード全体を追加すると、皆さんにとってより明確になるかもしれません。

4

3 に答える 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

于 2012-11-08T16:17:46.257 に答える
2

if (a<=b<=c)左から右に評価され、問題が発生しているため、使用できません。

3 番目の項と比較すると、最初はどちらかまたはa<=bどちらに評価されます01c

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.xANDs.A.y less than equal to T.y and T.y is less than equal to s.B.y

于 2012-11-08T16:17:42.170 に答える
1
  • 関数の戻り型がありません

  • を使用して境界を評価する必要があります

    ((s.A.x <= T.x) && (T.x <= s.B.x) && (s.A.y <= T.y) && (T.y <= s.B.y))
    
  • もう1つの問題は次のとおりです。関数のprintfで、is_inside(A、B)を再帰的に呼び出しています。if条件が真になると仮定すると、無限ループに陥ります。

    printf("Point (%f, %f)is inside rectangle \n", T.x, T.y);
    
于 2012-11-08T16:25:16.577 に答える