簡體   English   中英

C#如何使開關忽略無效輸入?

[英]C# How do I make a switch ignore invalid input?

我正在嘗試制作一個以標題屏幕開頭的簡單控制台游戲。 用戶輸入新游戲的“ N”,加載游戲的“ L”或退出的“ E”。 我將其設置為開關,但是我需要知道如何使程序忽略上述鍵以外的任何輸入。 我已經用Google搜索了這個問題,但是沒有找到答案。 如果可以的話請幫忙。

我在發布代碼中沒有多大意義,因為簡單切換10行可能對解決問題沒有太大幫助。 另外,如果有比開關更簡單/有效的方法,我很想知道。

謝謝。

您可以使用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情況,然后您可以使用該default情況來提示輸入有效的內容。

如果您實際上想忽略除有效密鑰以外的所有其他密鑰,則可以執行以下操作:

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表示它將攔截該鍵,而不在控制台上顯示它。 這使您可以選擇確定其有效還是無效。

如果switch語句沒有default塊,並且如果打開的表達式不匹配任何case塊,則switch語句不執行任何操作。

當只有3種情況時,切換不會比簡單的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;
}

伙計們,謝謝你的答復。 通過執行以下操作,我設法解決了該問題:

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”以外的任何鍵均不再起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM