确认用户输入的while循环

3
我遇到了一个C#问题,无法让while循环结束。userValue是之前程序输入的字符串。该字符串格式为DateTime,并且新输入的内容需要与原始userValue匹配,即确认用户原始出生日期。我使用try/catch来确定输入是否可以解析为DateTime。目前它只是一个不断循环的过程,我正在尝试在用户的出生日期被验证后停止循环。
string userValueTwo;

int stop = 0;
while (stop != 0)
{
    Console.WriteLine("Please verify your birth date");
    userValueTwo = Console.ReadLine();

     try
     {
        DateTime birthdayTwo = DateTime.Parse(userValueTwo);
     }
     catch
     {
         Console.WriteLine("You did not enter a valid format.");
         Console.ReadLine();
     }

     if (userValueTwo == userValue)
     {
         Console.WriteLine("Birth date confirmed.");
         Console.ReadLine();
     }

    else 
    {
        Console.WriteLine("Your birthday did not match our records. Please try again");
        Console.ReadLine();
    }
}

3
你从未增加 stop 的值或调用 break,因此它无法退出循环。 - Dave Zych
1
考虑使用 DateTime.TryParse 来捕获解析失败,而不是使用异常。 - Heretic Monkey
另一方面,它能进入循环吗?如果没有任何中间过程,stop = 0; 然后 stop != 0 应该始终为 false。 - 31eee384
@Aaron 正如Dave所指出的,以及你在Kyriacross的答案中看到的,你可以直接控制while循环何时(或是否)结束。你可以使用break;命令提前终止它,或者让while循环知道条件已经满足以终止。一般来说,while (condition==true) { this.do(something); }循环会一直持续下去,直到你的条件变为false。这不会是任意发生的;你需要以某种方式将该条件设置为false。 - EtherDragon
4个回答

5

确认日期后,您可以使用break语句,尽管不建议这样做。

既然您已经实现了停止条件,在日期确认后将停止设置为1,while循环就不会继续运行。

以下是使用布尔值的更好解决方案:

bool stop = false;
while (!stop)
{
    Console.WriteLine("Please verify your birth date");
    userValueTwo = Console.ReadLine();

     try
     {
        DateTime birthdayTwo = DateTime.Parse(userValueTwo);
     }
     catch
     {
         Console.WriteLine("You did not enter a valid format.");
         Console.ReadLine();
     }

     if (userValueTwo == userValue)
     {
         Console.WriteLine("Birth date confirmed.");
         Console.ReadLine();
         stop = true;
     }

    else 
    {
        Console.WriteLine("Your birthday did not match our records. Please try again");
        Console.ReadLine();
    }
}

太好了!我正想建议有人在他们的答案中加入一个代码示例... - EtherDragon
我尝试这样做,但在(!stop)处出现错误:“使用未分配的本地变量stop”。 - Aaron Gasaway
啊,将它设置为 false。编辑答案以反映它。 - kkyr

0

确认后,在代码的下一行使用break;


0
你进入了一个无限循环。通常情况下,无限循环是由于用户没有满足代码“跳出”循环的一个或多个要求所导致的。在达到目标后退出循环,可以使用“break;”来跳出当前循环。如果循环嵌套,则可能需要执行多次。

0

你从未改变过 stop 的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接