繁体   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