我正在尝试实现线性搜索功能来搜索用户“输入”的特定数字,例如用户想要搜索给定数组中的数字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;
}
答案 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)
您需要注意以下事项。
linearSearch函数返回值i。
k = linearSearch(myArray,key);
然后你可以打印这样的值。
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;
}