Я пишу приложение консоли C#, в котором вы вводите свое имя и дату рождения в формате yyyy/mm/dd, чтобы консоль сообщила вам ваш возраст в годах и месяцах. Теперь у меня есть эта часть, и она работает. Пока я не попытался реализовать исключение try и catch, чтобы проверить, была ли введенная вами дата в правильном формате. Если нет, вам следует попросить повторить попытку еще раз 3 раза, прежде чем сообщить, что формат даты неверен, а затем выйти из приложения.Блок кода, повторяющийся, когда я хочу реализовать исключение try и catch
Теперь проблема в том, что приложение работает, но оно говорит о неправильном формате даты, даже если это не так. Затем он продолжает выдавать правильный результат после цикла через приложение, которое запрашивает имя и дату рождения 3 раза. Это код, который у меня есть до сих пор (я знаю, что выпуск в течение месяца в месяц немного грязный, я просто слишком долго тестировал слишком много вещей, чтобы попробовать и изменить его сейчас, но я открыт для улучшений и изменений):
namespace CSConsoleDateTimeTypes
{
class Program
{
static int Count = 0;
static void Main(string[] args)
{ EnterDate(); }
static void EnterDate()
{
string userName, enteredDoBString;
Console.WriteLine("Enter your name:");
userName = Console.ReadLine();
Console.WriteLine("Enter your date of birth in the format yyyy/mm/dd:");
enteredDoBString = Console.ReadLine();
string dateString = Console.ReadLine();
parseDateString(dateString);
DateTime enteredDoB = DateTime.Parse(enteredDoBString);
Console.WriteLine("Your DoB is: {0}", enteredDoB);
DateTime dateToday = DateTime.Today;
if (dateToday < enteredDoB)
{
DateTime date4 = dateToday;
dateToday = enteredDoB;
enteredDoB = date4;
}
TimeSpan ts = dateToday - enteredDoB;
//total days (irrelevant to the application though)
Console.WriteLine(ts.TotalDays);
//total years
int years = dateToday.Year - enteredDoB.Year;
int months = 0;
//Total months
if (dateToday.Month < enteredDoB.Month)
{
months = 12 - dateToday.Month + enteredDoB.Month;
}
else
{
months = enteredDoB.Month - dateToday.Month;
}
if (months > 12)
{
Console.WriteLine("Years: {0}, Months: {1}", years - 1, 12 - (months - 12));
}
else if (months < 0)
{
Console.WriteLine("Years: {0}, Months: {1}", years, months - months);
}
else
{
Console.WriteLine("Years: {0}, Months: {1}", years, months);
}
Console.ReadKey();
Console.ReadKey();
}
static void parseDateString(string datestring)
{
try
{
DateTime date3 = DateTime.Parse(datestring, System.Globalization.CultureInfo.InvariantCulture);
date3.ToShortDateString();
Console.ReadKey();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
//if date was entered incorrectly 3 times, the application should exit..
Count++;
if (Count < 3)
{
EnterDate();
}
else
{
Console.WriteLine("\aSorry date still not in correct format - Press any key to exit the application");
Console.ReadKey();
}
}
}
}
}
Это выход он дает, когда я запустить приложение и завершения работы через весь код после моих входов:
Enter your name:
gerrit
Enter your date of birth in the format yyyy/mm/dd:
1997/02/13
String was not recognized as a valid DateTime.
Enter your name:
gerrit
Enter your date of birth in the format yyyy/mm/dd:
1997/02/13
String was not recognized as a valid DateTime.
Enter your name:
gerrit
Enter your date of birth in the format yyyy/mm/dd:
1997/02/13
String was not recognized as a valid DateTime.
Sorry date still not in correct format - Press any key to exit the application
Your DoB is: 1997/02/13 12:00:00 AM
7294
Years: 20, Months: 0
Your DoB is: 1997/02/13 12:00:00 AM
7294
Years: 20, Months: 0
Your DoB is: 1997/02/13 12:00:00 AM
7294
Years: 20, Months: 0
Как вы можете видеть, он запрашивает имя и дата рождения 3 раза и до сих пор говорить формат даты неверен, то он дает правильный результат (ваш DoB: 1997/02/13 12:00:00 AM Годы: 20, Mont hs: 0) 3 раза
Он должен спрашивать один раз и выводить один раз, но я не могу понять, как это сделать. Любая помощь будет высоко оценен.
Вот скриншот выхода консоли, если это помогает на всех
http://i.imgur.com/qUpF0g2.png
Проблема в том, что вы проверяете 'dateString' вместо' entryDoBString', а затем, в конце концов, используете 'signedDoBstring'. Удалите 'dateString' и передайте' signedDoBstring' в метод. –
Почему у вас есть две строки кода для введенной строки даты, а именно: 'entryDoBString и' dateString'? – awh112
@ChibuezeOpata и awh112 Спасибо, ребята, что я сделал это сейчас. Цените помощь. Не могу поверить, что я не видел этого ха-ха, я все еще новичок и изучаю C#. –