在C语言中编译线性搜索函数时遇到问题
我有一个线性搜索函数,它可以打印出数组中某个数字的位置,如果找不到,它应该返回“Nothing found”。然而,它似乎打印了它的位置和位置,而且也没有找到。我想知道我哪里出错了?谢谢在C语言中编译线性搜索函数时遇到问题,c,C,我有一个线性搜索函数,它可以打印出数组中某个数字的位置,如果找不到,它应该返回“Nothing found”。然而,它似乎打印了它的位置和位置,而且也没有找到。我想知道我哪里出错了?谢谢 void searcher(int *array, int n, int key){ for( int i = 0; i < n; i++){ if(array[i] == key){ printf(" %d is present at location %d
void searcher(int *array, int n, int key){
for( int i = 0; i < n; i++){
if(array[i] == key){
printf(" %d is present at location %d.\n", key, i+1);
break;
}
}
if( i == 0)
printf(" %d is not present in the array.\n", key);
}
void搜索器(int*数组、int n、int键){
对于(int i=0;i
您的错误是在循环作用域中声明了一个i
,因此在循环内部使用的i
与在循环外部使用的i
不同。您几乎肯定有一个名为i
的全局或静态命名,这是一种非常糟糕的命名实践,它的值恰好为0
此外,即使您在函数范围中声明i
,您编写的代码也不会打印“数组中不存在”,除非n 0。这是因为在对匹配项进行递增i
之前,您打破了循环
你可以这样重写它:
void searcher(int *array, int n, int key)
{
int i;
for (i = 0; i < n && array[i] != key; ++i);
if (i < n)
printf(" %d is present at index %d.\n", key, i);
else
printf(" %d is not present in the array.\n", key);
}
void搜索器(int*数组、int n、int键)
{
int i;
对于(i=0;i
这个问题已经有了答案,答案已经解释得很清楚了,但我的方法与jschultz略有不同
void searcher(int *array, int n, int key)
{
int flag=1;
for( int i = 0; i < n; i++){
if(array[i] == key){
flag=0;
printf(" %d is present at location %d.\n", key, i+1);
break;
}
}
if(flag)
printf(" %d is not present in the array.\n", key);
}
void搜索器(int*数组、int n、int键)
{
int标志=1;
对于(int i=0;i
注意:如果您解决了jschultz410
指出的i
范围的问题,这仍然不起作用(除非数组为空),因为i
将不为0。即使我这样做,它也会在执行搜索之前读取数组?如下所示:readArray(输入,计数);搜索者(输入、计数、键)@JBo,只需删除最后一个if
并使用return代码>而不是中断代码>我用它来编写我的代码!谢谢,我不知道这是另一种写法!我想再次感谢你,我明白了!