【问题标题】:While loop to confirm user inputWhile循环确认用户输入
【发布时间】:2016-01-11 18:04:56
【问题描述】:

我遇到了一个 c# 问题,我无法让 while 循环结束。

userValue 是在程序中较早输入的字符串。

字符串格式为DateTime,新输入需要匹配原userValue。 I.E 确认用户的原始出生日期。

我使用了 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();
    }
}

【问题讨论】:

  • 你永远不会增加 stop 或调用 break 所以它不能退出循环。
  • 考虑使用DateTime.TryParse而不是使用异常来捕获解析失败。
  • 另一方面......它甚至可以进入循环吗? stop = 0; 然后 stop != 0 应该总是导致 false 如果两者之间没有任何内容。
  • @Aaron 正如 Dave 指出的那样,正如您在 Kyriacross 的回答中看到的那样,您可以直接控制何时(或者如果有的话)while 循环结束。您可以使用break; 命令“提前”终止它,或者让while 循环知道已满足终止条件。一般来说,while (condition==true) { this.do(something); } 循环会一直持续下去,直到您的条件变为假。这不会随意发生;您需要以某种方式将该条件设置为 false。

标签: c# parsing while-loop try-catch


【解决方案1】:

确认后,在后面的代码行中使用break;

【讨论】:

    【解决方案2】:

    您可以在日期确定后使用 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();
        }
    }
    

    【讨论】:

    • 宾果游戏!我只是建议有人在他们的答案中抛出一个代码示例......
    • 我正在尝试这样并在 (!stop) 上收到错误。 "使用未分配的局部变量停止"
    • 啊,把它设置为假。编辑答案以反映它。
    【解决方案3】:

    您已进入无限循环。无限循环通常当用户没有满足一个或多个代码“跳”出循环的要求时要在完成目标后退出循环,请使用“break;”退出当前循环。在嵌套循环的情况下,这可能需要多次发生

    【讨论】:

      【解决方案4】:

      您永远不会更改stop 的值。

      【讨论】:

        猜你喜欢
        • 2013-11-16
        • 2020-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-20
        • 1970-01-01
        相关资源
        最近更新 更多