C#循环直到给出有效答案

时间:2013-11-09 18:32:57

标签: c# if-statement

我正在尝试创建一个文本冒险类游戏,而且我对C#很新。我在网上搜索了大约半个小时,发现没有任何效果。我想做一些在输入有效答案之前不会继续的事情

这是一个例子:

var answer3 = Console.ReadLine();

if (answer3.Equals("1"))
{
   Console.WriteLine("ans 1");
}
else if (answer3.Equals("2"))
{
   Console.WriteLine("Ans 2");
}
else
{
   Console.WriteLine("Answer decision 1,2, or 3"); //This is what I need repeated

3 个答案:

答案 0 :(得分:2)

do{

    var answer3 = Console.ReadLine();


}while(answer3 != "something" || answer3 != "something else");

||意思是'或'

do- while基本上至少执行一次,直到某些条件为真,while。

do{

 this

}while(this isn't true);

答案 1 :(得分:1)

您可以使用while循环

string answer = Console.ReadLine();
while(!String.Equals(answer, desiredAnswer)
{
  Console.WriteLine("Answer decision 1,2, or 3");
  answer = Console.ReadLine();  
}

如果您有多个需要的答案,则可以OR条件while {/ 1}}

答案 2 :(得分:0)

实现它的一种方法是非常C#/。Net是使用Lambda表达式。 您可以在数组中定义有效值的列表,它将循环,直到您获得其中一个值。

string myString = "";
string[] validValues = new string[] { "1", "2", "3" };
while (!validValues.Any(myString.Equals))
    myString = Console.ReadLine();

相当于:

string myString = "";
string[] validValues = new string[] { "1", "2", "3" };
while (!validValues.Any(s=>myString.Equals(s))
    myString = Console.ReadLine();

switch (myString)
{
    case "1":
        Console.WriteLine("ans 1");
        break;
    case "2":
        Console.WriteLine("ans 2");
        break;
    case "3":
        Console.WriteLine("ans 3");
        break;
 }
如果括号中的条件传递任何元素,

validValues.Any将返回true。 Lambda表达式s=>myString.Equals(s)几乎就像一个函数,当参数s等于myString时,它将返回true。使用s时,Any将被列表中的每个元素替换。

在这种情况下,重要的是要注意=>并不意味着更大或更平等。这意味着您定义了一个以s为参数并返回myString.Equals(s)的函数/表达式。然后将其传递给Any,它将在每个元素上应用它,直到返回true。如果没有返回true,Any将返回false

Lambda表达式是C#的一个非常简洁的特性,当你习惯它时,它将允许你编写比C ++这样的语言简单得多的代码。由于我们大多数人花费大量时间编写样板代码或操纵从各种来源获得的数据,因此它可以使我们的生活更轻松。

更多关于lambda expressions