我正在做一个任务,我已经交了一个完整的程序,确定一个点是否在一个矩形内。主方法从用户收集数据,并调用“内部”方法进行必要的计算。
我的任务是重写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个错误。
如果不清楚,请询问。
答案 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)
当(x,y)位于(x1,y1)和(x2,y2)描述的矩形内时,inside
方法返回1,否则返回0。您的代码将返回值1视为失败。
如上所述,您的inside
方法无法编译。在&#39; double&#39;。
您可能会遇到实际测试用例的问题,因为您正在将比较与双打进行比较。不确定您的预期行为是什么,但请参阅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++;