0

int 値の 1 次元配列と整数値の 2 つのパラメーターが渡される関数を作成するとします。この関数は、2 番目のパラメーターに値が最も近い配列内の値を見つけます。コードは機能しますが、1 ~ 5 の数字を入力すると出力が 0 になります。5 を超える数字を入力すると、正確な結果が得られ始めます。なぜこれが起こっているのかよくわかりませんが、これまでのコードは次のとおりです。

#include <iostream>
#include <cmath>
using namespace std;

const int MAX = 5;

int searchNearest(int anArray[],int key)
{
int value = abs(key - anArray[0]);
int num = 0;

for(int x = 0;x < MAX; x++)
{
    if(value > abs(key - anArray[x]))
    {
        value = abs(key - anArray[x]);
        num = anArray[x];
    }
}

return num;

}

int main()
{
int A[MAX] = {3,7,12,8,10};

int search;

int nearest;

cout << "Enter a number to search: ";

cin >> search;

nearest = searchNearest(A,search);

cout << "The nearest number is: " << nearest << endl;

system("pause");
return 0;

}
4

1 に答える 1

5

元のコードでは、1 ~ 5 の数字が配列の最初の要素に最も近いです。ifこのため、ステートメント内のコードが実行されることはなくnum、 を返すときにその初期値が返されます。これはたまたま0です。これを修正するには、num別の方法で初期化します。

int num = anArray[0];  // <-- used to be 0
于 2013-05-22T23:55:37.377 に答える