当前位置: 首页 > 科技观察

-n和-r在文本或代码中的区别

时间:2023-03-12 05:32:23 科技观察

我们在使用printf打印时,基本都是使用\n、\r等控制字符,如:printf("helloworld!\r\n");那么你知道这些\n和\r有区别吗?#关于ASCII码中的“\n”和“\r”,我们会看到一类不可显示的字符,称为控制字符,包括\r、\n等控制字符。\n:换行符(newline),开始新的一行,对应ASCII值10(缩写:LF)。\r:回车(return),返回到一行的开头,对应ASCII值13(缩写:CR)。回车换行来源:在计算机出现之前,有一种东西叫做电传打字机(TeletypeModel33),每秒可以打10个字符。但是它有一个问题,就是输入一行后需要0.2秒才能输入一个换行符,刚好可以输入两个字符。如果在这0.2秒内,传输了一个新字符,则该字符将丢失。因此,开发人员想了一个办法来解决这个问题,就是在每一行的末尾加上两个字符来表示结束。一种称为“回车”,告诉打字机将打印头定位在左边界;另一种称为“换行”,告诉打字机将纸张向下移动一行。这就是“换行”和“回车”的由来,从它们的英文名字就可以看出。#"\n"和"\r"的区别后来计算机被发明了,这两个概念被搬到了计算机上。当时内存很贵,有科学家认为每行末尾加两个字符太浪费了,只加一个。于是,分歧产生了。'\r'为回车,'\n'为换行,前者使光标移至行首,后者使光标下移一个空格。通常的回车是两个相加。一些编辑器只识别\r\n,而其他编辑器两者都识别。所以如果想要通用,换行最好用\r\n。在微软的MS-DOS和Windows中,使用“回车CR('\r')”和“换行LF('\n')”这两个字符作为换行符;在Windows系统中,每行的结尾是回车+换行(CR+LF),即“\r\n”;在Unix系统中,每行末尾只有换行符CR,即“\n”;在Mac系统中,每行的结尾是回车CR,即'\r';所以,我们平时写文件的回车符应该叫做回车换行符;#影响的一个直接后果就是如果在Windows中打开Unix/Mac系统下的文件,所有的文字都会变成一行;而在Windows下如果文件是在Unix/Mac下打开的,每行末尾可能会多出一个^M符号。如果在Windows上用记事本查看Linux中保存的文件,会出现黑点。这个应该很多人都看到过,比如Keil代码直接显示换行符:mutualconversionlinux下命令unix2dos是将linux文件格式转换成windows文件格式,命令dos2unix是转换windows格式为linux文件格式。使用FTP软件在不同平台之间传输文件时,在asciitextmode传输方式下,部分FTP客户端程序会自动转换为换行格式。此传输后文件的字节数可能会更改。如果不想ftp修改原文件,可以使用bin模式(binarymode)传输文本。在windows上运行的程序会生成一个CR/LF格式的文本文件,而在Linux上运行会生成一个LF格式的文本文件。示例代码:#include"stdio.h"intmain(){printf("hello,World");printf("\n");printf("\t");printf("#");printf("\r");printf("@");return0;}图:程序输出: