2017-06-20 13 views
-6

私はこのコードを過去2時間デバッグしようとしています。この関数は、単に配列要素内のターゲットを見つける必要があります。 これは質問です:ターゲットは(サイズNの)整数配列aに表示されるかどうか bool f2(int a[], int N, int target); 機能検査少なくとも1回:アレイ内のターゲットのintを検索

//は、次のプロトタイプを取る関数を書きます。 がyesの場合、この関数はtrueを返します。それ以外の場合はfalseを返します。 5つの整数の配列を定義するメインプログラムで関数をテストし、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

質問を忘れた... – Rakete1111

+2

また、デバッガを使用していないことは明らかです。 –

+0

ご使用のプロトタイプが要件 – Jarod42

答えて

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
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 

} 

他のメンバーが提案してきたように、あなたがループ

0

内の偽の値を返す、return false;べきループの外側にいる。

再帰を使用してこの問題を解決することもできますが、πάντα-ῥεAs [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; 
} 
+0

再帰めったに良い考えではありません。大きなアレイでスタックオーバーフローエラーが発生する可能性があります。 –

+0

@πάνταῥεvaluable貴重な提案をありがとうございます。私は初心者ですが、OPに与えられた問題を解決する新しい方法を与えるかもしれないと考えました。私は答えを更新します。 –

関連する問題