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

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


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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值