我编写了一段代码,用于计算用户活动的时间。但问题是,如果用户没有输入一个整数,例如一月或其他东西,那么该程序会下地狱。我需要知道如何制止这一点。
int inputYear, inputMonth, inputDay;
Console.WriteLine("Please enter the year you were born: ");
inputYear = int.Parse(Console.ReadLine());
Console.WriteLine("Please enter the Month you were born: ");
inputMonth = int.Parse(Console.ReadLine());
Console.WriteLine("Please enter the day you were born: ");
inputDay = int.Parse(Console.ReadLine());
DateTime myBrithdate = new DateTime(inputYear,inputMonth, inputDay);
TimeSpan myAge = DateTime.Now.Subtract(myBrithdate);
Console.WriteLine(myAge.TotalDays);
Console.ReadLine();
答案 0 :(得分:3)
如果用户没有输入一个整数,例如一月或其他东西
您可以使用Int32.TryParse
方法..
转换指定样式中数字的字符串表示形式 和文化特定的格式为32位有符号整数等价物。一个 返回值表示转换是否成功。
Console.WriteLine("Please enter the Month you were born: ");
string s = Console.ReadLine();
int month;
if(Int32.TryParse(s, NumberStyles.Integer, CultureInfo.InvariantCulture, out month))
{
// Your string input is valid to convert integer.
month = int.Parse(s);
}
else
{
// Your string input is invalid to convert integer.
}
同样TryParse
方法不会抛出任何异常,这就是为什么你不需要使用任何 try-catch 块。
这远远高于我的水平,我不知道这里发生了什么。
确定。我试着更深入地解释一下。
您抱怨的是用户输入的权利?你说过Beucase,你想把int
作为输入。不是string
喜欢“1月”或“5月”等。
当您使用Console.ReadLine()
方法阅读输入时,它会返回string
作为返回类型,而不是int
。无论用户输入3
还是January
,此方法都会将其作为string
返回,无论它们是什么类型。
3
和January
是字符串。 但是我们如何检查这些字符串实际上是否可以转换为整数值?这是我们使用Int32.TryParse
方法的部分原因。此方法检查这些输入是否可转换为整数,因此我们可以在DateTime
构造函数中将此整数用作实数。
答案 1 :(得分:0)
这是因为你使用的是int.Parse(Console.ReadLine()); - int代表整数。那么你可以在代码中放置一个try catch块。
原始代码将位于try块中,因为您想尝试运行它 - 但如果出现错误(例如用户类型为jan),catch块会处理错误并且您的程序可以继续运行而不会出现问题。