' '(回车符),' '(换行符)与" "

一、' ',' '和“ ”

回车 本义是光标重新回到本行开头,r的英文return,控制字符可以写成CR,即Carriage Return(回车,carriage有“马车”的意思)。

换行 本义是光标往下一行(不一定到下一行行首,不同操作系统中有差异),n的英文newline,控制字符可以写成LF,即Line Feed(换行)。


在Windows中:

' ' 回车,回到当前行的行首,而不会换到下一行,如果接着输出的话,本行以前的内容会被逐一覆盖;

' ' 换行,换到当前位置的下一行,而不会回到行首;

Unix系统里,每行结尾只有“<换行>”,即" ";Windows系统里面,每行结尾是“<回车><换行>”,即“ ”;Mac系统里,每行结尾是“<回车>”,即" "


实例:

System.out.print("this is the first line
");
System.out.print("this is the second line
");
//光标起始位置在上一行开头,会覆盖原本上一行内容
System.out.print("this is the third line
");
System.out.print("this is the fourth line
");
//光标起始位置在上一行开头,会覆盖原本上一行内容
System.out.print("this is the fifth line
");
System.out.print("end");

二、转换

以C语言为例,C语言中使用 表示换行,而在实际的文件中换行符号需要同操作系统一致,所以当我们在C中使用fopen打开一个文本文件时流实现了实际换行符与C中 之间的转换。在windows中当我们用fopen打开文本文件,然后从中读到 时流会转换为 ,而当我们往文件中写入 时流会转换为 。程序一是打开文本文件,程序二打开的是二进制文件,因为流只对文本文件进行换行表示的转换,以二进制模式打开流不会做任何处理。所以当你以二进制模式打开一个文本文件时将产生错乱,你必须亲自将 解释为 ,同样的问题也会出现在以文本模式打开二进制文件的情况.这也解释了为什么Unix类系统中的文件不区分文本文件和二进制文件的原因。

当我们使用标准输入输出函数时有这种情况吗?

再回到我们熟悉的标准输入输出stdin,stdout。C的控制台程序在加载进内存成为进程运行前C运行时库自动打开三个设备并关联到三个流:标准输入流stdin,标准输出流stdout,标准出错流stderr。通常在通用计算机中,没有重定向前这三个流对应的设备是:键盘,显示器,显示器。这三个都是字符设备,所以是以文本文件的模式打开的,在windows下当我们在键盘上敲入回车键时产生字符 ,但是在OS内核把键盘驱动中读到的字符发送给流的缓冲区时流会将之转换为 ,当我们向控制台输出 时流将之转换为 再传递至内核,当我们绕过标准输入输出直接调用windows中coredll.lib进行控制台输入输出时就必须面对这一现实,程序员负责实现这一转换。

参考:
[1]:https://blog.csdn.net/xiaofei2010/article/details/8458605
[2]:https://www.jb51.net/article/105500.htm

原文地址:https://www.cnblogs.com/Frank-Hong/p/14288106.html