关于Console.ReadLine()与缓冲区的问题

来源:互联网 发布:淘宝手机卡套餐 编辑:程序博客网 时间:2024/05/11 19:37

 今天有人问我了这样一个问题:


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遇到回车符时,就认为读取完毕,就结束了读取,跳至下一步了,这也就是直接跳到输入密码那一步的原因了。

原创粉丝点击