Задавая пользователю один и тот же вопрос более одного раза в C # - PullRequest
0 голосов
/ 06 сентября 2018

Начиная мой вводный курс по программированию, и мы будем использовать C # во всем этом. В настоящее время я пишу учебную программу для ознакомления с C #, которая спрашивает у пользователя его имя и возраст, а затем зачитывает его и спрашивает, правильно ли это. Я хочу сделать так, чтобы, если пользователь по какой-либо причине захотел изменить свои введенные данные, он мог бы нажать клавишу «n» для «нет, это не так» и повторно ввести свои данные. Тем не менее, я хочу повторно задать им вопросы об их возрасте и имени (отдельно) без необходимости повторного ввода блока кода с помощью Console.WriteLines и блока if ... else. Я провел некоторое исследование и обнаружил, что:

  1. заявление о переходе было сделано самим дьяволом, и это, по сути, программный эквивалент преступления на почве ненависти, если я его использую
  2. создание нового метода (и последующий вызов этого метода в моем коде) с блоком кода, задающего вопрос, кажется, способ решить эту проблему.

Моя проблема в том, что, хотя я (надеюсь) понял, что это то, что мне нужно сделать, я не могу понять, как именно реализовать этот метод или правильно вызвать его позже.

вот метод, который я пытаюсь создать, который я хочу держать в операторе «if ... else», спрашивающем, является ли информация правильной, неправильной, или повторно задать вопрос, если введите что-то отличное от «y» "или" n ":

public void Question()
{
    Console.Write("Could I get your name? (Press enter when you are done) ");
    string user_name = Console.ReadLine();
    Console.Clear();
    Console.Write("Awesome! Now if you could just enter your age: ");
    string user_age = Console.ReadLine();
    Console.Clear();
    Console.WriteLine("So according to the information I have on file here... you are " + user_name + " and you're " + user_age + " years old....");
}

Это не домашнее задание, поэтому я не возражаю против конкретных фрагментов кода, чтобы понять, как он работает, и поработать с ним, чтобы изучить :)

1 Ответ

0 голосов
/ 06 сентября 2018

Хорошая работа по самостоятельному исследованию и довольно приличный вопрос. И вы на правильном пути.

Итак, давайте сначала сосредоточимся на том, чтобы задать вопрос. Если вы посмотрите на ваш 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 и т. Д. Мой ответ разработан таким образом.

Надеюсь, это поможет. Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...