簡體   English   中英

Goto的C#開關問題

[英]C# switch issue with goto

事實是,它運行良好,可以運行,但是當我輸入無效字母時,程序返回兩次標簽,它兩次返回相同的選項,為什么呢? 它應該重新開始,並僅一次向我顯示選項。

namespace First_c_sharp_code
{
    class Program
    {
        static void Main(string[] args)
        {
            char livro;
            label:
            Console.Write("\n c: for computer books \n m: for mathematical books \n h: for   history books \n e: for English books");
            livro = (char)Console.Read();

            switch (livro) 
            { 
                case 'c':
                    Console.WriteLine("Aprendendo C#");
                    break;
                case 'm':
                    Console.WriteLine("Somando com Pokemon");
                    break;
                case 'h':
                    Console.WriteLine("Brasil dos Índios");
                    break;
                case 'e':
                    Console.WriteLine("CCAA Book");
                    break;
                default:
                    Console.WriteLine("\n Opção Inválida. Tente novamente");
                    goto label;  
            }
        }
    }
}

這是問題所在:

livro = (char)Console.Read();

問題在於Console.Read()只需要一個字符。 但是,當您鍵入x並按Enter鍵時,緩沖區中有兩個字符x\\n (換行符)。 因此,當下一個Console.Read()發生時,它立即返回\\n ,根據您的switch ,它也是無效的,並且您再次循環。

如果輸入xxxx ,則每個x都會循環一次,直到輸入緩沖區再次為空。

嘗試以下方法:

livro = Console.ReadLine().FirstOrDefault();

在這里,您將讀取整行輸入(不包括\\n ),並輸入第一個字符(如果用戶只是按Enter鍵,則輸入\\0 )。

暫無
暫無

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

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