过去2小时我一直在尝试调试此代码。该函数应该只是在数组元素中找到目标。 这是个问题:
//编写一个采用以下原型的函数:
bool f2(int a[], int N, int target);
该函数至少测试一次目标是否出现在整数数组a
(大小为N
)中。如果
是的,该函数返回true;否则,它返回false。
使用主程序测试函数,该程序定义五个整数的数组并初始化它们
在主程序中,调用函数f2()
并根据该函数显示相应的消息
返回值f2()
。
#include <iostream>
using namespace std;
bool f2(int a[], int n, int target, int& index);
int main(){
int arr[5];
int target;
int index = 0;
cout << " Enter array elements: " << endl;
for (int i = 0; i < 5; i++)
{
cout << " x[" << i << "]: ";
cin >> arr[i];
}
cout << " Enter target to search for : ";
cin >> target;
if (f2(arr, 5, target, index))
cout << " Target " << target << " found in index " << index << endl;
else
cout << " NOT found ! " << endl;
return 1;
}
bool f2(int a[], int N, int target, int& index){
int j = 0;
while (j < N)
{
if (target == a[j]) {
index = j;
cout << "list[" << j << "]" << endl;
return true;
}
return false;
j++;
}
}
答案 0 :(得分:1)
return false;
应该在循环之外,否则你只需测试第一个元素:
bool f2(int a[], int N, int target, int& index)
{
int j = 0;
while(j < N)
{
if (target == a[j]) {
index = j;
cout << "list[" << j << "]" << endl;
return true;
}
j++;
}
return false; // should be here
}
答案 1 :(得分:1)
bool f2(int a[], int N, int target, int& index){
int j = 0;
while( j<N)
{
if (target == a[j]) {
index = j;
cout << "list[" << j << "]" << endl;
return true;
}
j++;
}
return false; //should be here
}
你在循环中返回错误值
答案 2 :(得分:0)
正如其他成员所建议的那样,return false;
应该在循环之外。
你也可以使用递归解决这个问题但是πάντα-ῥεῖ[1]建议,这不是一个好主意。它可能会导致较大阵列上的堆栈溢出错误。
bool checkNumber(int input[], int size, int target){
if(size == 0){
return false;
}
if(input[size-1] == target){
return true;
}
bool answer = checkNumber(input, size-1, target);
return answer;
}