【发布时间】:2018-05-05 22:38:59
【问题描述】:
我的线性搜索总是返回-1,我不知道为什么。我试图弄清楚但没有成功。搜索功能每次都转到“else”分支,“then”永远不会执行。
#include <stdio.h>
#include <stdlib.h>
#define size 50000
int search(int n,int s,int v[s])
{
int i;
for(i=0;i<s;++i)
{
if(v[i]==n)
return i;
else
return -1;
}
}
int main(void)
{
int valores[size];
//start the vector and put values in it.
for(int i=0;i<size;++i)
valores[i]=(i+1)*2;
//search the 50000 values
for(int i=1;i<=size +1;++i)
{
int p=search(2*i,size,valores);
if(p==-1)
printf("Not found %d\n",i);
else if(valores[p]!=2*i)
printf("Found %d in wrong index: %d\n",i,p);
}
return 0;
}
【问题讨论】:
-
严格编译时是否收到任何警告?例如。
gcc -Wall. -
是的,我收到此警告:控件到达非无效函数的末尾。
-
关于:
for(int i=1;i<=size +1;++i)在 C 中,数组索引的范围是 0...(数组中的元素数 -1)。因此该语句将跳过第一个条目并访问数组末尾的 1。超出数组末尾的访问是未定义的行为 -
关于警告信息,只需将
return -1;移动到最后一个右大括号 '}' 之前,而不是作为循环内的最后一条语句,在函数中:search()
标签: c linear-search