我在程序中添加了一个功能,允许用户选择两种语言中的一种(英语和法语)。我还添加了一个可接受的输入列表:
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
中找不到true
,language
也变为LangList
,导致它抛出异常。
答案 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