今天有人问我了这样一个问题:
static void Main(string[] args)
{
Console.WriteLine("你是否同意本邮件服务条款?(Y/N)");
int k = Console.Read();
Console.ReadLine();//有啥作用啊???//注释后,无法输入注册的用户名,为什么?
if (k == 'Y' || k == 'y')
{
Console.WriteLine();
Console.WriteLine("请输入要注册的用户名:");
string name = Console.ReadLine();
Console.Write("请输入密码:");
string pwd = Console.ReadLine();
Console.WriteLine("祝贺你!注册成功!");
Console.WriteLine("你邮箱地址是{0}@lcs,密码是{1}",name,pwd );
}
问题就是红色的那句。
经过1小时的询问与研究,找到了能正确的原理:
主要原因是关于缓冲区的,
当Console.Read()执行后,读取了第一个字符,
之后跳过了一个ReadLine并不是因为跳过了代码的执行,而是已经执行过了,
这是为什么呢?
前一个Read方法的作用是读取用户输入的一个字符,但我们在输入的时候,总是输入一个字符和一个回车键,但一般会忽略掉那个回车键(因为不显示),但事实上,回车键也产生了一个字符,那就是回车符,回车符并没有被Read方法所读取,而是仍旧保留在缓冲区中,当遇到下一个ReadLine时,就自动将缓冲区输出给Readline,而缓冲区里是回车符,所以当ReadLine遇到回车符时,就认为读取完毕,就结束了读取,跳至下一步了,这也就是直接跳到输入密码那一步的原因了。