0

タイトル画面から始まるシンプルなコンソールゲームを作ろうとしています。ユーザーは、新しいゲームの場合は「N」、ゲームをロードする場合は「L」、終了する場合は「E」を入力します。これをスイッチとして設定しましたが、プログラムが前述のキー以外の入力を無視するようにする方法を知る必要があります。この質問をグーグルで検索しましたが、答えが見つかりませんでした。できれば助けてください。

単純なスイッチの 10 行はおそらく問題の解決にはあまり役に立たないので、コードを投稿する意味はあまりありません。また、スイッチよりも簡単で効率的な方法があれば、ぜひ知りたいです。

ありがとう。

4

5 に答える 5

3

default:ステートメントを使用して、他の (不明な) ケースを処理できます。

switch(inputString.ToLower())
{
     case "n":
       // Handle new
       break;
     //.. handle known cases
     default:
         Console.WriteLine("Unknown option chosen.  Please enter valid option:");
         // Re-read values, etc?
         break;
}

他のケースのいずれかで指定されていないものはすべてケースに分類され、default有効な入力を求めるために使用できます。

于 2012-10-22T17:59:13.427 に答える
1

有効なキー以外のすべてのキーを実際に無視したい場合は、次のようにすることができます。

public static char ReadKey(IEnumerable<char> validKeys)
{
    var validKeySet = new HashSet<char>(validKeys);
    while (true)
    {
        var key = Console.ReadKey(true);
        if (validKeySet.Contains(key.KeyChar))
        {
            //you could print it out if you wanted.
            //Console.Write(key.KeyChar);
            return key.KeyChar;
        }
        else
        {
            //you could print an error message here if you wanted.
        }
    }
}

指示されたを使用するReadKey(true)と、trueそのキーがインターセプトされ、コンソールに表示されません。これにより、有効か無効かを判断するオプションが提供されます。

于 2012-10-22T18:03:34.797 に答える
0

switchステートメントにブロックがなくdefault、オンになっている式がどのcaseブロックにも一致しない場合、ステートメントswitchは何もしません。

于 2012-10-22T18:01:03.940 に答える
0

ケースが 3 つしかない場合、switch は単純なif-else構成よりも効率的ではありません。

if (input == "N")
{
    // New game
}
else if (input == "L")
{
    // Load game
}
else if (input == "E")
{
    // Exit game
}
// if none of the cases match, the input is effectively ignored.

スイッチの使用を主張する場合、構成は非常に似ています。

switch (input)
{
    case "N":
        //New Game
        break;
    case "L":
        //Load Game
        break;
    case "E":
        //Exit Game
        break;
    default:
        //Do nothing (ignore unmatched inputs)
        break;
}
于 2012-10-22T18:03:22.677 に答える
0

返信ありがとうございます。私は次のことを行うことで問題を解決することができました:

static void titleInput()
    {
        ConsoleKeyInfo titleOption = Console.ReadKey(true);

        switch (titleOption.Key)
        {
            case ConsoleKey.N:
                Console.Clear();
                break;
            case ConsoleKey.L:
                break;
            case ConsoleKey.E:
                Environment.Exit(0);
                break;
            default:
                titleInput();
                break;

        }
    }

これがどれほど「適切」かはわかりませんが、必要なことは実行します。「N」、「L」、および「E」以外のキーは、もはや何もしません。

于 2012-10-22T18:33:28.690 に答える