C#if else阻止代码继续

Aar*_*kes 0 c# loops repeat

我有一段代码,我试图让它成为用户输入他们的名字,我希望它识别它是否是一个实际的名称.所以为了简单起见我只想让它接受字母.

我输入一个有效的名称,然后继续下一段代码.但是,当我输入无效字符时,我会收到"无效名称"消息,但在此之后无论我输入什么,只是一直说"无效名称".

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();
    }
 }
Run Code Online (Sandbox Code Playgroud)

Ale*_*exH 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();
    }
 }
Run Code Online (Sandbox Code Playgroud)


Ser*_*kiy 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
    }
}
Run Code Online (Sandbox Code Playgroud)

另外,我会重构您的代码以删除布尔标志:

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);
Run Code Online (Sandbox Code Playgroud)