我无法解决if-else阶梯中的else部分吗?

时间:2019-07-03 15:47:05

标签: c++

我正在尝试编写一个简单的程序,该程序遍历Vector中的数字以查找用户要求的数字。 我要求用户将随机数添加到列表(向量)中。 然后,我要求他们输入希望查找的号码。 我使用了if else阶梯来检查Vector,然后再遍历它。否则我显示:“列表为空” 我使用了基于范围的for循环遍历向量的数字, 然后我尝试将循环中的每个数字与WantedNum进行比较。 如果loop == wantedNum中的数字,我将其分配给wantNum,然后将WantedNum显示回给用户。 我的代码显示了所需的号码,但并没有像预期的那样停在那里。

我无法解决的情况是,当用户要求输入不在列表中的数字时。

这是我的代码(我用一堆随机数显式初始化了矢量,直到我可以解决“查找数字”部分,然后我将继续进行“添加数字”逻辑)

我是一个初学者,所以我很感谢您的解释,尤其是我做错了什么。.当然,我们欢迎提出建议。 谢谢你的建议。

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    char selection {};
    vector<int> numbers {10, 20, 30, 46, 78, 100, -2};
    int wantedNum {};

    cout << "Welcome to my menu: \n";
    cout << "Enter F to find a number.\nEnter P to display the numbers in the "
            "list.\nEnter Q to quit\n";

    do
    {
        cout << "Enter your choice: ";
        cin >> selection;
        switch (selection)
        {
            case 'f':
            case 'F':
                cout << "Enter the number you wish to find: ";
                cin >> wantedNum;
                if (numbers.size() != 0)
                {
                    for (auto i : numbers)
                    {
                        if (i == wantedNum)
                            wantedNum = i;
                    }
                    cout << "Here's your number: " << wantedNum << endl;

                    for (auto i : numbers)
                    {
                        if (i != wantedNum)
                        {
                            cout << "Searching..." << endl;
                        }
                    }
                    cout << "Your number is not in the list.\n";
                }
                else
                {
                    cout << "List is empty - []\n";
                }
                break;
            case 'p':
            case 'P':
                cout << "The numbers in the list are: ";
                for (auto i : numbers)
                {
                    cout << i << " ";
                }
                break;
            case 'q':
            case 'Q': cout << "GoodBye !\n"; break;
            default: cout << "I dont recognize this input, please try again.\n";
        }
    } while (selection != 'Q' && selection != 'q');
}

1 个答案:

答案 0 :(得分:2)

以下代码块

for (auto i : numbers) {
    if (i == wantedNum)
        wantedNum = i;
}
cout << "Here's your number: " << wantedNum << endl;

for (auto i : numbers) {
    if (i != wantedNum) {
        cout << "Searching..." << endl;
    }
}
cout << "Your number is not in the list.\n";

向我表明您不清楚逻辑。

您必须:

  1. 寻找物品。
  2. 如果找到该项目,则设置一些标志以指示已找到该项目。找到该商品时,请与众不同。找到该项目后继续循环浏览数字没有任何用处。
  3. 在循环结束后适当打印一条消息。

这是更新版本

bool found = false;
for (auto i : numbers) {
    if (i == wantedNum)
    {
       found = true;
       break;
    }
}

if ( found )
{
   cout << "Found " << wantedNum << " in the list.\n"
}
else
{
   cout << "Did not find " << wantedNum << " in the list.\n"
}

您可以使用std::find来稍微减少代码量。

bool found = (std::find(numbers.begin(), numbers.end(), wantedNum) != numbers.end());

if ( found )
{
   cout << "Found " << wantedNum << " in the list.\n"
}
else
{
   cout << "Did not find " << wantedNum << " in the list.\n"
}