问题是,它运行良好,它运行,但当我输入一个无效的字母时,程序返回标签两次,它返回两次相同的选项,为什么?它应该返回到开头并向我显示一次选项。
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;
}
}
}
}
答案 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}}。)