顺序搜索查询

时间:2013-09-28 14:46:16

标签: c++

你好我们在这里寻求帮助来完成我的计划。以下代码运行但它不执行它应该执行的所有任务。程序应该要求用户输入要存储在数组中的5个数字。其次,它应该询问用户他想要找到的数组中的数字。之后,如果在数组中找到了数字,它应该显示它的位置(索引/索引),如果没有,它应该显示该数字不在数组中。

我的问题是,即使要搜索的数字不在数组中,它仍会显示索引。另一个问题是,当我在数组中输入公共数字时,例如我想搜索3:{3,3,54,0,8}它只显示“第一个”数字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();    
}

1 个答案:

答案 0 :(得分:4)

假设,4在数组中存在两次。在while循环中,当找到4时,找到变量设置为true。这是循环的破坏条件。正如你所写:

while(loc < length && !found)

这就是为什么它只能找到一次数字4,它存在两次。试着解决这个问题。 (提示:为了方便起见,你可以使用for循环,或者在每次迭代结束时设置found = false)

如果元素不在数组中,显示它的索引。再试一次。

修改 就像你要求的那样,这就是你的方式。 用替换 ,只需将其工作:

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