我参加了一个C ++课程,我以前在定义正确的参数方面遇到了困难,所以如果有人能指出我做错了什么就会很好。
这项任务是创建二进制搜索功能,程序将猜测用户正在考虑的数字。
这是我的代码:
#include <iostream>
using namespace std;
int b_search(int Arry[], int L, int R)
{
int M = 0;
char userAnswer = '-';
M = (L + R) / 2;
cout << "Is it " << Arry[M] << "? (l/h/z): ";
cin >> userAnswer;
if( (userAnswer != 'l') && (userAnswer != 'h') ) {
cout << "Thank you!" << endl;
}
else {
if (userAnswer == 'l') {
b_search(Arry[], L, M);
}
else {
b_search(Arry[], ++M, R);
}
}
return;
}
int main()
{
const int N = 100;
int A[N];
int i = 0;
int value = 1;
for(i = 0; i < N; ++i)
{
A[i] = value;
++value;
}
cout << "Choose a number from 1 to 100." << endl << endl;
cout << "Answer with:" << endl;
cout << " l - if your num is lower" << endl;
cout << "or: " << endl;
cout << " h - if your num is higher" << endl;
cout << "or: " << endl;
cout << " any other key if the guess is right." << endl << endl;
b_search(N, 1, 100)
return 0;
}
当我编译它时,第一个递归调用的第一个参数出现问题。
这是Code Pad的错误消息:
In function 'int b_search(int*, int, int)':
Line 22: error: expected primary-expression before ']' token
compilation terminated due to -Wfatal-errors.
谢谢!
答案 0 :(得分:0)
您将b_search
定义为接受int数组,int和另一个int。但是,你要做的第一件事是:
b_search(N, 1, 100); // Is invalid since N is an int but the function expects an array.
尝试传入const int,int和int。第一个参数应该是一个int数组,而不是int。
我看到的另一个问题是您尝试重复的b_search
定义,您使用第一个参数b_search
调用Arry[]
。括号无效,因为Arry
已经是一个数组,你可以按原样传递它。
答案 1 :(得分:0)
在通过名称引用数组时,不要使用方括号。假设您声明了一个名为A
的数组。然后:
A
:是一个数组。
A[5]
:是A
的元素。
A[]
:不是有效的表达。
由于您希望以递归方式将数组传递给b_search
函数,而不是其任何元素,只需使用Arry
。
函数声明中的int Arry[]
不是表达式,而是声明参数Arry
的声明符。声明符在某些方面类似于表达式,但具有不同的语法规则。 []
在声明符中表示“数组”,但在表达式中不表示。
这里有一个与数组参数相关的微妙之处:当你声明一个函数来获取一个数组参数时,参数的类型会被自动重写成一个指针。所以Arry
实际上是一个指针,而不是一个数组。在这种情况下,这个细节是不可见的,因为数组和指针在下标时的行为方式相同,并且数组在按值传递时会自动转换为指针。