使用C中的函数

时间:2014-11-01 15:44:45

标签: c

基本上我试图制作一个程序,你一次输入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;

谢谢!

1 个答案:

答案 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()调用四次以获取每个点。