【问题标题】:C# switch issue with gotogoto 的 C# 切换问题
【发布时间】:2013-09-25 03:33:24
【问题描述】:

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

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

【问题讨论】:

  • 是的。不要使用goto

标签: c# switch-statement goto


【解决方案1】:

这是问题所在:

livro = (char)Console.Read();

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

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

试试这个:

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

在这里您读取一整行输入(不包括\n),然后取第一个字符(如果用户只是按回车键,则为\0)。

【讨论】:

  • 非常感谢,真的很有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多