我有一段代码,我试图让它成为用户输入他们的名字,我希望它能识别它是否是一个实际的名称。所以为了简单起见我只想让它接受字母。
我输入一个有效的名称,然后继续下一段代码。但是,当我输入无效字符时,我会收到“无效名称”消息,但在此之后无论我输入什么内容,都会一直说“无效名称”。
Console.WriteLine("Please Enter First Name");
bool isNotName = true;
string firstName = Console.ReadLine();
while (isNotName)
{
if (Regex.IsMatch(firstName, @"^[a-zA-Z]+$"))
{
{
Console.WriteLine("Welcome {0}", firstName);
}
isNotName = false;
}
else
{
Console.WriteLine("Invalid Name");
Console.ReadLine();
}
}
答案 0 :(得分:5)
循环中未更新firstName值,请尝试以下操作:
string firstName = Console.ReadLine();
while (isNotName)
{
if (Regex.IsMatch(firstName, @"^[a-zA-Z]+$"))
{
{
Console.WriteLine("Welcome {0}", firstName);
}
isNotName = false;
}
else
{
Console.WriteLine("Invalid Name");
firstName = Console.ReadLine();
}
}
答案 1 :(得分:5)
Console.WriteLine("Please Enter First Name");
bool isNotName = true;
string firstName = Console.ReadLine();
while (isNotName)
{
if (Regex.IsMatch(firstName, @"^[a-zA-Z]+$"))
{
Console.WriteLine("Welcome {0}", firstName);
isNotName = false;
}
else
{
Console.WriteLine("Invalid Name");
firstName = Console.ReadLine(); // <---- re-assign name here
}
}
另外,我会重构您的代码以删除布尔标志:
Console.WriteLine("Please Enter First Name");
string firstName = Console.ReadLine();
while(!Regex.IsMatch(firstName, @"^[a-zA-Z]+$"))
{
Console.WriteLine("Invalid Name");
firstName = Console.ReadLine();
}
Console.WriteLine("Welcome {0}", firstName);
答案 2 :(得分:2)
您的问题出现在条件的其他部分:
Console.ReadLine();
应该是:
firstName = Console.ReadLine();
正在发生的事情是,您是在第一次从控制台读取输入时保存用户输入,而不是在后续调用ReadLine()时保存用户输入
即。你的代码应该是:
Console.WriteLine("Please Enter First Name");
bool isNotName = true;
string firstName = Console.ReadLine();
while (isNotName)
{
if (Regex.IsMatch(firstName, @"^[a-zA-Z]+$"))
{
Console.WriteLine("Welcome {0}", firstName);
isNotName = false;
}
else
{
Console.WriteLine("Invalid Name");
firstName = Console.ReadLine();
}
}
答案 3 :(得分:1)
你曾经读过这个名字。
在while循环的开头使用string firstName = Console.ReadLine();
。
答案 4 :(得分:1)
在你的其他部分尝试这个
else
{
firstName = Console.ReadLine();
}
答案 5 :(得分:1)
您没有在后续的readline中设置firstName变量:
Console.WriteLine("Invalid Name");
firstName = Console.ReadLine();
答案 6 :(得分:0)
只是想成为原创,你的同伴可能会喜欢读这样的东西:
string firstName;
while (!(Regex.IsMatch(firstName = Console.ReadLine(), @"^[a-zA-Z]+$")))
{
Console.WriteLine("Invalid Name");
}
Console.WriteLine("Welcome {0}", firstName);
这只是为了lulz,在条件表达式中的赋值总是一个坏主意。 :)
答案 7 :(得分:0)
错误是firstName的值永远不会更新。
可以改进代码:
Console.WriteLine("Please Enter First Name");
string firstName = Console.ReadLine();
While (!Regex.IsMatch(firstName, @"^[a-zA-Z'-]+$")) {
Console.WriteLine("Invalid Name");
firstName = Console.ReadLine();
}
Console.WriteLine("Welcome {0}", firstName);