【问题标题】:While loop fails to find string in array虽然循环无法在数组中找到字符串
【发布时间】:2017-04-10 10:40:57
【问题描述】:

我在我的程序中添加了一个功能,允许用户选择两种可用语言(英语和法语)中的一种。我还添加了可接受的输入列表:

string language;
string LangList[] = { "1", "en", "2", "fr" };

void output(string en, string fr) {
    if (language == "1" || language == "en")
        cout << en;
    else if (language == "2" || language == "fr")
        cout << fr;
    else
        throw "LANGUAGE";
}

下面的while 循环被写入重复自身,直到language 等于LangList 中的字符串之一。

while (true) {
        cout << "(1) ENGLISH, (2) FRANCAIS" << endl;
        cout << "Language number: ";
        cin >> language;
        bool isLangVerified = find(begin(LangList), end(LangList), language);
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        if (isLangVerified) {
            cout << "Language: ";
            output("ENGLISH\n", "FRANCAIS\n");
            break;
        }
        else {
            cout << "ERROR!\n" << endl;
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
            cin.clear();
        }
    }

不幸的是,即使在LangList 中找不到languageisLangVerified 也会变成true,导致它抛出异常。

【问题讨论】:

  • 您似乎相信isLangVerified 会在language 更改时神奇地自我更新。它不会。你计算一次,它就保持它的价值。我看不出这个循环怎么会调用output。如果你这么说,那就意味着你在这里显示的代码与你实际运行的代码不同。
  • 它永远不会进入if (isLangVerified) {,因为此时isLangVerified总是错误的
  • @IgorTandetnik 谢谢你的建议。更新了代码。
  • 能否将您当前的 main.cpp 粘贴到 bin 中
  • @MegaSniperB pastebin.com/Y00pr09r

标签: c++ arrays string while-loop boolean


【解决方案1】:

所以主要问题是您试图将iterator 设置为bool isLangVerified。我建议你循环数组,看看输入是否存储在数组中。

std::array<std::string,4> LangList = { "1", "en", "2", "fr" };
bool isLangVerified = false;

while (true)
{
    std::cout << "(1) ENGLISH, (2) FRANCAIS" << std::endl;
    std::cout << "Language number: ";
    std::cin >> language;

    for(int i = 0; i < LangList.size() - 1; i++)
    {
        if(LangList[i] == language)
        {
            isLangVerified = true;
        }
    }

    if (isLangVerified)
    {
        std::cout << "Language: ";
        output("ENGLISH\n", "FRANCAIS\n");
        break;
    }
    else
    {
        std::cout << "ERROR!\n" << std::endl;
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        std::cin.clear();
    }
}

std::array&lt;std::string,4&gt; LangList = { "1", "en", "2", "fr" }; 允许使用LangList.size(),而std::string LangList[] = { "1", "en", "2", "fr" }; 不允许。

这将使您的最终程序如下所示:http://pastebin.com/PCmGfa4W

【讨论】:

  • for(int i = 0; i &lt; LangList.size() - 1; i++) 中的LangList.size() 语法有问题。
  • 没关系它使用您的 pastebin 代码工作。谢谢!
猜你喜欢
  • 2013-11-17
  • 1970-01-01
  • 1970-01-01
  • 2015-09-14
  • 2011-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多