c# - 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);
}
推荐阅读
- javascript - 在给定(x,y,z)陀螺仪的情况下,如何检测设备旋转 360 度?
- mql4 - 为什么当第二个箭头指示器出现时 EA 不执行任何操作?
- reactjs - 在 JS React 中从给定数组创建数据行
- javascript - javascript 作用于页面事件
- firebase - 我可以查询的许多字段的 Firebase 数据库索引
- c# - 即使 IsEnabled 属性设置为 false,Excel 按钮也不会被禁用
- sql - 将一列迁移到多列
- kubernetes - 启用网络策略的 Kubernetes 运行状况检查失败
- ruby-on-rails - 更新 rails ActiveModel 条目时的 Psych::DisallowedClass
- android - 一个屏幕上的两个片段。两个片段的滚动动画