验证c#中控制台的DateTime输入

本文关键字:DateTime 输入 控制台 验证 | 更新日期: 2023-09-27 18:07:37

为了以动手的方式学习c#,我开始完成这些在网上找到的作业…

http://www1.cs.columbia.edu/洛克/csharp assignments.html

我被练习1的问题3卡住了。如何从控制台请求日期,然后根据给定的标准进行检查?在这种情况下,检查日期是否在今天之后,如果为真,则提供"无效"消息。

我的代码目前看起来如下所示。我觉得逻辑在那里,但是与作用域有关的东西不会让它编译- userBirthdate在循环之外似乎无法访问。

我相信还有一个更简单的解决办法。

任何帮助非常感激-谢谢大家!

        //Set today's date as a variable            
        DateTime todayDate = DateTime.Today;
        DateTime userBirthdate;
        //Ask user for birth date
        Console.Write("Please enter your date of birth (dd/mm/yy):  ");
        //Validate the input and set as a variable
        bool inputValid = false;
        while (inputValid != true)
        {
            if (DateTime.Parse(Console.ReadLine()) > todayDate)
            {
                Console.Write("Invalid Date.  Please enter your date of birth (dd/mm/yy):  ");
            }
            else
            {
                userBirthdate = DateTime.Parse(Console.ReadLine());
                Console.WriteLine(userBirthdate);
                inputValid = true;
            }
        }
        //Calculate user age
        int userAge = todayDate.Year - userBirthdate.Year;
        if (userBirthdate > todayDate.AddYears(-userAge)) userAge--;
        //Output
        Console.WriteLine("You are {0} years old!", userAge);
        Console.ReadLine();

验证c#中控制台的DateTime输入

一些事情(也初始化userBirthDate,正如其他帖子所指出的:

  1. 使用DateTime.TryParse(Console.ReadLine(), out userBirthdate)查看它是否为有效的DateTime。如果你马上这样做,你可能甚至不需要初始化userBirthdate
  2. 检查是否为> DateTime.Now,以确保将来不会出现。
  3. 一定要使用Subtract方法来查看它是否在过去太久以前。它给你一个TimeSpan物体,你可以用它来确保它不是很老,比如135年左右。

需要在循环外初始化userBirthdate:

    DateTime userBirthdate = DateTime.MinValue;

这个值并不重要,因为你要在while循环中给它赋值,但是如果编译器不做比它设计的更多的静态分析,它就无法确定。

还有其他几个问题,但这应该可以解决编译问题。

除了其他答案之外,您还调用了两次Console.ReadLine():一次是在读取时检查并验证输入不大于今天的日期,另一次是在将其分配给userBirthdate时。您应该先分配它,然后再进行验证,否则,您的程序将挂起,因为它正在等待来自用户的更多输入。

while (inputValid != true)
{ 
    userBirthdate = DateTime.Parse(Console.ReadLine());
    if (userBirthdate > todayDate)
    {
        Console.Write("Invalid Date.  Please enter your date of birth (dd/mm/yy):  ");
    }
    else
    {
        Console.WriteLine(userBirthdate);
        inputValid = true;
    }
}

由于没有初始化变量userBirthdate,因此当您稍后尝试使用它时,编译器会给您一个警告。首先将其设置为一个值或更改您的逻辑:

DateTime userBirthdate = DateTime.Today;