C#if else阻止代码继续

时间:2014-01-20 09:14:26

标签: 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();
    }
 }

8 个答案:

答案 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);