C语言中换行符与回车符的区别.doc_第1页
C语言中换行符与回车符的区别.doc_第2页
C语言中换行符与回车符的区别.doc_第3页
C语言中换行符与回车符的区别.doc_第4页
C语言中换行符与回车符的区别.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言中换行符与回车符的区别能不能说“换行符就是输入完一行内容后,光标转到下一行的起始位置”,而“回车符就是输入完一行后光标转到该行的起始位置,其并不换行”?如果是,那我们平时在键盘上用的 Enter 和 Tab 又属于什么符呢?你说的没错,换行(n)就是光标下移一行却不会移到这一行的开头,回车(r)就是回到当前行的开头却不向下移一行.Enter键按下后会执行nr这样就是我们看到的一般意义的回车了,所以你用16进制文件查看方式看一个文本,就会在行尾发现nrTab是制表符,就是t,作用是预留8个字符的显示宽度,用于对齐。在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。 Unix系统里,每行结尾只有“”,即“n”;Windows系统里面,每行结尾是“”,即“nr”;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键,是一个比较有用的键,在文字编辑时,回车键的作用是换行,在输入网址时回车键的作用是“转到”,在执行DOS命令时,回车键的作用是执行 在标准键盘上,回车键一共有2个,一个在主键盘区的右边,Shift键的上面,一个在小键盘的右下角,加号键的下面。 回车键的历史 关于“回车键”的来历,还得从机械的英文打字机说起。在打字机上,有一个部件叫“字车”,每输入一个单词,“字车”就前进一格。当输满一行后,使用者就要推动“字车”到起始位置,这时打字机会有两个动作:“字车”归位、滚筒上卷一行(相当于“字车”下移一行),以便开始输入下一行,这中推动“字车”的动作叫“回车”。后来,在电动的打字机上,人们增加了一个直接起“回车”作用的键。他被称为“回车键”。 在现今的电脑键盘上,“回车键”上曾使用过“CR”、“RETURN”的字样,后来才统一确定为“Enter”。 回车的ASCII代码 16进制是“0x0d” 10进制是“13” 在某些语言中可以用r表示。如果用过机械打字机,就知道回车和换行的区别了。 换行就是把滚筒卷一格,不改变水平位置。 回车就是把水平位置复位,不卷动滚筒。 但是我们平时按得Enter到底是回车还是换行,不太清楚? 看到一种说法:windows下enter是 nr,unix下是n,mac下是r 在MS的系统中纯文本格式按一个回车键是输入了两个字符,一个回车一个换行。在LINUX系统中则只是一个回车。 /以上内容参考了/t/20040617/23/3101951.html#和/t/20021113/09/1171659.html的讨论 还有在编程时文件操作 wb(二进制方式)或者wt(文本方式)也会有影响。我做了个实验(实验用.net2003) 在01.txt文件中输入12然后enter,在ultraedit中看到的二进制是31 32 0d 0a 然后程序如下: int mian() FILE *fp1,*fp2,*fp3,*fp4,*fp5,*fp6; char a10; char b10; fp1 = fopen(01.txt,r); fp3 = fopen(02.txt,w); fread(a,sizeof(unsigned char),8,fp1); /a里是31 32 0a fwrite(a,sizeof(unsigned char),8,fp3); /02.txt里是31 32 0d 0a ,原因是输入的情况下,换行回车转换成换行,然后输出时换行又会转成换行回车 fclose(fp1); fclose(fp3); fp2 = fopen(01.txt,rb); fp4 = fopen(03.txt,wb); fread(b,sizeof(unsigned char),8,fp2); /b里是31 32 0d 0a fwrite(b,sizeof(unsigned char),8,fp4); /03.txt里是31 32 0d 0a ,原因是二进制情况下回车和换行的(类似文本方式的那种转换)是不存在的 fclose(fp2); fclose(fp4); return 0; 好像结论是这样的:读的方式下,在文本方式下,enter是0x0a;在二进制方式下,enter是0x0d,0x0a。 MSDN中查到这样的话:Also, in text mode, carriage returnlinefeed combinations are translated into single linefeeds on input, and linefeed characters are translated to carriage returnlinefeed combinations on output. (输入的情况下,换行回车转换成换行,然后输出时换行又会转成换行回车)When a Unicode stream-I/O function operates in text mode (the default), the source or destination stream is assumed to be a sequence of multibyte characters. Therefore, the Unicode stream-input functions convert multibyte characters to wide characters. For the same reason, the Unicode stream-output functions convert wide characters to multibyte characters. Open in binary (untranslated) mode; translations involving carriage-return and linefeed characters are suppressed. (二进制情况下回车和换行的转换是不存在的). 再引用一篇:/question/27868102.html?fr=qrl3 软硬回车 硬回车就是普通我们按回车产生的,它在换行的同时也起着段落分隔的作用。 软回车是用 Shift + Enter 产生的,它换行,但是并不换段,即前后两段文字在 Word 中属于同一“段”。在应用格式时你会体会到这一点。 切换: 编辑替换,点击高级,在“查找内容”点入“特殊字符”中的手动换行符,再在“替换为”中点入“特殊字符”中的段落标记,最后点击全部替换。 键盘上只有一种回车键Enter,但却有两种不同性质的换行标记,不能不说是一个奇迹。 我们常用的回车是硬回车,就是在word中敲击Enter键产生的那个弯曲的小箭头,占两个字节。这种回车可以有效地把段落标记出来分清楚。在两个硬回车之间的文字自成一个段落,可以对它单独设置段落标记而不用担心其他段落受到影响。这也是我们习惯用硬回车的原因:排版方便。 但是硬回车也给我们带来了麻烦。你如果是网页设计者,或者是论坛游侠,一定有这样的经历:当你打算换行时,换出的行却实在不能恭维,行间距太大了!其实这和硬回车的原理是一样的,只不过在word等文本编辑器中没有显示出它的“本来面目”。不过这样的排版的确造成了不小的困难,这时我们就得请出硬回车的兄弟:软回车。 软回车只占一个字节,在word中是一个向下的箭头。如果你从很复杂的网页中向word中复制过文字的话,对它一定不会陌生。但是想在word中直接输入软回车可不是那么容易的。因为软回车不是真正的段落标记,它只是另起了一行,不是分段。所以它不是很利于文字排版,因为它无法作为单独的一段被赋予特殊的格式。但是尽管如此,它在网页设计中还是具有举足轻重的地位的。 软回车能使前后两行的行间距大幅度缩小,因为它不是段落标记,要和法定的段落标记硬回车区别出来。硬回车的html代码是.,段落的内容就夹在里面,而软回车的代码很精悍:。因此在网页中想用到软回车,只需切换到代码页面,键入软回车的代码即可。 下面我讲一下不同编辑器文字互相拷贝时回车的转化情况。 地球人都知道的,网页的文字如果复制到word中,则硬回车变为弯曲的箭头,软回车变为向下的箭头。结果造成习惯用word编辑文本的朋友很不习惯很不舒服的情况。 word中的文本复制到网页中也是同样的道理。可以说word和网页比较兼容的,要不怎么会有“保存为web页”这种选项呢? 记事本也是大家摸的比较多的编辑器。但是近年来随着社会发展外加记事本的种种弊端,许多人都将其打入冷宫。对此我只能表示遗憾,因为记事本本身的功能不丰富就是别的编辑器所取代不了的优点。大家再次将网页的文字复制时,不妨粘贴到记事本里试试。哈哈,不管网页设计者用的是什么回车,现在都变成一种回车了!怎么,你不信?那就看看吧:软回车变成了普通的回车,硬回车变成了两个普通的回车。你再从记事本里复制文字到word,记事本里的回车无一例外全都变成了硬回车!你再再从记事本里复制文字到网页编辑器,所有回车就都变成软回车了!n是换行,英文是linefeed,ASCII码是0xA。 r是回车,英文是carriage return ,ASCII码是0xD。-回车的传说-兼谈nr区别(转载)IT文摘2010-08-31 11:40:24阅读86评论0 字号:中订阅如果你有在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的研究人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。( 1968年盖茨在湖滨中学玩的就是这种机器,他们通过这种终端编写BASIC程序。因为 ASR 33只使用大写字母,所以BASIC程序以大写字母为主)后来,计算机的史前时代结束了,小型机诞生了,现代文明的键盘也发明了,但回车和换行的概念仍被保留下来。一些计算机设计者认为在每行结尾加两个字符太浪费也没有必要了,加一个就可以。于是就出现了分歧。Unix系统里使用表示换行,每行结尾只有一个换行符n,MSDOS和Windows系统里面每行结尾是()即rn,Apple的Mac系统里每行结尾是()即r。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,某些文本编辑器可能在每行的结尾会多出一个M符号。本人觉得用两个字符表示换行实在有些画蛇添足,但是在网络的世界里这一现象却大量存在,不少网络协议规定报文必须使用CR-LF换行模式。你怎么看呢?前不久在CU的论坛对这一问题进行了讨论:/thread-1067432-1-1.html这个和编程有关系吗?有的,但是在标准C里通常情况下是体会不到的,标准C的流提供系统无关抽象层。可以在windows系统中进行一下实验:程序一:-#include int main(void)int i;FILE *fp;if(fp=fopen(test.txt,w) = NULL) fprintf(stderr,open file errorn);return 1;for(i=0;i100;i+)fprintf(fp,testn);fclose(fp);return 0;程序二:-#include int main(void)int i;FILE *fp;if(fp=fopen(test.bin,wb) = NULL) fprintf(stderr,open file errorn);return 1;for(i=0;i100;i+)fprintf(fp,testn);fclose(fp);return 0;-程序一输出文件大小是600字节,程序二输出文件大小是500字节,用记事本打开程序一的输出没有什么问题,每行一个test,打开程序二的输出发现所有的test连成一行,test之间是一个黑色方框符号分隔。用UltraEdit-32以16进制编辑模式打开test.bin可以查看到黑色方框符号就是0A也就是n,打开test.txt则会发现换行是rn,这就是两个文件大小相差100字节的原因。Unix类系统用户打开windows中的文件就会遇到这种苦恼。为什么会有这种区别呢?毕竟是源自Unix系统,C语言中使用n表示换行,而在实际的文件中换行符号需要同操作系统一致,所以当我们在C中使用fopen打开一个文本文件时流实现了实际换行符与C中n之间

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论