C# 在C语言中多次询问用户相同的问题#
开始我的编程入门课程,我们将在整个课程中使用C。我目前正在编写一个练习程序来熟悉C#,它会询问用户的姓名和年龄,然后向他们读出,并询问是否正确。我想这样做,如果用户出于任何原因想要更改他们输入的数据,那么他们可以按“n”键“不,这不对”,然后重新输入他们的数据。但是,我想(分别)重新询问他们的年龄和姓名,而不必使用Console.WriteLines和if…else块重新键入代码块。我做了一些研究,发现:C# 在C语言中多次询问用户相同的问题#,c#,if-statement,methods,C#,If Statement,Methods,开始我的编程入门课程,我们将在整个课程中使用C。我目前正在编写一个练习程序来熟悉C#,它会询问用户的姓名和年龄,然后向他们读出,并询问是否正确。我想这样做,如果用户出于任何原因想要更改他们输入的数据,那么他们可以按“n”键“不,这不对”,然后重新输入他们的数据。但是,我想(分别)重新询问他们的年龄和姓名,而不必使用Console.WriteLines和if…else块重新键入代码块。我做了一些研究,发现: “go to”语句是魔鬼自己做的,如果我使用它,它本质上等同于仇恨犯罪 用询问问题的代码块
这不是家庭作业,所以我不介意特定的代码片段,这样我就可以看到它是如何工作的,并通过修改它来学习:)自己做一些研究做得很好,这是一个相当不错的问题。你走在正确的轨道上 那么,让我们首先关注提问部分。如果你看一下你的
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(正确=否),让它重复分解问题-看看你的问题
函数…其中任何一个看起来都是重复的?如果你可以用任何问题字符串调用一个函数并让它返回用户的任何答案输入,这不是很好吗?