如何解决如何通过这个测试用例?有人也可以解释我错过了什么吗?
这是测试功能:
intA = intB = 0;
printf("TEST-2: ");
intA = getIntPositive(NULL);
if (intA == TEST_INT)
{
printf("<PASSED>\n");
}
else
{
printf("<!!! FAILED !!!>\n");
fail++;
}
这是我编写的用于获取正整数并返回它的函数:
int getIntPositive(int *num) {
do
{
scanf("%d",num);
if (*num <= 0)
{
printf("ERROR: Enter a positive value:");
}
} while (*num <= 0);
return *num;
}
解决方法
您显示的测试不完整(它没有完全测试函数),并且您显示的测试不完整(您没有显示提供给函数的输入)。您也没有显示函数的规范(描述它应该如何表现)。
我们可以从你展示的测试代码中看出:
- 该函数传递了一个指针参数。
- 在某个输入未知且参数为空指针的测试用例中,该函数应返回值
TEST_INT
。
从您为 getIntPositive
显示的源代码中,我们可以看出它可能无法通过此测试用例,因为它使用给定的参数来访问内存,即使给定了一个空指针。对于 scanf("%d",num);
,scanf
必须传递一个指向 int
的指针,而不是空指针。并且,在 if (*num <= 0)
中,当 *num
为空指针时使用 num
的行为不是由 C 标准定义的。
解决这个问题的一种方法是简单地忽略参数并使用另一个 int
从输入流中获取一个值并返回它:
int getIntPositive(int *num)
{
do
{
int x;
scanf("%d",&x);
if (x <= 0)
{
printf("ERROR: Enter a positive value:");
}
} while (x <= 0);
return x;
}
此代码可能会通过该特定测试。但是,有几个问题仍未得到解答:
- 当参数为空指针时,代码应该做什么?当参数不是空指针时,它应该做什么?
- 函数是否应该循环直到它得到一个正值?
- 如果输入流中出现错误(包括文件尾)或
scanf
中的匹配失败(有输入,但与十进制数字不匹配),函数应该怎么做看起来像)。
关于问题 1,一些接受指针并返回值的函数提供该值作为函数返回值和指向位置,如果指针为空,则跳过该部分。如果是这样,最后可以修改上面的代码:
if (num)
*num = x;
return x;
}
然而,另一种可能是扫描值应该在*num
中返回,如果num
为非空,并且返回值应该是状态码。如果数字扫描成功,则它可能应该是 0;如果匹配失败,则它应该是 TEST_INT
;如果存在输入流错误,则它应该是其他东西。
同样,关于问题 2 和 3,我们也不知道。编写一个正确的函数需要有一个函数应该做什么的规范。我们甚至不知道这个测试用例中的输入是什么。它是文件末尾的空输入流吗?是否输入了一些负数后跟正数?是输入完全不匹配十进制数字吗?您展示的有关测试用例的内容中缺少关键信息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。