0

问题是,它工作正常,它运行,但是当我输入一个无效的字母时,程序返回标签两次,它两次返回相同的选项,这是为什么呢?它应该回到开头并向我展示一次选项。

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;  
            }
        }
    }
}
4

1 回答 1

3

这是问题行:

livro = (char)Console.Read();

问题是Console.Read()只需要一个字符。但是当你输入x并按下回车时,缓冲区中有两个字符,x\n(换行符)。所以当下一次Console.Read()发生时,它立即返回\n,根据你的也是无效的switch,你再次循环。

如果要输入xxxx,您会看到它为 each 循环一次x,直到输入缓冲区再次为空。

试试这个:

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

在这里,您读取一整行输入(不包括\n),并取第一个字符(或者\0如果用户只是按 Enter 键)。

于 2013-09-25T03:38:19.630 回答