C 线性搜索代码显示我的项目不存在。请帮助我更正

C 线性搜索代码显示我的项目不存在。请帮助我更正,c,algorithm,linear-search,C,Algorithm,Linear Search,这是用于线性搜索的函数,其中我只取一个变量x,它是用于搜索项目变量的变量 代码中的逻辑错误- 您代码的以下部分不正确- if(x==arr[i]) { return i } else return -1 在第一次传递时,如果条件计算为false,则返回-1 正确代码- int lsrch(int x) { int i; int arr[6] = {2,4,5,76,2,1}; for(i=0;i<=

这是用于线性搜索的函数,其中我只取一个变量x,它是用于搜索项目变量的变量


代码中的逻辑错误- 您代码的以下部分不正确-

  if(x==arr[i])
   {
       return i
    }
    else 
         return -1
在第一次传递时,如果条件计算为false,则返回-1

正确代码-

int lsrch(int x)
   {
    int i;
    int arr[6] = {2,4,5,76,2,1};
    for(i=0;i<=5;i++)
   {
      if(x==arr[i])
      {
        return i;
      }

   }
       return -1;
   }

  int main()
  {
      int a,b;
      a=lsrch(76);
  return 0;
  }
intlsrch(intx)
{
int i;
int-arr[6]={2,4,5,76,2,1};

对于(i=0;i而言,问题在于您过早地脱离了循环

int lsrch(int x)
{   
    int i;
    int arr[6] = {2,4,5,76,2,1};
    for(i=0;i<5;i++)
    {
        if(x==arr[i])
        {
            return i;
        }
        else
            return -1;      // Incorrect
    }
}
这意味着,在循环完成的情况下,您不会返回任何内容-导致未定义的行为


解决方案是延迟
返回-1
,直到循环耗尽
arr
中的所有值

此外,循环在
i==5
时终止,但您尚未检查
arr
中的最后一个数字。让我们使用宏来避免硬编码此值

#define ARRAY_LEN(x)    (sizeof(x) / sizeof(x[0]))

int lsrch(int x)
{   
    int i;
    int arr[] = {2,4,5,76,2,1};
    for(i=0; i<ARRAY_LEN(arr); i++)
    {
        if(x==arr[i])
        {
            return i;
        }
    }

    return -1;    // Nothing left to check
}
#定义数组长度(x)(sizeof(x)/sizeof(x[0]))
整数lsrch(整数x)
{   
int i;
int arr[]={2,4,5,76,2,1};
对于(i=0;i
intlsrh(intx){
int i,a[6]={2,4,5,76,2,1};

对于(i=0;i使用调试器并单步执行代码,问题应该非常明显。您是否忽略了编译器错误?我得到“a.c:13:5:警告:控件可能会到达非无效函数的结尾[-Wreturn type]”这就指向了错误放置的返回语句的问题。请不要大幅编辑该问题。我已将其回滚到原始问题。如此剧烈地更改该问题会使所有答案无效-尤其是将语言从C更改为Python!。如果您还有其他问题,请问一个新问题。很抱歉,我遇到了错误“我的错误,非常感谢!!与其只发布“修复”代码,不如告诉OP你做了哪些更改?是什么让它起作用了?@一些程序员。我编辑了我的答案。谢谢你的回复。”feedback@BLUEPIXY谢谢。已通过
数组\u LEN
修复。
int lsrch(int x)
{   
    int i;
    int arr[6] = {2,4,5,76,2,1};
    for(i=0;i<5;i++)
    {
        if(x==arr[i])
        {
            return i;
        }
        else
            return -1;      // Incorrect
    }
}
linsearch.c: In function ‘lsrch’:
linsearch.c:17:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
#define ARRAY_LEN(x)    (sizeof(x) / sizeof(x[0]))

int lsrch(int x)
{   
    int i;
    int arr[] = {2,4,5,76,2,1};
    for(i=0; i<ARRAY_LEN(arr); i++)
    {
        if(x==arr[i])
        {
            return i;
        }
    }

    return -1;    // Nothing left to check
}
int lsrh(int x){
    int i,a[6]={2,4,5,76,2,1};
    for(i=0;i<6;i++){
        if(a[i]==x)
             return i;
        }
    return -1;
}