我正在创建一个多项选择测验应用程序,我正在尝试创建验证。用户必须选择的选项是a,b,c或d,我需要使用try和catch限制这些选项的输入。问题是这些变量类型是字符串,必须是字符串。问题是程序正在接受任何字符串(应该如此)。但有没有办法将它限制在这四个选择之中?我试图强迫程序去抓住,如果字母没有== a,b,c或d但没有快乐。
string[] QuestNums;
string[] QuestLevel;
string[] Quest;
string[] QuestAns;
QuestNums = new string[50];
QuestLevel = new string[50];
Quest = new string[50];
QuestAns = new string[50];
while (level == "1")
{
Console.Clear();
Random rnd = new Random();
int level1_rand = rnd.Next(0, 9);
AmountAsked++;
begin:
try
{
Console.WriteLine("\n\nLevel: 1 \t Score: {0} \tMaximum Questions Remaining: {1} ", score, 20 - AmountAsked);
Console.WriteLine("\n\n{0}", wrong);
Console.WriteLine("\n\n{0}", Quest[level1_rand]);
Console.Write("\nAnswer: ");
string selection = Console.ReadLine();
string decider = QuestAns[level1_rand];
if (selection == decider)
{
level = "2";
score = score + 1;
if (score >= 50)
{
Passed();
}
}
if (selection != decider)
{
fail = fail - 1;
wrong = wrong + 1;
}
if (selection != decider && AmountAsked > 19 || selection == decider && AmountAsked > 19 || fail == 0)
{
Failed();
}
}
catch
{
Console.Clear();
Console.WriteLine("Invalid input, press any key to try agiain");
Console.ReadLine();
goto begin;
}
}
答案 0 :(得分:2)
尝试以下算法
bool inputIsValid=false;
do
{
var input=ReadInput();
inputIsValid=ValidateInput(input);
}
while(inputIsValid==false);
*或者像理查德建议用更少的行
string input = null;
do{
input = ReadInput();
} while (!ValidateInput(input));
ValidateInput()可以使用try / catch块或其他东西。 如果它无效或必须为真,则必须返回false
类似这样的事情
string ReadInput()
{
return Console.ReadLine();
}
bool ValidateInput(string inputString)
{
return inputString=="a" || inputString=="b" || inputString=="c" || inputString=="d" ;
}
答案 1 :(得分:2)
您不应使用异常(即try / catch块)来验证用户输入。实例化和抛出异常并不是很便宜,它们应该用于异常,意外情况(即无法连接到数据库,无法将文件保存到磁盘)。
用户输入通常不被视为特殊的意外情况 - 用户经常会弄错。
相反,您可以只有一个有效输入列表,并检查用户的输入是否是列表的一部分。
using System.Linq;
static void Main()
{
var validInputs = new List<string> {"a", "b", "c", "d"};
string input = Console.ReadLine();
//validate and retry
while(! validInputs.Contains(input))
{
Console.WriteLine("Input was not valid. Please try again.");
input = Console.ReadLine();
}
//do something here with the valid input
}