C#切换问题与goto

时间:2013-09-25 03:33:25

标签: c# switch-statement 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;  
            }
        }
    }
}

1 个答案:

答案 0 :(得分:3)

这是问题:

livro = (char)Console.Read();

问题是Console.Read()只占用一个字符。但是当您键入x并按Enter键时,缓冲区中有两个字符x\n(换行符)。因此,当下一个Console.Read()发生时,它会立即返回\n,根据您的switch,该xxxx也无效,然后您再次循环播放。

如果您要输入x,您会看到它为每个livro = Console.ReadLine().FirstOrDefault(); 循环一次,直到输入缓冲区再次为空。

请改为尝试:

\n

在这里,您阅读整行输入(\0除外),并取第一个字符(如果用户只按下输入,则为{{1}}。)