0

私はテキスト アドベンチャー タイプのゲームを作成しようとしていますが、C# は初めてです。Web を約 30 分間検索しましたが、機能するものは何も見つかりませんでした。有効な回答が入力されるまで続かないものを作りたい

これは例です:

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
4

3 に答える 3

2
do{

    var answer3 = Console.ReadLine();


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

|| 「または」を意味します

do- while 基本的に、ある条件が true になるまで、少なくとも 1 回何かを実行します。

do{

 this

}while(this isn't true);
于 2013-11-09T18:36:05.700 に答える
1

while ループを使用できます

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

希望する回答が複数ある場合は、ORそれらのみをwhile条件に含めることができます

于 2013-11-09T18:37:01.343 に答える
1

非常に C#/.Net である 1 つの方法は、ラムダ式を使用することです。配列で有効な値のリストを定義すると、これらの値のいずれかを取得するまでループします。

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 式は、引数が myString と等しいs=>myString.Equals(s)場合に true を返す関数に似ています。を使用すると、リストの各要素に置き換えられます。ssAny

この場合、それ=>以上または等しいという意味ではないことに注意することが重要です。sこれは、パラメータとして受け取り、 を返す関数/式を定義したことを意味しますmyString.Equals(s)。それを に渡すとAny、 が返されるまですべての要素に適用されますtrue。どれも true を返さなかった場合は、Anyを返しfalseます。

ラムダ式は C# の非常に優れた機能です。慣れると、C++ などの言語よりもはるかに単純なコードを記述できるようになります。私たちのほとんどは、ボイラープレート コードを書いたり、さまざまなソースから取得したデータを操作したりすることに多くの時間を費やしているため、作業が大幅に楽になります。

ラムダ式の詳細

于 2013-11-09T18:40:31.917 に答える