用户输入坐标 x,y 并查找坐标是否在给定矩形 c 的区域内的函数

function that the user inputs coordinates x,y and find if the coordinates are inside the area of an given rectangle c

#include <stdio.h>
char dentroRetangulo(int v1x, int v1y, int v2x, int v2y, int x, int y);
int main()
{
    int a, b, c, f,d,g,x,y;
    char D, h;
    
    printf("== Coordinates of a rectangle ==\n");
    printf("Inform the coordinates of the left inferior corner : \n");
    scanf("%d %d", &a, &b);
    printf("Inform the coordinates of the superior right corner: \n");
    scanf("%d %d", &c, &d);
    printf("=== points ===\n");
    printf("inform the coordinates of the point (x,y)\n");
    scanf("%d %d", &f, &g);
    h = dentroRetangulo(a,b,c,d,f,g);
    
    if(h == D)
    {
        printf("O ponto(%d, %d) encontra-se dentro  do retangulo", x, y);
    }
    
        return 0;
}
    
char dentroRetangulo(int v1x, int v1y, int v2x, int v2y, int x, int y)
{
    char D;
    char B;
    char F;
    if(x>v1x && x<v2x || y> v1y && y<v2y)
    {
        return D;
    }

所以基本上,这个函数是关于检查一个点是否在矩形内,矩形的下角 x、y 坐标为 v1x 和 v1y,上角坐标为 v2x 和 v2y,在主函数中用户应该输入 x 和 y 坐标来验证它们是否在其中,我有点像 C 语言的新手,但我已经花了一整天时间试图找出我在这里做错了什么,idk 也许我太愚蠢了看不到这里出了什么问题

你在一行中尝试了太多...这行太复杂了:

if(x>v1x && x<v2x || y> v1y && y<v2y)

也是错误的。应该是:

if(x>v1x && x<v2x && y> v1y && y<v2y)

但要避免这样的陈述...

通过编写更多代码行让事情变得简单。

但首先请注意,当点在外部时,像这样的函数应该 return 0(又名 false),当它在内部时 1(又名 true)。

为了简单起见,请执行以下操作:

int dentroRetangulo(int v1x, int v1y, int v2x, int v2y, int x, int y)
{
    if (x < v1x) return 0;  // If the point is to the left, return 0
    if (x > v2x) return 0;  // If the point is to the rigth, return 0
    if (y < v1y) return 0;  // If the point is below, return 0
    if (y > v2y) return 0;  // If the point is above, return 0

    return 1; // The point is inside, return 1
}

每行一个简单的检查可以使您的代码更加简单。

main 中这样称呼它

if(dentroRetangulo(a,b,c,d,f,g))
{
    printf("O ponto(%d, %d) encontra-se dentro  do retangulo", f, g);
}

发布的代码有一些问题,但主要问题似乎是由一些基本的误解引起的。

// The following will declare, but WON'T initialize two variables
// of type 'char'. Here, D, is the NAME of the variable, not its content,
// which is indeterminated.
char D, h; 

// Here h is assigned the value returned by OP's function, which has the 
// exact same issue noted before. Its value will still remain indeterminated.
h = /* ... */;

// Comparing two variables with indeterminated values has undefined behavior.
if ( h == D ) { /* ... */ }

如果打算编写一个函数,当点在矩形内时 returns char 值为 'D''F' 否则(可能 'B' 如果它在其中一个边缘上),以下可能是一种可能的实现方式。

typedef struct point_s
{
    int x, y;
} Point;

char point_rectangle_intersection(Point bottom_left, Point top_right, Point p)
{
    // Check if the point is outside.
    if ( p.x < bottom_left.x  ||  p.x > top_right.x  ||
         p.y < bottom_left.y  ||  p.y > top_right.y )
        return 'F';
    
    // Check if the point is on one of the edges.
    if ( p.x == bottom_left.x  ||  p.x == top_right.x  ||
         p.y == bottom_left.y  ||  p.y == top_right.y )
        return 'B';

    // The point is inside.
    return 'D';    
}