我在这里找到了一个函数,它找到了" 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;
}
答案 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;
}