在c中搜索数组时找不到目标

时间:2014-11-27 22:53:26

标签: c arrays struct target

我在这里找到了一个函数,它找到了" target"一个数组,从索引0开始,如果找到它,将* i设置为该值。当我运行代码时,我尝试使用target = 127,并且数组为[20,127,30,4]。 127在数组中,但我的测试程序说目标无法在数组中找到。有人知道为什么我的程序找不到目标,即使我已经有ia> data [x] == target?

这是我创建的结构:

typedef struct {
  int* data;
  unsigned int len;
} intarr_t;

这是我搜索目标函数的代码:

intarr_result_t intarr_find( intarr_t* ia, int target, int* i )
{
    unsigned int len = ia->len;
    if (ia == NULL)
    {
        return INTARR_BADARRAY;
    }
    else
    {
        for (int x = 0; x < len; x++)
        {
            if ((ia->data[x] == target) && (i != NULL))
            {
                *i = x;
                return INTARR_OK;
            }
            else
            {
                return INTARR_NOTFOUND;
            }
        }
    }
    return 0;
}

2 个答案:

答案 0 :(得分:1)

如果数组中的 first 元素不是您要查找的元素,则代码会报告找不到元素 - 它会在第一个循环传递期间运行到else分支并返回来自函数的INTARR_NOTFOUND

相反,您必须检查所有元素,并且仅报告在循环结束失败后未找到任何内容。例如:

intarr_result_t intarr_find( intarr_t* ia, int target, int* i )
{
  if (ia == NULL)
  {
    return INTARR_BADARRAY;
  }
  else
  {
    for (int x = 0; x < ia->len; x++)
    {
      // Condition here also fixed: Before, if i was NULL,
      // nothing would ever be found.
      if (ia->data[x] == target)
      {
        if(i != NULL) {
          *i = x;
        }

        return INTARR_OK;
      }
    }
  }

  return INTARR_NOTFOUND;
}

答案 1 :(得分:0)

你还没有搜索整个数组 - 无论如何都会返回第一个元素。

intarr_result_t intarr_find( intarr_t* ia, int target, int* i )
{
    if (ia == NULL || i == NULL)
        return INTARR_BADARRAY;
    for (int x = 0; x < ia->len; x++)
    {
        if (ia->data[x] == target)
        {
            *i = x;
            return INTARR_OK;
        }
    }
    return INTARR_NOTFOUND;
}