0

大家好,我在这里寻求帮助以完成我的程序。那么下面的代码运行,但它并没有执行它应该做的所有任务。程序应该要求用户输入 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();    
}
4

1 回答 1

4

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

while(loc < length && !found)

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

如果元素不在数组中,则不会显示它的索引。再次仔细尝试。

编辑: 按照您的要求,这就是您的操作方式。用for替换你的while ,你就可以得到这个工作:

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