Хорошая работа по самостоятельному исследованию и довольно приличный вопрос. И вы на правильном пути.
Итак, давайте сначала сосредоточимся на том, чтобы задать вопрос. Если вы посмотрите на ваш Question()
метод, вы увидите, что вы делаете что-то одно и то же внутри него. Да, вы задаете разные вопросы, но по существу вы делаете три вещи:
- Задайте вопрос.
- Получите ответ.
- Очистить консоль.
Итак, возможно, вы можете объединить эти три вещи в один метод, и единственная переменная здесь - это вопрос, так что вы можете передать вопрос в качестве параметра.
static string AskQuestion(string question)
{
Console.Write(question);
var ans = Console.ReadLine();
Console.Clear();
return ans;
}
Хорошо, немного лучше.
Теперь, как мы неоднократно задаем пользователю вопрос, пока не получим удовлетворительный ответ? Циклы являются хорошим решением, в частности, либо while
, либо do-while
, который не повторяется заданное количество раз, а выполняется до тех пор, пока не будет выполнено условие. Лично мне нравится использовать do-while
в такой ситуации.
Так что же нам теперь делать там? Давайте разберемся с этим. Мы напишем функцию, и внутри цикла мы хотим:
- Задайте вопрос и получите ответ. Хорошо, что у нас есть метод, который делает это.
- Показать пользователю ответ, который он / она ввели.
- Попросите пользователя подтвердить, если это хорошо.
- Если да, завершите цикл и верните ответ.
- Если нет, задайте вопрос еще раз.
Что-то похожее на это:
static string GetSatisfactoryAnswer(string question)
{
var ans = string.Empty;
bool goodAns = false;
do
{
ans = AskQuestion(question);
Console.WriteLine("You entered {0}. Is that correct?", ans);
var confirm = Console.ReadLine();
if (confirm.ToLower() == "y")
goodAns = true;
} while (!goodAns);
return ans;
}
Теперь вы можете называть их так:
static void Main(string[] args)
{
var name = GetSatisfactoryAnswer("Could I get your name? (Press enter when you are done) ");
var age = GetSatisfactoryAnswer("Awesome! Now if you could just enter your age: ");
Console.WriteLine();
Console.WriteLine("Name : {0}", name);
Console.WriteLine("Age : {0}", age);
Console.ReadLine();
}
ПРИМЕЧАНИЯ
- Это только для того, чтобы дать вам общее представление, вам нужно будет много обработать ошибки. Например, что если пользователь введет для подтверждения что-либо кроме
Y/N
?
- Это всегда хорошая идея, чтобы получить возраст как целое число. Поэтому используйте
int.TryParse()
для преобразования ввода string
в int
, а затем сделайте что-нибудь с этим, если было введено нечисловое значение.
- В вашем примере вы получаете одновременно
Name
и Age
, затем запрашиваете подтверждение, чтобы подтвердить их позже. На мой взгляд, лучше закончить одно и начать другое. Другими словами, убедитесь, что вы получили удовлетворительный ответ на Name
, затем перейдите на Age
и т. Д. Мой ответ разработан таким образом.
Надеюсь, это поможет. Удачи!