验证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();
一些事情(也初始化userBirthDate
,正如其他帖子所指出的:
- 使用
DateTime.TryParse(Console.ReadLine(), out userBirthdate)
查看它是否为有效的DateTime。如果你马上这样做,你可能甚至不需要初始化userBirthdate
- 检查是否为
> DateTime.Now
,以确保将来不会出现。 - 一定要使用
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;