[英]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.