在C语言中编译线性搜索函数时遇到问题

在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

我有一个线性搜索函数,它可以打印出数组中某个数字的位置,如果找不到,它应该返回“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);


}
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而不是
中断我用它来编写我的代码!谢谢,我不知道这是另一种写法!我想再次感谢你,我明白了!