‘\n’ 换行符

不同计算机上c语言统一规定为:
文本文件的行结束符一律变成一个符号LF,也就是换行符,也就是new line符, 也就是'\n'.
“回车和换行符转换成一个换行符”-- 对PC机而言,文本文件行结束符,CRLF读入后,丢掉CR,留   LF.
例如fgets() 读入一行,行尾只有LF,没有CR.

换行(\n)就是光标下移一行却不会移到这一行的开头,回车(\r)就是回到当前行的开头却不向下移一行
Unix系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“<换行><回车>”,即“\n\r”;Mac系统里,每行结尾是“<回车>”。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。 
在ascii中,回车和换行是不同的字符。0x0A是回车,即光标移动到本行的最左面; 0x0D是换行,即光标移动到下一行。 

在dos窗口中按回车键,其实是输入了两个字符0x0A,0x0D,对应到c中,就是\r(回车)\n(换行) 

在C语言中 
将 \n 存入文件 
window: 0d 0a 
unix: 0d 
如果不存到文件中,不会变。 
如果从文件中提取, 
windows: 0d 0a -> \n 
unix : 0d -> \n

但是我们平时按得Enter到底是回车还是换行,不太清楚?? 
看到一种说法:windows下enter是 \n\r,unix下是\n,mac下是\r 

\n是换行,英文是linefeed,ASCII码是0xA。 \r是回车,英文是carriage return ,ASCII码是0xD。

如果你有在windows下编程的经验就会发现windows下敲下回车键会产生两个字符CR和LF,用16进制编辑器打开windows下的文本文件也会看到换行是0D和0A
表示的,也就是CR和LF的ASCII编码。而在UNIX类系统中换行只有一个字符LF,所以UNIX中的文本文件在windows中用记事本打开会出现不可解析字符且丢失
换行格式,所有字符连成一行。
因为windows下的记事本读到LF时不知道这就是换行(只有CR和LF连续出现才能解释为换行),于是当作不可打印字符处理,就是一个黑色方框。
CR和LF分别表示“回车”(carriage return)和“换行”(line feed),ASCII编码为13和10,在C语言中用\r和\n表示。
为什么windows下要用两个字符表示换行?这就是今天要讲的故事:《回车的传说》
在计算机刚刚诞生之时,广泛使用Teletype公司制造的一种古老的终端(console terminal)电传打字机ASR33。ASR33每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,打印头从行尾移到行首再下移一行要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失,那时可没有缓冲区暂存。Teletype的研究人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。
在现今的电脑键盘上,“回车键”上曾使用过“CR”、“RETURN”的字样,后来才统一确定为“Enter”。

参照http://blog.csdn.net/adaptiver/article/details/7368451
http://blog.csdn.net/silyvin/article/details/7275037

你可能感兴趣的:(‘\n’ 换行符)