基本上我试图制作一个程序,你一次输入4 x,y坐标为1,在你输入的每个坐标之后验证该条目是否有效(一个数字),如果它不是&# 39;它发送错误信息。然后,如果所有8个数字都有效,则检查4个坐标是否形成矩形。我已经完成了代码的两个部分,但我的问题是,如何为第一部分创建一个函数,将4个数字输入4次然后将这些有效数字发送到我的下一个函数以验证矩形。这就是我所拥有的:
#include <stdio.h>
#include <stdbool.h>
//verifying point validity
int main(void)
{
int x1, y1, x2, y2, x3, y3, x4, y4;
printf("Enter point #1:\n");
if (scanf("%d%d", &x1,&y1)==2)
{
goto two;
}
else
{
printf("Invalid Entry\n");
}
two:
printf("Enter point #2:\n");
if (scanf("%d%d", &x2,&y2)==2)
{
goto three;
}
else
{
printf("Invalid Entry\n");
}
three:
printf("Enter point #3:\n");
if (scanf("%d%d", &x3,&y3)==2)
{
goto four;
}
else
{
printf("Invalid Entry\n");
}
four:
printf("Enter point #4:\n");
if (scanf("%d%d", &x4,&y4)==2)
{
goto next;
}
else
{
printf("Invalid Entry\n");
}
next:
}
//function for verifying rectangle
static bool IsRectangle(int x1, int y1, int x2, int y2,
int x3, int y3, int x4, int y4)
{
x2 -= x1; x3 -= x1; x4 -= x1; y2 -= y1; y3 -= y1; y4 -= y1;
return
(x2 + x3 == x4 && y2 + y3 == y4 && x2 * x3 == -y2 * y3) ||
(x2 + x4 == x3 && y2 + y4 == y3 && x2 * x4 == -y2 * y4) ||
(x3 + x4 == x2 && y3 + y4 == y2 && x3 * x4 == -y3 * y4);
}
所以我只想知道如何使用该函数检查要返回的矩形工作&#34;这是一个矩形&#34;或&#34;这不是一个矩形&#34;
谢谢!
答案 0 :(得分:2)
如果您只是想调用IsRectangle()
函数,只需在next:
和}
行之间添加以下代码:
if (IsRectangle(x1, y1, x2, y2, x3, y3, x4, y4))
{
printf("The points define a rectangle.\n");
}
else
{
printf("The points do NOT define a rectangle.\n");
}
但是,正如其他人指出的那样,您的代码还存在一些其他问题:
return
函数中没有main()
语句 - 它应返回声明中指定的int
。更具体地说,它应返回零以表示程序没有问题地结束。goto
语句没有做任何事情来防止无效条目。 else
代码部分将导致printf("Invalid Entry\n");
被触发,但代码仍然会继续到下一部分。另外,GOTO statements make Edsger W. Dijkstra sad。我建议将“点输入”代码重新分解为for
循环,为简单起见,将x / y值存储在数组中:
#include <stdio.h>
int main(int argc, char *argv[])
{
int x[4];
int y[4];
int i;
for (i = 0; i < 4; ++i)
{
printf("Please enter point %d: ", i+1);
while (scanf("%d %d", &x[i], &y[i]) != 2)
{
printf("Invalid point, try again: ");
while (getchar() != '\n') { /* Wait until RETURN is pressed. */ }
}
}
return 0;
}
或者,您可以将输入逻辑移动到单独的函数中,然后通过main()
调用四次以获取每个点。