关于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遇到回车符时,就认为读取完毕,就结束了读取,跳至下一步了,这也就是直接跳到输入密码那一步的原因了。
- 关于Console.ReadLine()与缓冲区的问题
- 关于Console.ReadLine()的问题
- 关于Console.read()和Console.ReadLine()缓冲的问题
- 关于缓冲区readLine函数的原理
- Read() 和 ReadLine() 的区别-------缓冲区问题
- 关于JAVA中Console.readLine()方法的使用!
- Console.Read()与Console.ReadLine()函数
- 关于socket的readLine和read问题
- 关于BufferedReader readline 阻塞的问题
- 关于BufferReader中readLine的问题!小心!
- Console.Readline()、Console.Readlkey()
- Console.read()、Console.readline()、Console.readkey()和Console.Write()、Console.Writeline()的区别
- Console.read()、Console.readline()、Console.readkey()和Console.Write、Console.Writeline()的意思
- 关于scanf()的缓冲区问题
- rails console" 提示`require': no such file to load -- readline 的问题
- C# Console.Read()和Console.ReadLine()的区别
- readLine()阻塞的问题
- 关于bufferedreader的read()与readline()读取出错的原因
- 10个谈话技巧让你平步青云
- 企业网站添加优质内容的10种方法
- 小做一网站
- 搜索引擎中文分词技术
- jxl 写 Excel 文件并下载(写头文件)
- 关于Console.ReadLine()与缓冲区的问题
- 队列的实现
- 图片做的按钮
- SQL语法之高级查询
- 密码对比
- 企业网站内页关键词布局分析
- 网页如何有效调用exe
- NMON第3分析工具
- C#中RSA加密解密和签名与验证的实现