gpt4 book ai didi

c - 使用 C 中的函数

转载 作者:行者123 更新时间:2023-11-30 21:35:44 25 4
gpt4 key购买 nike

基本上,我正在尝试编写一个程序,您一次将 4 个 x,y 坐标输入到 1 个坐标中,并且在输入每一个坐标后都会验证该条目是否有效(一个数字),如果不是的话发送错误消息。然后,如果 8 个数字都有效,则检查 4 个坐标是否构成一个矩形。我已经完成了代码的两部分,但我的问题是,如何为第一部分创建一个函数,即输入 2 个数字 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);
}

所以我只想知道如何使用该函数检查矩形工作以返回“这是一个矩形”或“这不是一个矩形”

谢谢!!

最佳答案

如果您只想调用 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");
}

但是,正如其他人指出的那样,您的代码还存在一些其他问题:

  • 您的 main() 函数中没有 return 语句 - 它应该返回声明中指定的 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() 调用该函数四次以获取每个点。

关于c - 使用 C 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26690914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com