0

こんにちは皆さん、私は自分のプログラムを完成させるための助けを求めてここにいます. 以下のコードは実行されますが、実行すべきすべてのタスクを実行するわけではありません。プログラムは、配列に格納する 5 つの数値を入力するようにユーザーに要求する必要があります。2 つ目は、ユーザーが配列内のどの番号を見つけたいかをユーザーに尋ねる必要があります。その後、配列内に数値が見つかった場合はその位置 (インデックス/インデックス) を表示し、そうでない場合は数値が配列内にないことを表示する必要があります。

私の問題は、検索する番号が配列内にない場合でも、インデックスが表示されることです。もう 1 つの問題は、配列に一般的な数字を入力すると、たとえば 3: {3,3,54,0,8} を検索したい場合に、「最初の」数字 3 のインデックスが表示されるだけで、表示されないことです。 「2 番目」の 3 のインデックス。助けてくださいありがとう。

#include<iostream>
#include<conio.h>

using namespace std;

int main()
{
    int list[5], a, loc = 0, searchItem, listLength;
    bool found = false;

    cout<<"Enter 5 numbers: "<<endl;
    for(a = 0; a < 5; a++)
               cin >> list[a];

    cout<<"\n\tEnter the number you want to find :";
    cin>>searchItem;

        while(loc < listLength && !found)
                  if(list[loc] == searchItem)
                     found = true;
                  else
                     loc++;
        if(found)
            cout << "\n\t\t " << searchItem << " is found at index " << loc << endl;
        else
            cout << "\n\n\tThe " << searchItem << " is not in the array" << endl;


getch();    
}
4

1 に答える 1

4

配列に 4 が 2 回存在するとします。while ループでは、4 が 1 回見つかったときに、見つかった変数が true に設定されます。これがループのブレーク条件です。あなたが書いたように:

while(loc < length && !found)

これが、数字の 4 が 2 回存在する場合に 1 回だけ検出される理由です。これを修正してみてください。(ヒント: 簡単にするために for ループを使用するか、各反復の最後に found=false を設定することができます)

要素が配列内にない場合、そのインデックスは表示されません。慎重に再試行してください。

編集: あなたが求めたように、これがあなたのやり方です。whilefor に置き換えるだけで、これが機能します。

int list[5], a, loc = 0, searchItem, listLength;
bool found = false;

cout<<"Enter 5 numbers: "<<endl;
for(a = 0; a < 5; a++)
           cin >> list[a];

cout<<"\n\tEnter the number you want to find :";
cin>>searchItem;



    for(loc = 0;loc < 5; loc++)
    {
        if(list[loc]==searchItem)
        {
             cout << "\n\t\t " << searchItem << " is found at index"<<loc<<endl;
        }
        else
            cout << "\n\n\tThe " << searchItem << " is not in the array"<<endl;
    }
于 2013-09-28T14:55:32.997 に答える