在Array中查找Target int

时间:2017-06-20 13:33:02

标签: c++ arrays

过去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++;
    }
}

3 个答案:

答案 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;
}