为什么我的方法不能产生预期的输出?

时间:2017-03-10 16:05:46

标签: c

我正在做一个任务,我已经交了一个完整的程序,确定一个点是否在一个矩形内。主方法从用户收集数据,并调用“内部”方法进行必要的计算。

我的任务是重写main方法,而不是为“inside”方法提供一系列测试用例。然后,main方法记录哪些测试用例产生了错误的结果,并打印出来供用户阅读。

这是“内部”方法。

int inside(double x, double y, double x1, double y1, double x2, double, y2)
{
    int x_inside;
    int y_inside;

    if (x1 < x2)
        x_inside = x > x1 && x < x2;
    else
        x_inside = x > x2 && x < x1;
    if (y1 < y2)
        y_inside = y > y1 && y < y2;
    else
        y_inside = y > y2 && y < y1;
    return x_inside && y_inside;
} 

这是主要方法的一部分。它包含几个像这样的块,包含测试用例。

result = inside(1.00001, 1.00001, 1, 1, 2, 2);
char input1[119] = ("1.00001, 1.00001, 1, 1, 2, 2 \n");
if (result == 1); {
    printf("%s %s", errormessage, input1);
    totalErrors++; }

问题是该程序告诉我所有测试用例都会产生不正确的结果,无论我在“inside”方法中给出变量的值是什么。我很确定我在这里错过了一些非常简单的东西,但我无法弄明白。顺便说一下,我知道这里显示的测试用例都没有出现问题,但事实并非如此。我尝试将if (result == 1)部分更改为if (result == 0),但结果仍然是我有5个错误。

如果不清楚,请询问。

4 个答案:

答案 0 :(得分:0)

1:修复内部参数中的逗号位置。 除此之外,我测试了你的功能本身,它确实有效。 2:修复if语句中的半冒号。这也是一个问题,因为它也会运行你的错误。 3:如果您的目标是在广场内打印错误,请保留它。否则结果== 0应该就位。

if (true) /* runs this */;
{
    // and this
    printf("%s %s", errormessage, input1);
    totalErrors++; 
}

if (false) /* doesn't run this */;
{
    // but always runs this.
    printf("%s %s", errormessage, input1);
    totalErrors++; 
}

答案 1 :(得分:0)

  1. 当(x,y)位于(x1,y1)和(x2,y2)描述的矩形内时,inside方法返回1,否则返回0。您的代码将返回值1视为失败。

  2. 如上所述,您的inside方法无法编译。在&#39; double&#39;。

  3. 之后修复逗号
  4. 您可能会遇到实际测试用例的问题,因为您正在将比较与双打进行比较。不确定您的预期行为是什么,但请参阅this post了解详情。

答案 2 :(得分:0)

你可能想要这样的东西:

struct TestCase
{
  double x, y, x1, y1, x2, y2;  // values of test case
  int expected;                 // expected outcome of test
} TestCases[] =
{
  // list of test cases
  {1.00001, 1.00001, 1, 1, 2, 2,  1},
  {1.00001, 100,     1, 1, 2, 2,  0}
};

int main()
{
  int errors = 0;
  for (int i = 0; i < sizeof(TestCases) / sizeof(TestCases[0]); i++)
  {
    struct TestCase t = TestCases[i];

    printf("Test %d (%lf, %lf, %lf, %lf, %lf, %lf) ", i, t.x, t.y, t.x1, t.y1, t.x2, t.y2);

    if (inside(t.x, t.y, t.x1, t.y1, t.x2, t.y2) == t.expected)
      printf("passed\n");
    else
    {
      errors++;
      printf("failed\n");
    }
  }

  printf("%d errors encountered\n", errors);
}

现在,您可以在一个地方编写测试用例,并且可以根据需要添加任意数量的测试用例,而无需添加任何其他代码。

还要考虑Jamie Davis回答的第2点和第3点。

答案 3 :(得分:0)

错位npm pack仔细看看。

;

相同
  if (result == 1); {
    printf("%s %s", errormessage, input1);
    totalErrors++; }

OP可能想要

  if (result == 1); // why the ;?  Code has no effect

  // always print and increment error count
  printf("%s %s", errormessage, input1);
  totalErrors++;