为什么我在测试中得到'0'作为返回值?

时间:2013-05-30 03:59:20

标签: c min

我必须编写一个程序,找到参数列表中五个整数中最小的一个。这是我的代码:

int min5(int a, int b, int c, int d, int e)
{
   int answer;

   if (a < b && a < c && a < d && a < e)
   {
      answer = a;
   }
   else if (b < a && b < c && b < d && b < e)
   {
      answer = b;
   }
   else if (c < a && c < b && c < d && c < e)
   {
      answer = c;
   }
   else if (d < a && d < b && d < c && d < e)
   {
      answer = d;
   }
   else if (e < a && e < b && e < c && e < d)
   {
      answer = e;
   }
   return answer;
}

这是我的测试用例:

void min5_tests(void)
{
   int a, b, c, d, e, result;

   a = 1;
   b = 4;
   c = 2;
   d = 7;

   result = min5(a, b, c, d, e);
   checkit_int(result, 1);
}

int main()
{
   min5_tests();

   return 0;
}

当我运行我的测试时,它表示该值应为0而不是我预期的值,1。我认为我的代码是正确的,但我猜不是。 :(我不知道为什么会这样。

3 个答案:

答案 0 :(得分:1)

好吧,你没有初始化e一个开始,所以它将被设置为一个不确定的值,可能为零。

这也是......我们应该说,不是优雅的代码(没有冒犯的意图)来寻找最小值,除了在所有输入值相等时将返回的单位化值(没有{{1语句将是真的)。您可以使用if而不是<=来解决这个问题,但它会更具可读性:

<

答案 1 :(得分:1)

你没有给出一个价值。尝试设置e = 10;

答案 2 :(得分:0)

e未初始化,这也是一个相当,错误,不健康的代码。 此外,如果最小值由两个或多个变量共享,则代码可能会出现问题。 尝试初始化一个变量的答案,然后将答案的值与每个其他变量进行比较。换句话说,这里没有其他陈述,因为它必须将答案与所有​​其他4个变量进行比较,一次一个。