用户活了多少天计算器

时间:2013-12-28 12:16:52

标签: c# calculator

我编写了一段代码,用于计算用户活动的时间。但问题是,如果用户没有输入一个整数,例如一月或其他东西,那么该程序会下地狱。我需要知道如何制止这一点。

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();

2 个答案:

答案 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返回,无论它们是什么类型。

在这种情况下,

3January是字符串。 但是我们如何检查这些字符串实际上是否可以转换为整数值?这是我们使用Int32.TryParse方法的部分原因。此方法检查这些输入是否可转换为整数,因此我们可以在DateTime构造函数中将此整数用作实数。

答案 1 :(得分:0)

这是因为你使用的是int.Parse(Console.ReadLine()); - int代表整数。那么你可以在代码中放置一个try catch块。

原始代码将位于try块中,因为您想尝试运行它 - 但如果出现错误(例如用户类型为jan),catch块会处理错误并且您的程序可以继续运行而不会出现问题。