编程语言
首页 > 编程语言> > C#中Console.Read()与Console.ReadLine()的区别

C#中Console.Read()与Console.ReadLine()的区别

作者:互联网

    在写Console.Read()与Console.ReadLine()之前,我们先讨论一个问题。

    每一个会用计算机的人,都有这个经验,即当我们用Word编写文章的时候,敲一下键盘上的Enter键,光标就会换行。这个Enter键盘,我们通常都叫它回车键。在计算机科学中,回车和换行是两个概念。在编程语言中,回车用\t(反斜杠t)表示,换行用\n(反斜杠n)表示。既然我们敲的是回车键,为什么光标换行了呢?按理说,我们只有敲了换行键,光标才能换行呀!

 可是,我们都知道,键盘上,只有回车键,没有换行键。

    那么问,回车与换行有什么区别呢?

 一、回车与换行的区别1

    名词释义

    CR:Carriage Return,对应ASCII中转义字符\r,表示回车;

    LF:Linefeed,对应ASCII中转义字符\n,表示换行 ;

    CRLF:Carriage Return & Linefeed,\r\n,表示回车并换行 

    从技术发展史上讲,回车和换行是机械打字机时代的概念。据野史记载,在很久以前的机械打字机时代,回车和换行分别具有不同的作用:LF会将打印纸张上移一行位置,但是保持当前打字的水平位置不变;CR则会将“Carriage”(打字机上的滚动托架)滚回到打印纸张的最左侧,但是保持当前打字的垂直位置不变,即还是在同一行。 在今天来说,回车和换行是针对光标而言的,所谓回车,就是光标水平回到所在行的做左侧;所谓换行,就是让光标垂直进入下一行。从这个意义上说,我们在键盘上敲Enter键换行的时候,在计算机内部,其实上对应的是两个操作,一个是回车,一个是换行

二、Console.Read()与Console.ReadLine()的区别

    相同点:两者都是用于输入的函数

    不同点:1.Read()每次只能读取一个字符;ReadLine()每次能读取一个字符串。

      2.Read()返回值是输入字符的ASCII码的十进制值;ReadLine()返回值是输入的字符串。

               3.read()方法在键入enter时终止,并且会在输入内容后面追加行终止序列。按 Enter 会将依赖于平台的行终止序列追加到输入 (Windows追加回车符换行序列) 。read()时从缓冲区读入单个字符的int 类型,  在使用read()时,注意如果使用回车(enter)结束时,就会把换行和回车符一同放入缓冲区。这一点特别重要。(关于c# read( )使用注意缓冲区赘余输入(附代码)

     4.ReadLine(),只读字符,不读回车和换行符。缓冲区里的字符如果还有回车和换行,ReadLine()不读回车和换行。

关于两个函数的前两点区别,从这两篇博文中学到(C#中Read()和ReadLine()区别C#中Console.Read()、Console.ReadLine()、Console.ReadKey()的区别

对于第1点区别,亲测一下试一下,测试代码:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 
 6 namespace ConsoleApplication1
 7 {
 8     class Program
 9     {
10        
11         static void Main(string[] args)
12         {
13             int test_int;   
14             Console.Write("请输入字符串:");
15             test_int = Console.Read();
16             Console.WriteLine("输入字符的ASCII值:{0}", test_int);
17 
18             Console.ReadKey();
19         }
20     }
21 }

输入A和ABC,分别运行一次,结果如下图所示:

 对于第2点区别,测试代码如下:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 
 6 namespace ConsoleApplication1
 7 {
 8     class Program
 9     {
10 
11         static void Main(string[] args)
12         {
13             string test_string;
14             Console.Write("请输入字符串:");
15             test_string = Console.ReadLine();
16             Console.WriteLine("输入的字符串是:{0}",test_string);
17 
18             Console.ReadKey();
19         }
20     }
21 }

分别输入A和ABC,执行结果如下:

 关于第3点区别,我们先看一下Read(),用下面语句来验证:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 
 6 namespace ConsoleApplication1
 7 {
 8     class Program
 9     {
10 
11         static void Main(string[] args)
12         {
13             Boolean flag = true;
14             char s;
15             int count = 1;
16             while (flag)
17             {
18                 Console.WriteLine("请输入字符M:");
19                 s = (char)Console.Read();    // 缓冲区 里存入啦 字符 回车 换行 三个字符(假如输入1个字符的话,如果输入N个字符,此处三应为N+2) 会挨个读入 所以会三(N+2)次错误
20                 if (s == 'M' || s == 'm')
21                 {
22                     flag = false;
23                     Console.WriteLine("输入正确,奖你2朵小红花{0}{0}。",Convert.ToChar(5));//小红花的ASCII值为5
24                 }
25                 else
26                 {
27                     Console.WriteLine("输入错误,这是第{0}次输入错误,输入的字符ASCII值为{1},请输入正确字符!", count, Convert.ToInt32(s));
28                     count++;
29                 }
30             }
31             Console.ReadKey();
32         }
33     }
34 }

 我们分别输入M、A和ABC(注:A的ASCII 值为65,B的ASCII 值为66,C的ASCII 为67,'\r'的ASCII 值为13,'\n'的ASCII 值为10),执行结果如下:

 

 

 而对于ReadLine()(即第4点所述),我们用两段代码对比验证下:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 
 6 namespace ConsoleApplication1
 7 {
 8     class Program
 9     {
10        
11         static void Main(string[] args)
12         {
13             Console.Write("请输入字符串ABC:");
14             int i = Console.Read();
15             char chr = (char)i;
16             Console.WriteLine("Read()读取的字符是:" + chr);
17 
18             string str = Console.ReadLine();
19             //string str = "BC\r\n";
20             Console.Write("变量str保存的字符串是:"+str);
21 
22             Console.ReadKey();
23         }
24     }
25 }  

 输入ABC,执行结果:

此刻,字符串变量str保存的值,即为ReadLine()读取的值,注意,光标在BC后面紧挨着,说明ReadLine()没有读取缓冲区里的回车和换行。

我们把上述代码18行注释掉,把19行的注释取消掉,再输入ABC执行,执行结果:

可以看到,光标回车换行了。两相对比,可以看出,第一次的str,ReadLine()对其赋值的时候,并没有回车和换行。第二次,我们手动添加回车和换行,光标就回车换行了。

 

 

 

 

 

 

 

 

 

 

参考文献:

1.回车与换行的区别,CRLF、CR、LF详解。

标签:Console,换行,C#,System,Read,using,ReadLine,回车
来源: https://www.cnblogs.com/fatherofbeauty/p/16341042.html