Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C语言中多次询问用户相同的问题#_C#_If Statement_Methods - Fatal编程技术网

C# 在C语言中多次询问用户相同的问题#

C# 在C语言中多次询问用户相同的问题#,c#,if-statement,methods,C#,If Statement,Methods,开始我的编程入门课程,我们将在整个课程中使用C。我目前正在编写一个练习程序来熟悉C#,它会询问用户的姓名和年龄,然后向他们读出,并询问是否正确。我想这样做,如果用户出于任何原因想要更改他们输入的数据,那么他们可以按“n”键“不,这不对”,然后重新输入他们的数据。但是,我想(分别)重新询问他们的年龄和姓名,而不必使用Console.WriteLines和if…else块重新键入代码块。我做了一些研究,发现: “go to”语句是魔鬼自己做的,如果我使用它,它本质上等同于仇恨犯罪 用询问问题的代码块

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

  • “go to”语句是魔鬼自己做的,如果我使用它,它本质上等同于仇恨犯罪
  • 用询问问题的代码块创建一个新方法(并随后在我的代码中调用该方法)似乎是解决这个问题的方法
  • 我的问题是,虽然我(希望)已经知道这是我需要做的,但我似乎无法确切地知道如何实现该方法,也无法在以后正确地调用它

    下面是我试图创建的方法,我希望保留一个“if…else”语句,询问信息是否正确,或者如果输入的不是“y”或“n”,则重新询问问题:


    这不是家庭作业,所以我不介意特定的代码片段,这样我就可以看到它是如何工作的,并通过修改它来学习:)

    自己做一些研究做得很好,这是一个相当不错的问题。你走在正确的轨道上

    那么,让我们首先关注提问部分。如果你看一下你的
    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();
    }
    
    现在你可以这样称呼他们:

    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();
    }
    
    笔记
    • 这只是给你一个粗略的想法,你需要做大量的错误处理。例如,如果用户输入除“是/否”以外的任何内容进行确认,该怎么办
    • 把年龄作为一个整数来计算总是个好主意。因此,使用
      int.TryParse()
      string
      输入转换为
      int
      ,然后在输入非数值时对其进行处理
    • 在您的示例中,您同时获得
      姓名
      年龄
      ,然后要求use稍后确认。在我看来,最好先完成一件事,再开始另一件事。换句话说,请确保您对
      姓名
      的回答令人满意,然后转到
      年龄
      ,等等。我的回答就是这样设计的

    希望这有帮助。祝你好运

    所以你想重复一个问题,直到得到充分的回答。其中一个构造是
    while()
    循环。检查您的条件是否满足,当它不满足时,只需将true返回到
    while(条件)
    conditiondo(询问问题;显示;询问是否正确)}while(正确=否),让它重复分解问题-看看你的
    问题
    函数…其中任何一个看起来都是重复的?如果你可以用任何问题字符串调用一个函数并让它返回用户的任何答案输入,这不是很好吗?