在C#

时间:2018-09-05 21:28:09

标签: c# if-statement methods

开始我的编程入门课程,我们将在整个课程中使用C#。我目前正在编写一个练习程序以熟悉C#,该程序询问用户的姓名和年龄,然后将其读出给他们并询问是否正确。我要这样做,以便如果用户出于任何原因想要更改其输入的数据,则可以按“ n”键表示“否,这不正确”,然后重新输入其数据。但是,我想(分别)向他们询问年龄和姓名的问题,而不必使用Console.WriteLines和if ... else块重新键入代码块。我做了一些研究,发现:

  1. “ go-to”声明是魔鬼本人提出的,如果我使用的话,它在编程上等同于仇恨犯罪
  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 :(得分: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上,依此类推。我的回答就是这样设计的。

希望这会有所帮助。祝你好运!