C 矩形交点的计算

C 矩形交点的计算,c,geometry,C,Geometry,我试图创建一个程序,为两个矩形输入4个值(xmin,ymin,xmax,ymax),然后计算由两个矩形创建的矩形的(xmin,ymin,xmax,ymax)。基本上,我唯一遇到问题的部分是交叉部分 编辑:澄清一下,它给了我一个答案,这不是正确的答案。输入1144和2255会给我(1,1)(5,5),而不是我应该得到的(2,2)(4,4) #include <stdio.h> #include <stdlib.h> int readRect(int *xmin, int

我试图创建一个程序,为两个矩形输入4个值(xmin,ymin,xmax,ymax),然后计算由两个矩形创建的矩形的(xmin,ymin,xmax,ymax)。基本上,我唯一遇到问题的部分是交叉部分

编辑:澄清一下,它给了我一个答案,这不是正确的答案。输入1144和2255会给我(1,1)(5,5),而不是我应该得到的(2,2)(4,4)

#include <stdio.h>
#include <stdlib.h>

int readRect(int *xmin, int *ymin, int *xmax, int *ymax);
int maxInt(int *val1, int *val2);
int minInt(int *val1, int *val2);

int main(){
int x = 0;
int y = 0;
int a,b,c,d;
int xmin1, ymin1, xmax1, ymax1;
int xmin2, ymin2, xmax2, ymax2;


for(;;){
printf(">>enter two rectangles:\n");
x = readRect(&xmin1, &ymin1, &xmax1, &ymax1);
y = readRect(&xmin2, &ymin2, &xmax2, &ymax2);
    if (y == x){
        if (x != 4){
            break;
        }else {
            printf("Rectangle 1: (%d, %d) (%d, %d)\n", xmin1, ymin1, xmax1, ymax1);
            printf("Rectangle 2: (%d, %d) (%d, %d)\n", xmin2, ymin2, xmax2, ymax2);
        }
        a = maxInt(&xmin1, &xmin2);
        b = minInt(&xmax1, &xmax2);
        c = maxInt(&ymin1, &ymin2);
        d = minInt(&ymax1, &ymax2);
        printf("%d %d %d %d\n", a,b,c,d);
        if ((a < b) && (c < d)) {
            printf("Intersection rectangle: (%d,%d)(%d,%d)\n", a,c,b,d);
        } else {
            printf("These two rectangles do not intersect\n");
        }
    }

}
return EXIT_SUCCESS;
}

int readRect(int *xmin, int *ymin, int *xmax, int *ymax){
int noItemsRead;
fflush(stdout);
noItemsRead = scanf("%d %d %d %d", xmin, ymin, xmax, ymax);

return noItemsRead;
}

int minInt(int *val1, int *val2){
if (val1 < val2){
    return *val1;
} else {
    return *val2;
}

}

int maxInt(int *val1, int *val2){
if (val1 > val2){
    return *val1;
} else {
    return *val2;
}
}
#包括
#包括
int readRect(int*xmin,int*ymin,int*xmax,int*ymax);
int maxInt(int*val1,int*val2);
int minInt(int*val1,int*val2);
int main(){
int x=0;
int y=0;
INTA、b、c、d;
int xmin1,ymin1,xmax1,ymax1;
int xmin2,ymin2,xmax2,ymax2;
对于(;;){
printf(“>>输入两个矩形:\n”);
x=readRect(&xmin1,&ymin1,&xmax1,&ymax1);
y=readRect(&xmin2,&ymin2,&xmax2,&ymax2);
如果(y==x){
如果(x!=4){
打破
}否则{
printf(“矩形1:(%d,%d)(%d,%d)\n”、xmin1、ymin1、xmax1、ymax1);
printf(“矩形2:(%d,%d)(%d,%d)\n”、xmin2、ymin2、xmax2、ymax2);
}
a=maxInt(&xmin1,&xmin2);
b=最小值(&xmax1和&xmax2);
c=最大值(&ymin1,&ymin2);
d=最小值(&ymax1和&ymax2);
printf(“%d%d%d%d\n”,a、b、c、d);
如果((aval2){
返回*val1;
}否则{
返回*val2;
}
}

除了函数
maxInt
minInt
之外,一切都很好。将
if(val1
替换为
if(*val1<*val2)
if(val1>val2)
替换为
if(*val1>*val2)

int minInt(int *val1, int *val2){
    if (*val1 < *val2){
        return *val1;
    } 
    else {
        return *val2;
    }

}

int maxInt(int *val1, int *val2){
     if (*val1 > *val2){
         return *val1;
     } 
    else {
         return *val2;
}
int-minInt(int*val1,int*val2){
如果(*val1<*val2){
返回*val1;
} 
否则{
返回*val2;
}
}
int maxInt(int*val1,int*val2){
如果(*val1>*val2){
返回*val1;
} 
否则{
返回*val2;
}

修复了我的问题,如果我更改,它会发生在以下几行:

int minInt(int *val1, int *val2){
if (val1 < val2){
    return *val1;
} else {
    return *val2;
}

}

int maxInt(int *val1, int *val2){
if (val1 > val2){
    return *val1;
} else {
    return *val2;
}
}
int-minInt(int*val1,int*val2){
if(val1val2){
返回*val1;
}否则{
返回*val2;
}
}

int-minInt(int*val1,int*val2){
如果(*val1<*val2){
返回*val1;
}否则{
返回*val2;
}
}
int maxInt(int*val1,int*val2){
如果(*val1>*val2){
返回*val1;
}否则{
返回*val2;
}
}

在进行逻辑比较时必须添加点。

这是家庭作业问题!
基本上我唯一遇到问题的部分是交叉部分。
问题是什么?没有给出正确的值。如果我输入1 1 4,那么2 2 5 5,我得到(1 1)(5 5)。正确答案是(2 2)(4 4)事实上,我已经用了a,b,c,d来让眼睛更容易看。改变这条线仍然会产生相同的错误答案。输入1,4,2,25会产生(1,1)(5,5),而不是正确的答案,即(2,2)(4,4).Ya,刚刚抓到这个!谢谢。指针问题。我昨天也回答了同样的问题。你们有相同的作业吗?哈哈,这家伙有点毛骨悚然,他和我有相同作业中的一些其他问题。看起来它们肯定是在我的第一年计算机课程中!小世界:)。谢谢你们的帮助。评论的一半是针对OP的(“你不需要使用指针”)并且一半对你说(“一定要用指针来展示代码,但不建议在不必要的时候使用指针”,也许还有一些关于指针何时是好主意的指导方针——大型结构等等).这是对答案的建议补充。无论如何,这一点现在已在评论中讨论,不需要进一步讨论。
int minInt(int *val1, int *val2){
if (*val1 < *val2){
    return *val1;
} else {
    return *val2;
}

}

int maxInt(int *val1, int *val2){
if (*val1 > *val2){
    return *val1;
} else {
    return *val2;
    }
}