while循环无法在数组中找到字符串

时间:2016-11-26 04:44:30

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

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

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

不幸的是,即使在isLangVerified中找不到truelanguage也变为LangList,导致它抛出异常。

1 个答案:

答案 0 :(得分:0)

因此,主要问题是您尝试将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<std::string,4> LangList = { "1", "en", "2", "fr" };允许LangList.size()使用std::string LangList[] = { "1", "en", "2", "fr" };

这会使您的最终程序看起来像这样:http://pastebin.com/PCmGfa4W