gpt4 book ai didi

c# - 在 C# 中多次询问用户同一个问题

转载 作者:行者123 更新时间:2023-11-30 22:59:27 25 4
gpt4 key购买 nike

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

  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....");
}

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

最佳答案

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

所以让我们首先关注提问部分。如果您查看 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 等。我的答案就是这样设计的。

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

关于c# - 在 C# 中多次询问用户同一个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52193626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com