2015-11-05 2 views
0

Я создаю календарь, и я хочу проверить, является ли введенный пользователем действительный срок. Я получил это далеко, и теперь я не знаю, как повторить сообщение «неверная дата», пока оно не будет действительным.Проверьте, действительно ли введен ввод пользователем


Мой код:

var dateFormats = new[] {"dd.MM.yyyy", "dd-MM-yyyy", "dd/MM/yyyy"}; 

Console.Write("\nSet your date: "); 

string readAddMeeting = Console.ReadLine(); 
DateTime scheduleDate; 

bool validDate = DateTime.TryParseExact(
    readAddMeeting, 
    dateFormats, 
    DateTimeFormatInfo.InvariantInfo, 
    DateTimeStyles.None, 
    out scheduleDate); 

if (validDate) 
{ 
    Console.ForegroundColor = ConsoleColor.Green; 
    Console.WriteLine("Valid date"); 
    Console.ForegroundColor = ConsoleColor.White; 
} 
else 
{ 
    Console.ForegroundColor = ConsoleColor.Red; 
    Console.WriteLine("Invalid date: \"{0}\"", readAddMeeting); 
    Console.ForegroundColor = ConsoleColor.White; 
} 
+0

Вы можете использовать оператор 'while'. Проверьте документацию. –

+0

вам нужно объяснить, о чем вы говорите, «как повторить сообщение« неверная дата »до тех пор, пока он не станет действительным.« Я не следую. – Seabizkit

+0

Вы можете использовать пока. И вам не нужно иметь даты, вместе с TryParseExact. Вместо этого вы можете просто использовать TryParse. Например, если текущая культура является en-US, пользователь может захотеть ввести «1 января 2015 года», которая является действительной датой. –

ответ

1

попробовать что-то вроде:

var dateFormats = new[] {"dd.MM.yyyy", "dd-MM-yyyy", "dd/MM/yyyy"}; 

bool validate = true; 
while (validate) // Loop indefinitely 
{ 
    Console.Write("\nSet your date: "); // Prompt 
    string readAddMeeting = Console.ReadLine(); // Get string from user 

    DateTime scheduleDate; 
    if(DateTime.TryParseExact(readAddMeeting,dateFormats, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out scheduleDate)) 
    { 
     Console.ForegroundColor = ConsoleColor.Green; 
     Console.WriteLine("Valid date"); 
     validate = false; 
    } 
    else 
    { 
     Console.ForegroundColor = ConsoleColor.Red; 
     Console.WriteLine("Invalid date: \"{0}\"", readAddMeeting); 
    } 
    Console.ForegroundColor = ConsoleColor.White; 
} 
+0

Когда вы пишете 'while (true)', он всегда показывает «введите действительную дату», даже если вы его пишете. – user5462581

+0

@ user5462581 100% ... Неплохая настройка, я имел в виду это как пример ..... для него настроить. – Seabizkit

+0

так что же работает soloutin? Я пытаюсь надолго. Не знаю, как это работает 100%. – user5462581

0

Используйте сделай While цикл:

do{ 
var dateFormats = new[] {"dd.MM.yyyy", "dd-MM-yyyy", "dd/MM/yyyy"}; 

Console.Write("\nSet your date: "); 

string readAddMeeting = Console.ReadLine(); 
DateTime scheduleDate; 

bool validDate = DateTime.TryParseExact(
readAddMeeting, 
dateFormats, 
DateTimeFormatInfo.InvariantInfo, 
DateTimeStyles.None, 
out scheduleDate); 

if (validDate) 
{ 
Console.ForegroundColor = ConsoleColor.Green; 
Console.WriteLine("Valid date"); 
Console.ForegroundColor = ConsoleColor.White; 
} 
else 
{ 
Console.ForegroundColor = ConsoleColor.Red; 
Console.WriteLine("Invalid date: \"{0}\"", readAddMeeting); 
Console.ForegroundColor = ConsoleColor.White; 
} 
}while(!validDate) 
Смежные вопросы