指数值不会改变

时间:2013-08-08 00:51:55

标签: c arrays

我正在尝试实现线性搜索功能来搜索用户“输入”的特定数字,例如用户想要搜索给定数组中的数字3。该函数应返回索引值2.但无论输入什么输入,我的代码都返回6。我怀疑我的main函数有问题(可能在我使用for循环时,i的值固定为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;
}

6 个答案:

答案 0 :(得分:5)

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

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

for (int i=0; i<... etc

答案 1 :(得分: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);

答案 2 :(得分:0)

对您的代码进行此更改:

    int linearSearch (int *myArray, int key);

    i = linearSearch (myArray, key);

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

答案 3 :(得分:0)

您需要注意以下事项。

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

    k = linearSearch(myArray,key);

  3. 然后你可以打印这样的值。

     printf("The number %d is at index %d\n", key, k);
    

答案 4 :(得分:0)

首次执行for循环以列出输入数组后,i值为6

然后,您将i重新用作linearSearch的参数。

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

要纠正此问题,您可以从
更改功能调用 6

linearSearch (myArray, key, i);

然后i = linearSearch (myArray, key, i);将更改为返回值。

答案 5 :(得分:-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;
}