0

我正在尝试实现一个线性搜索函数来搜索用户“输入”的特定数字,例如,用户想要搜索给定数组中的数字 3。该函数应返回索引值 2。但无论我输入什么输入,我的代码都会返回 6。我怀疑我的 main 函数有问题(也许当我使用 for 循环时,我的值固定为 6?)。有任何想法吗?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>


#define numberOfElements 6
#define NOT_FOUND -1

int linearSearch (int *myArray, int key, int i);

int main (int argc, char *argv[]){

   int i, key, myArray[] = {1, 2, 3, 4, 5, 6};
   printf("Input: ");
   for (i = 0; i < numberOfElements; i++){
      printf("%d ", myArray[i]);
   }
   printf("\n");
   printf("Please enter a number you wish to search for: ");
   scanf("%d", &key);
   linearSearch (myArray, key, i);
   printf("The number %d is at index %d\n", key, i);

   return 0;
} 


int linearSearch (int *myArray, int key, int i) {

   for (i = 0; i < numberOfElements; i++){
      printf("Checking index %d\n", i);
      if (myArray[i] == key){
         printf("%d\n", i);
         return i;
         break;
      }
      printf("It's certainly not here!\n");
   }

   return NOT_FOUND;
}
4

6 回答 6

5

您忽略函数的返回值linearSearch。因此,您不打印答案。

请注意,您不应将其传递i给函数,而应在循环中声明它:

for (int i=0; i<... etc
于 2013-08-08T00:54:30.033 回答
4

您没有捕获 的返回值linearSearch

您正在向它传递 的值i,而不是对 的引用i。因此,分配给它的值无关紧要,它在linearSearch的调用上下文中不可用。

结果,您忽略了任何事情linearSearch

我建议从中删除第三个参数,linearSearch并将其返回值捕获到一个新变量中并打印出来。

使i内部linearSearch成为局部变量而不是输入参数。

int linearSearch (int *myArray, int key) {

   for (int i = 0; i < numberOfElements; i++){
      printf("Checking index %d\n", i);
      if (myArray[i] == key){
         printf("%d\n", i);
         return i;
         break;
      }
      printf("It's certainly not here!\n");
   }

   return NOT_FOUND;
}

/* ... */

int index = linearSearch (myArray, key);
printf("The number %d is at index %d\n", key, index);
于 2013-08-08T00:58:22.133 回答
0

在您第一次执行for循环以列出您的输入数组后,i值为6.

然后,您将 重用i为 的参数linearSearch

你应该知道,当你linearSearch用参数调用时i,你只是将 的值放入i堆栈,而在函数的晚餐中,对 的任何更改i都不会影响外部的值i。所以你总是得到一个6.

要更正此问题,您可以将函数调用从更改
linearSearch (myArray, key, i);

i = linearSearch (myArray, key, i);

然后i将其更改为返回值。

于 2013-08-08T01:46:46.850 回答
0

对您的代码进行以下更改:

    int linearSearch (int *myArray, int key);

    i = linearSearch (myArray, key);

    int linearSearch (int *myArray, int key, int i) {
      int i;
于 2013-08-08T01:12:29.047 回答
0

您需要注意以下事项。

  1. 在函数linearSearch中传递参数 i 是没有用的。因为您没有使用传递的值。
  2. linearSearch 函数返回值 i。

    k=线性搜索(myArray,键);

然后你可以像这样打印值。

 printf("The number %d is at index %d\n", key, k);
于 2013-08-08T01:15:04.727 回答
-1
//It can work well if you correct it like this.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define numberOfElements 6
#define NOT_FOUND -1

int linearSearch (int *myArray, int key, int& i); **//"int i" changed to "int& i"**

int main (int argc, char *argv[]){

   int i, key, myArray[] = {1, 2, 3, 4, 5, 6};
   printf("Input: ");
   for (i = 0; i < numberOfElements; i++){
      printf("%d ", myArray[i]);
   }
   printf("\n");
   printf("Please enter a number you wish to search for: ");
   scanf("%d", &key);
   linearSearch (myArray, key, i);
   if(i != numberOfElements)
   printf("The number %d is at index %d\n", key, i);

   return 0;
}


int linearSearch (int *myArray, int key, int& i) { //**"int i" changed to "int& i"**

   for (i = 0; i < numberOfElements; i++){
      printf("Checking index %d\n", i);
      if (myArray[i] == key){
         printf("%d\n", i);
         //return i; **//delete this statement**
         break;
      }
      printf("It's certainly not here!\n");
   }

   return NOT_FOUND;
}
于 2013-08-08T01:26:57.950 回答