我有一个线性搜索器功能,可以打印出某个数字在数组中的位置,如果找不到,则应该返回“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.\n", key, i+1);
break;
}
}
if( i == 0)
printf(" %d is not present in the array.\n", key);
}
答案 0 :(得分:2)
您的错误是您在循环范围中声明了i
,因此您在循环中使用的i
与您在循环外使用的i
不同。你几乎肯定有一个名为i
的全局或静态,这是一个非常糟糕的命名实践,碰巧有值为0.
此外,即使您在功能范围内声明i
,您写的代码也不会打印&#34;不存在于数组&#34;除非n <= 0,因为您对该打印的测试不正确。出于类似的原因,如果在n> 1时第一个元素恰好匹配,它将打印出两个选项。这是因为你在增加匹配的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);
}
答案 1 :(得分:0)
这个问题已经有了一个很好解释的答案,但这里的方法与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);
}