如何检查数组的所有值是否等于0?

时间:2015-11-13 15:36:29

标签: c++ arrays

该计划的背景是涉及钉子和光盘的游戏。用户输入栓钉的数量(最多20个)和每个栓钉上的圆盘数量(最多10个)。考虑到有足够的光盘可以拆下那个挂钩,两个玩家会在每个转弯处来回移动任意数量的光盘。删除最后一张光盘的播放器丢失。

光盘的数量存储在一个数组中,其中数组的索引对应于挂钩编号。我有一个布尔函数,检查钉是否是空盘,暗示有人赢了。我的代码中存在一些逻辑错误,但我无法弄清楚它是什么:

bool checkPegs(int array[], int size)
{
  int checker(0);
  for (int i = 0; i < size; i++)
  {
      if(array[i] = 0)
      {
        return true;
      }
      else
      {
        return false;
      }
  }
}

5 个答案:

答案 0 :(得分:2)

bool checkPegs(int array[], int size)
{
  for (int i = 0; i < size; i++)
  {
      if(array[i] != 0)
      {
        return false;
      }
  }
  return true;
}

答案 1 :(得分:0)

if(array[i] = 0)

这不会将array[i]0进行比较, 0分配给array[i]。你想要array[i] == 0

if(array[i] == 0)
{
    return true;
}
else
{
    return false;
}

第二个问题是你只检查第一个元素,然后根据它返回。您应该检查每个元素以确保它们不为零:

for (int i = 0; i < size; i++)
{
    if(array[i] != 0) {
        return false;
    }
}

最后,您不处理size0的情况。在这种情况下,您应该返回true

bool checkPegs(int array[], int size)
{
    for (int i = 0; i < size; i++)
    {
        if(array[i] != 0) {
            return false;
        }
    }

    return true;
}

答案 2 :(得分:0)

这里有两个错误

bool checkPegs(int array[], int size)
{
  int checker(0);
  for (int i = 0; i < size; i++)
  {
      if(array[i] = 0) // the first one use '==' instead of '='
      {
        return true; // the second one, you are testing the first element only
      }
      else
      {
        return false;
      }
  }
}

这里应该如何

bool checkPegs(int array[], int size)
{

  for (int i = 0; i < size; i++)
  {
      if(array[i] )
          return false; // return false at the first found

  }
  return true; //all elements checked
}

答案 3 :(得分:0)

您编写代码的方式不起作用,因为您实际上只考虑第一个元素,因为return中有两个if/else语句。而且,您使用赋值语句而不是比较。

它遵循一个经过审查的例子:

bool checkPegs(int *array, int size) {
    for (int i = 0; i < size; i++) {
        if(array[i] != 0) { return false; }
    }
    return true;
}

请记住,它可以进行优化,您可以使用标准实用程序执行相同操作,但我认为您正在学习编码,因此值得为自己编写。

答案 4 :(得分:0)

尝试使用memcmp,而不要使用带有for循环的单独功能:

{{1}}