开始我的编程入门课程,我们将在整个课程中使用C#。我目前正在编写一个练习程序以熟悉C#,该程序询问用户的姓名和年龄,然后将其读出给他们并询问是否正确。我要这样做,以便如果用户出于任何原因想要更改其输入的数据,则可以按“ n”键表示“否,这不正确”,然后重新输入其数据。但是,我想(分别)向他们询问年龄和姓名的问题,而不必使用Console.WriteLines和if ... else块重新键入代码块。我做了一些研究,发现:
我的问题是,尽管我已经(希望)弄清楚了这是我需要做的,但我似乎无法弄清楚究竟是如何实现该方法还是以后再正确调用它。
这是我尝试创建的一种方法,该方法是要保存“ 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....");
}
这不是家庭作业,因此我不介意特定的代码段,因此我可以看到它的工作原理并进行修改以学习:)
答案 0 :(得分:2)
做好自己的研究工作,还有一个相当不错的问题。而且您走在正确的轨道上。
因此,让我们首先集中讨论问题部分。如果查看您的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
上,依此类推。我的回答就是这样设计的。希望这会有所帮助。祝你好运!