gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:27:06 26 4
gpt4 key购买 nike

我这里有一个函数,它从索引 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;
}

最佳答案

如果数组中的第一个元素不是您要查找的元素,您的代码会报告未找到该元素 - 它会在第一个循环过程中进入 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;
}

关于在c中搜索数组时找不到目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27179675/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com