回车和换行

来源:互联网 发布:android简书app源码 编辑:程序博客网 时间:2024/06/04 21:46

回车和换行

 

对于程序中的回车和换行,一直都没有真正去弄清楚过,这次查了下资料把它理清下

 

1.由来

在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。

于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做回车,告诉打字机把打印头定位在左边界;另一个叫做换行,告诉打字机把纸向下移一行。

 

2.现状

后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。

Unix系统里,每行结尾只有“<换行>”,即“/n”Windows系统里面,每行结尾是“<换行><回车>”,即“/n/r”Mac系统里,每行结尾是“<回车>”。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。

 

3.具体

       <1>回车

’/r’ 130X0D),指回到一行的开头

       printf("aaa/rxx");

         输出的结果将为:xxa,因为输出为aaa后又将打印头移动到了行开始处

 

         <2>换行

         ‘/n’ 100X0A),指开启新的一行

         printf("aaa/nxx")

         将输出:

         aaa

         xx

        

         <3>测试

         在程序中,可以发现使用’/r/n’和单使用’/n’好像并没有什么区别,分别使用下面的代码来测试

FILE *fp=fopen("f:/lf.txt","w");

    char *pStr="hello world/nhow are you doing"; 

    fwrite(pStr,strlen(pStr),1,fp);

    fclose(fp);

 

    fp=fopen("f:/lfcr.txt","w");

    char *pStr2="hello world/n/rhow are you doing"; 

    fwrite(pStr2,strlen(pStr2),1,fp);

    fclose(fp);

这里分别使用换行(CR)以及换行回车(CRLF)来写入文件,然后再将它们读入进来

 

int ReadData(FILE *fp,char *pDest)

{

    fseek(fp,0,SEEK_END);

    int len=ftell(fp);

    rewind(fp);  

    pDest[len]='/0';

    fread(pDest,len,1,fp);

    return len;  

}

char pBufLf[100],pBufLfCr[100];

    FILE *fpLf=fopen("f:/lf.txt","rb");

    FILE *fpLfCr=fopen("f:/lfcr.txt","rb");

    ReadData(fpLf,pBufLf);

    ReadData(fpLfCr,pBufLfCr);

    fclose(fpLf);

    fclose(fpLfCr);

 

读进来后,监视pBufLfpBufLfCr两个变量,可以发现

pBufLf

char *pStr="hello world/nhow are you doing"; 

pBufLf[11]等于13(即为回车符/r),pBufLf[12]等于10(即换行符/n),而我们在写入数据的时候只写入了换行符,说明这个文件中的回车符是系统自己写入的

 

pBufLfCr

char *pStr2="hello world/n/rhow are you doing";

pBufLfCr[11]等于13/r),pBufLfCr[12]等于10/n),pBufLfCr[13]=13(/r)

 

从上面这两处可以看出,当使用换行符的时候,系统会自动在其前面添加回车符(/r

 

 

 

end

 

 .----广告驱除----.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.