簡體   English   中英

循環運行直到按下某個鍵 - C#

[英]Loop that runs until certain key is pressed - C#

我正在嘗試創建一個循環,直到按下某個鍵而不會中斷。 我正在使用 .NET 6.0 制作 C# 控制台應用程序。

我的目標是一個循環,直到按下某個鍵。 這第一個例子是我一直在使用的。 此循環偵聽要按下的鍵“L”,而按下的鍵不是“B”。 但是,如果按下不同的鍵,比如“m”,則循環變得無響應,並且在之后按下鍵“L”或“B”時不會執行任何操作

示例 1(來源

 do {
       if (key == ConsoleKey.L)
       {
          // Do stuff
       }
 } while (key != ConsoleKey.B);

 // Do stuff after the 'B' key is pressed

在我嘗試的第二個示例中,循環對任何形式的輸入都沒有響應。

示例 2( 來源

while (!(Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.L))   
{
    if (Console.ReadKey(true).Key == ConsoleKey.N) 
    {
        // Do stuff
    }
}

// Do stuff when the key 'L' is pressed

是否有一個相當簡單的修復方法,我可以在其中運行一個循環,直到按下某個鍵,而在按下另一個鍵時不會中斷?

為了更清楚,我在 static 函數中寫了解決方案。

您可以使用兩種不同的解決方案,或者使用 switch 語句來檢查按下的鍵:

`
        static void Solution1()
        {
            while (!(Console.KeyAvailable))
            {
                switch (Console.ReadKey(true).Key)
                {
                    case ConsoleKey.L: Console.WriteLine("L pressed"); break;
                    case ConsoleKey.N: Console.WriteLine("N pressed"); break;
                }
            }
        }
`

或者做一個while循環,如果你的鍵被按下就會中斷,而不使用break語句(你可以命名你想要的“conK”變量):

    static void Solution2()
    {
        ConsoleKey conK = Console.ReadKey(true).Key;
        while (!Console.KeyAvailable && conK != ConsoleKey.L)
        {
            if (conK == ConsoleKey.N) Console.WriteLine("N pressed.");  // Do stuff if N is pressed
            conK = Console.ReadKey(true).Key;
        }
        Console.WriteLine("Loop broke, L pressed."); // Do stuff after L is pressed and loop broke
    }

我在發布之前對兩者都進行了測試,但我確信第二種解決方案就是您正在尋找的。

祝你今天過得愉快

暫無
暫無

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

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