在C#中不止一次向用户询问同一个问题

问题描述 投票:2回答:1

启动我的编程类简介,我们将在整个过程中使用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....");
}

这不是功课,所以我不介意具体的代码片段,所以我可以看到它是如何工作的,并修补它来学习:)

c# if-statement methods
1个回答
2
投票

自己做一些研究的好工作,以及一个相当不错的问题。你走在正确的轨道上。

所以让我们首先关注问题部分。如果你看看你的Question()方法,你可以看到你在它里面反复做同样的事情。是的,你问的是不同的问题,但基本上你做了三件事:

  • 问一个问题。
  • 得到答案。
  • 清除控制台。

所以,也许你可以将这三个东西放在一个方法中,这里唯一可变的是问题,所以你可以将问题作为参数传递。

static string AskQuestion(string question)
{
    Console.Write(question);
    var ans = Console.ReadLine();
    Console.Clear();
    return ans;
}

好吧,好一点。

现在,在得到满意答案之前,我们如何反复询问用户问题?循环是一个很好的解决方案,特别是whiledo-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,然后在输入非数值时对其进行处理。
  • 在您的示例中,您同时获得NameAge,然后请求稍后确认它们。在我看来,最好是完成一件事并开始另一件事。换句话说,确保你得到一个令人满意的答案Name,然后转移到Age等。我的答案是这样设计的。

希望这可以帮助。祝好运!

© www.soinside.com 2019 - 2024. All rights reserved.