C#,使用布尔值验证字母和空白的用户输入



我正在制作一个程序,该程序反转字符串,不允许除字母和空格之外的任何其他内容,问题是,如果我输入了无效输入,然后尝试输入有效输入,它只会不断打印错误。我认为这个问题与while循环和bool结果有关,但我搞不清楚。请帮忙,谢谢!

static void Reverse()
{
string name;
Console.Write("Enter your name: ");
name = Console.ReadLine();
bool result = name.All(c => char.IsWhiteSpace(c) || char.IsLetter(c));
if (Regex.IsMatch(name, @"^[a-zA-Z- ]+$"))  // Validates the input for characters and/or spaces
{
char[] charArr = name.ToCharArray();
Array.Reverse(charArr);
string nameRev = new string(charArr);
Console.WriteLine("String is {0}", nameRev);
}
else
{
while (name == String.Empty || result == false) //Should validate the input for whitespace or letter if it doesn't pass the first validation
{
Console.Write("Error! Enter your name, only letters allowed: ");
name = Console.ReadLine();
}
}

您需要将while循环包裹在孔序列中,而不是仅将其包含在else语句中。

示例:

static void Reverse()
{
// Continues executing as long as result stays false.
bool result;
do 
{
string name;
Console.Write("Enter your name: ");
name = Console.ReadLine();
result = name.All(c => char.IsWhiteSpace(c) || char.IsLetter(c));
if (Regex.IsMatch(name, @"^[a-zA-Z- ]+$"))
{
char[] charArr = name.ToCharArray();
Array.Reverse(charArr);
string nameRev = new string(charArr);
Console.WriteLine("String is {0}", nameRev);
}
else 
{
Console.WriteLine("Error! Only letters allowed");
}
}
while (!result);
}

最新更新