#include <stdio.h>
int main(double x, double y, double x1, double y1, double x2, double y2)
{
// First corner (botton left) of the rectangle
printf("Choose x and y for the first corner that the rectangle should start:\n");
scanf("%lf%lf", &x1, &y1);
// Opposite corner(top right) that should make the rectangle possible
printf("Choose x and y for the first corner that the rectangle should end:\n");
scanf("%lf%lf", &x2, &y2);
// The position of the point that should be checked
printf("Choose the x and y that should be checked:\n");
scanf("%lf%lf", &x, &y);
if (x1 < x < x2 && y1 < y < y2)
{
return 5;
}
else if (x1 == x && x == x2 && y1 == y && y == y2)
{
return 3;
}
else
{
return 0;
}
system("pause");
}
我的计算有一个小问题。
我试图让程序告诉我一点是否在矩形内部,边缘还是外部,但是即使不在矩形内部,我也总是得到5的结果。
此外,我不确定是否要在某处提到“ double x,double y,...”,还是只写得像scanf
那样写?
答案 0 :(得分:0)
您应该尝试替换此测试
if (x1 < x < x2 && y1 < y < y2)
使用
if (x1 < x && x < x2 && y1 < y && y < y2)
关于第二项测试,除非x1 = x2和y1 = y2,即矩形实际上是一个点,否则它永远不会成立。替换为
else if ( (x1 == x || x == x2) && (y1 == y || y == y2))
答案 1 :(得分:0)
各种问题
如@StephaneM所示,x1 < x < x2
不正确。
// if (x1 < x < x2 && y1 < y < y2)
if (x1 < x && x < x2 && y1 < y && y < y2)
x1 < x < x2
测试x1 < x
是否为0或1。然后测试0_or_1 < x2
。不是OP所需要的。
main()
函数签名在函数头之后定义double
变量。
// int main(double x, double y, double x1, double y1, double x2, double y2) {
int main(void) {
double x, y, x1, y1, x2, y2;
x1 == x && x == x2 && y1 == y && y == y2
仅在矩形和点都是单个点时为真。
相反,请利用该点不在内部的优势。
if (x1 < x && x < x2 && y1 < y && y < y2) {
return 5; // inside
} else if (x1 <= x && x <= x2 && y1 <= y && y <= y2) { // include = in each compare
return 3; // on edge
} else {
return 0; // outside
}
代码也可能要交换x1,x2
x2 < x1
。与y1,y2
相同。