我试图创建一个程序,为2个矩形取4个值(xmin,ymin,xmax,ymax),然后计算由两个矩形创建的矩形的(xmin,ymin,xmax,ymax)。基本上我遇到麻烦的唯一部分就是交叉部分。
编辑:澄清,它给了我一个答案,这不是正确的答案。在1 1 4 4和2 2 5 5中打孔给我(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;
}
}
答案 0 :(得分:2)
maxInt
和minInt
之外,每件事都很好。将if (val1 < val2)
替换为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;
}
答案 1 :(得分:1)
解决了我的问题,如果我改变了,就会发生以下几行:
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 (*val1 < *val2){
return *val1;
} else {
return *val2;
}
}
int maxInt(int *val1, int *val2){
if (*val1 > *val2){
return *val1;
} else {
return *val2;
}
}
在进行逻辑比较时必须添加点。