-3

どんな値を検索しても、プログラムはそれがファイルに見つからないと言います。コードの何が問題なのかわかりません。

     int main()
    {
        int array1[MAX_NUMBER];
        int length;
        int number;
        int location;

        input (array1, MAX_NUMBER, length);

        cout<<"Please enter a number to search for:"<<endl;
        cin>>number;

        location=search(array1, length, number);

        if (location!=-1)
        {
            cout<<"The number "<<number<<" was found in the "<<location<<" position."<<endl;
        }

        else
        {
            cout<<"The number "<<number<<" was not found in the file."<<endl;
        }




        return 0;
    }

void input(int a[], int size, int& number_used)
{
    ifstream infile;
    int input;

    infile.open("numbers.txt");

    if (infile.fail())
    {
        cout<<"Input file opening failed."<<endl;
        exit(1);
    }

    int i;


    for (i=0; i<=size; i++)
    {
        while (infile>>input)
        {

            a[i]=input;
            cout<<a[i]<<endl;

        }
    }

    number_used=i;

}

int search(const int a[], int number_used, int search_value)
{
    int start=1;
    int end=number_used;
    int key=search_value;

    while (start<=end)
    {
        int mid=((start+end)/2);

        if (a[mid]==key)
        {
            return mid;
        }

        if (a[mid]>key)
        {
            end=mid-1;
        }

        else 
        {
            start=mid+1;
        }

    }
        return -1;


}

問題はメイン コードにありますか、それとも検索機能にありますか?

入力ファイル:

1
5
6
7
11
19
21
23
33
54
78
97

たとえば、19 と入力すると、「ファイル内に 19 という数字が見つかりませんでした」という出力が表示されます。

4

3 に答える 3

2

function で配列を正しく埋めていませんinput。値を配列に格納するには、別のインデックスを使用する必要があります。そうしないiと、有効で意味のあるインデックスが に示されませんa

int k = 0; // <-------------------------- 

int i;
for (i = 0; i <= size; i++)
{
    while (infile >> input && k < size)
    {

        a[k] = input; // <----------------

        k++;  // <----------------
    }
}

number_used = k; // <-------------

そして、WhozCraig がコメントしたように、配列はメソッド内では0ない1ことを知っておく必要があります。search

int start = 0;
于 2013-04-28T16:58:38.223 に答える
1

正しく読み取った値のリストの長さを計算していません。ループの中にループがあり、奇妙なことをしています。

あなたがすべきことは、次のようなものです:

int i;

while (i < size && infile >> input)
{
    a[i]=input;
    cout<<a[i]<<endl;
    i++;
}

number_used=i;
于 2013-04-28T16:52:10.963 に答える
0

二分検索では、配列がすでにソートされている必要があります。手でアルゴリズムを試してみてください: [4, 1, 3, 6, 5] で数字の 4 を見つけてください。4 は中央の要素より大きいため、アルゴリズムは配列の [4, 6, 5] 部分に移動します。

于 2013-04-28T16:49:40.960 に答える