精华内容
下载资源
问答
  • 2016-08-12 15:54辛国海 客户经理C语言中回车,换行,空字符与空格:fgets和gets在读取换行符的区别摘要:C语言中,我们常常从终端输入,并且输出到终端,键盘上的回车,输入到缓冲区以后,变成了什么字符?...

    2016-08-12 15:54辛国海 客户经理

    C语言中回车,换行,空字符与空格:fgets和gets在读取换行符的区别

    摘要:C语言中,我们常常从终端输入,并且输出到终端,键盘上的回车,输入到缓冲区以后,变成了什么字符?是‘\0’还是‘\n’?回车与换行有什么区别?本文主要为你讲解C语言中的换行、回车等控制字符,帮助区别它们的实质。

    1.空格

    它的ASCII码为0x20,而不是0x00。其中,gets可以读入空格字符。

    2.回车(\r)

    这里有一个很重要的区分点:回车符号和回车键。

    回车(‘\r’)效果是输出回到本行行首,结果可能会将这一行之前的输出覆盖掉。例如执行:

    puts("hello world!\rxxx");

    在终端输出的是:

    xxxlo world!

    如果将上面的字符串写入文件中,例如执行:

    char *s = "hello world!\rxxx";

    FILE *str = fopen("t.txt","r");

    fwrite(s, 16, 1, str);

    用文本编辑器打开t.txt。显示的效果将由打开的编辑器所决定。

    vi的效果为

    windows记事本效果为

    可以看到,vi将\t用^M代替,而记事本就没有显示该字符。

    3.回车键

    关于“回车键”的来历,还得从机械英文打字机说起。在机械英文打字机上,有一个部件叫“字车”,每打一个单词,“字车”就前进一格。当打满一行字符后,打字者就得推动“字车”到起始位置,这时打字机会有两个动作响应:一是“字车”被归位,二是滚筒上卷一行,以便开始输入下一行,这个推动“字车”的动作叫“回车”。后来,在电动英文打字机上,人们增加了一个直接起“回车”作用的键。这个新增的键就被称为“回车键”。

    回车的ASCII代码

    16进制是“0x0d”

    10进制是“13”

    在某些语言中可以用"\r"表示。

    不同的操作系统对回车的处理是不同的:

    在Unix/Linux系统中,换行用"\n"一个字符表示,

    而在Windows系统中,则用"\n\r"两个字符表示。

    4.换行(\n)10

    如果要实现换行的效果,在终端我们只需要使用'\n'即可;如果要想在win系统下的文本中实现换行的效果,需要使用‘\n\r’两个控制字符

    5.C语言对于字符串的处理

    首先,回车键按下以后,键盘缓冲区中存放的是字符\n,如果我们用getchar,那么我们读入的是字符“\n”;如果我们使用gets进行读取,那么“\n”将被作为表示的结束的控制字符读取。然后,gets会自动把这个\n转换成'\0'存储在字符串中。

    另外,如果从终端读取一个字符串,gets会把最后的换行符\n换成\0,而fgets从stdin读入的时候,不会对\n进行处理。...

    展开全文
  • 【转】C语言换行符与回车符的区别 2012-02-21 11:19 转载自 guorendong 最终编辑 it_chinese 能不能说“换行符就是输入完一行内容后,光标转到下一行的起始位置”,而“回车符就是输入完一行后...
    【转】C语言中换行符与回车符的区别
    2012-02-21 11:19
    转载自 guorendong
    最终编辑 it_chinese

    能不能说“换行符就是输入完一行内容后,光标转到下一行的起始位置”,而“回车符就是输入完一行后光标转到该行的起始位置,其并不

    换行”?如果是,那我们平时在键盘上用的 Enter 和 Tab 又属于什么符呢???

    你说的没错,换行(\n)就是光标下移一行却不会移到这一行的开头,回车(\r)就是回到当前行的开头却不向下移一行.Enter键按下后会执行\n\

    r这样就是我们看到的一般意义的回车了,所以你用16进制文件查看方式看一个文本,就会在行尾发现"\n\r"Tab是制表符,就是"\t",作用是预留8个

    字符的显示宽度,用于对齐。

    在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打

    完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。于是,研制人

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

    “换行”,告诉打字机把纸向下移一行。这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。后来,计算机发明了,

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

    分歧。

    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

    [ 游客 发表于 2008-03-27 18:55 ]

    回车键,即键盘上的ENTER键,是一个比较有用的键,在文字编辑时,回车键的作用是换行,在输入网址时回车键的作用是“转到”,在执行DOS命令时,回车键的作用是执行…… 在标准键盘上,回车键一共有2个,一个在主键盘区的右边,Shift键的上面,一个在小键盘的右下角,加号键的下面。 回车键的历史 关于“回车键”的来历,还得从机械的英文打字机说起。在打字机上,有一个部件叫“字车”,每输入一个单词,“字车”就前进一格。当输满一行后,使用者就要推动“字车”到起始位置,这时打字机会有两个动作:“字车”归位、滚筒上卷一行(相当于“字车”下移一行),以便开始输入下一行,这中推动“字车”的动作叫“回车”。后来,在电动的打字机上,人们增加了一个直接起“回车”作用的键。他被称为“回车键”。   在现今的电脑键盘上,“回车键”上曾使用过“CR”、“RETURN”的字样,后来才统一确定为“Enter”。 回车的ASCII代码 16进制是“0x0d” 10进制是“13” 在某些语言中可以用‘\r’表示。

    [ 游客 发表于 2008-03-27 18:59 ]

    如果用过机械打字机,就知道回车和换行的区别了。。。 换行就是把滚筒卷一格,不改变水平位置。 回车就是把水平位置复位,不卷动滚筒。 但是我们平时按得Enter到底是回车还是换行,不太清楚?? 看到一种说法:windows下enter是 \n\r,unix下是\n,mac下是\r 在MS的系统中纯文本格式按一个回车键是输入了两个字符,一个回车一个换行。在LINUX系统中则只是一个回车。 //以上内容参考了http://topic.csdn.net/t/20040617/23/3101951.html#和http://topic.csdn.net/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 a[10]; char b[10]; 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 return–linefeed combinations are translated into single linefeeds on input, and linefeed characters are translated to carriage return–linefeed 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. (二进制情况下回车和换行的转换是不存在的). 再引用一篇:http://zhidao.baidu.com/question/27868102.html?fr=qrl3 软硬回车 } 硬回车就是普通我们按回车产生的,它在换行的同时也起着段落分隔的作用。 软回车是用 Shift + Enter 产生的,它换行,但是并不换段,即前后两段文字在 Word 中属于同一“段”。在应用格式时你会体会到这一点。 切换: 编辑——替换,点击高级,在“查找内容”点入“特殊字符”中的手动换行符,再在“替换为”中点入“特殊字符”中的段落标记,最后点击全部替换。 键盘上只有一种回车键Enter,但却有两种不同性质的换行标记,不能不说是一个奇迹。 我们常用的回车是硬回车,就是在word中敲击Enter键产生的那个弯曲的小箭头,占两个字节。这种回车可以有效地把段落标记出来分清楚。在两个硬回车之间的文字自成一个段落,可以对它单独设置段落标记而不用担心其他段落受到影响。这也是我们习惯用硬回车的原因:排版方便。 但是硬回车也给我们带来了麻烦。你如果是网页设计者,或者是论坛游侠,一定有这样的经历:当你打算换行时,换出的行却实在不能恭维,行间距太大了!其实这和硬回车的原理是一样的,只不过在word等文本编辑器中没有显示出它的“本来面目”。不过这样的排版的确造成了不小的困难,这时我们就得请出硬回车的兄弟:软回车。 软回车只占一个字节,在word中是一个向下的箭头。如果你从很复杂的网页中向word中复制过文字的话,对它一定不会陌生。但是想在word中直接输入软回车可不是那么容易的。因为软回车不是真正的段落标记,它只是另起了一行,不是分段。所以它不是很利于文字排版,因为它无法作为单独的一段被赋予特殊的格式。但是尽管如此,它在网页设计中还是具有举足轻重的地位的。 软回车能使前后两行的行间距大幅度缩小,因为它不是段落标记,要和法定的段落标记——硬回车区别出来。硬回车的html代码是<p>..</p>,段落的内容就夹在里面,而软回车的代码很精悍:<br>。因此在网页中想用到软回车,只需切换到代码页面,键入软回车的代码即可。 下面我讲一下不同编辑器文字互相拷贝时回车的转化情况。 地球人都知道的,网页的文字如果复制到word中,则硬回车变为弯曲的箭头,软回车变为向下的箭头。结果造成习惯用word编辑文本的朋友很不习惯很不舒服的情况。 word中的文本复制到网页中也是同样的道理。可以说word和网页比较兼容的,要不怎么会有“保存为web页”这种选项呢? 记事本也是大家摸的比较多的编辑器。但是近年来随着社会发展外加记事本的种种弊端,许多人都将其打入冷宫。对此我只能表示遗憾,因为记事本本身的功能不丰富就是别的编辑器所取代不了的优点。大家再次将网页的文字复制时,不妨粘贴到记事本里试试。哈哈,不管网页设计者用的是什么回车,现在都变成一种回车了!怎么,你不信?那就看看吧:软回车变成了普通的回车,硬回车变成了两个普通的回车。你再从记事本里复制文字到word,记事本里的回车无一例外全都变成了硬回车!你再再从记事本里复制文字到网页编辑器,所有回车就都变成软回车了!!

    [ 游客 发表于 2008-03-27 19:00 ]

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

    ---------------------------------------------------------------------------------------------------------------------------

    回车的传说---兼谈\n\r区别(转载)

    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系统里使用<line feed>表示换行,每行结尾只有一个换行符\n,MSDOS和Windows系统里面每行结尾是<回车><换行>(<carriage return><line feed>)即\r\n,Apple的Mac系统里每行结尾是<回车>(<carriage return>)即\r。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,某些文本编辑器可能在每行的结尾会多出一个^M符号。 本人觉得用两个字符表示换行实在有些画蛇添足,但是在网络的世界里这一现象却大量存在,不少网络协议规定报文必须使用CR-LF换行模式。 你怎么看呢?前不久在CU的论坛对这一问题进行了讨论:http://bbs2.chinaunix.net/thread-1067432-1-1.html 这个和编程有关系吗? 有的,但是在标准C里通常情况下是体会不到的,标准C的流提供系统无关抽象层。 可以在windows系统中进行一下实验: 程序一: ---------------------------------------------- #include <stdio.h> int main(void) { int i; FILE *fp; if((fp=fopen("test.txt","w")) == NULL) { fprintf(stderr,"open file error\n"); return 1; } for(i=0;i<100;i++) fprintf(fp,"test\n"); fclose(fp); return 0; } 程序二: ------------------------------------------------------------------------------------- #include <stdio.h> int main(void) { int i; FILE *fp; if((fp=fopen("test.bin","wb")) == NULL) { fprintf(stderr,"open file error\n"); return 1; } for(i=0;i<100;i++) fprintf(fp,"test\n"); fclose(fp); return 0; } -------------------------------------------------------------------------------------- 程序一输出文件大小是600字节,程序二输出文件大小是500字节,用记事本打开程序一的输出没有什么问题,每行一个test,打开程序二的输出发现所有的test连成一行,test之间是一个黑色方框符号分隔。用UltraEdit-32以16进制编辑模式打开test.bin可以查看到黑色方框符号就是0A也就是\n,打开test.txt则会发现换行是\r\n,这就是两个文件大小相差100字节的原因。Unix类系统用户打开windows中的文件就会遇到这种苦恼。 为什么会有这种区别呢? 毕竟是源自Unix系统,C语言中使用\n表示换行,而在实际的文件中换行符号需要同操作系统一致,所以当我们在C中使用fopen打开一个文本文件时流实现了实际换行符与C中\n之间的转换。在windows中当我们用fopen打开文本文件,然后从中读到\r\n时流会转换为\n,而当我们往文件中写入\n时流会转换为\r\n。程序一是打开文本文件,程序二打开的是二进制文件,因为流只对文本文件进行换行表示的转换,以二进制模式打开流不会做任何处理。所以当你以二进制模式打开一个文本文件时将产生错乱,你必须亲自将\r\n解释为\n,同样的问题也会出现在以文本模式打开二进制文件的情况.这也解释了为什么Unix类系统中的文件不区分文本文件和二进制文件的原因。 当我们使用标准输入输出函数时有这种情况吗? 再回到我们熟悉的标准输入输出stdin,stdout C的控制台程序在加载进内存成为进程运行前C运行时库自动打开三个设备并关联到三个流:标准输入流stdin,标准输出流stdout,标准出错流stderr 通常在通用计算机中,没有重定向前这三个流对应的设备是:键盘,显示器,显示器。这三个都是字符设备,所以是以文本文件的模式打开的,在windows下当我们在键盘上敲入回车键时产生字符\r\n,但是在OS内核把键盘驱动中读到的字符发送给流的缓冲区时流会将之转换为\n,当我们向控制台输出\n时流将之转换为\r\n再传递至内核,当我们绕过标准输入输出直接调用windows中coredll.lib进行控制台输入输出时就必须面对这一现实,程序员负责实现这一转换。
    不同计算机上c语言统一规定为: 文本文件的行结束符一律变成一个符号LF,也就是换行符,也就是new line符, 也就是'\n'. “回车和换行符转换成一个换行符”-- 对PC机而言,文本文件行结束符,CRLF读入后,丢掉CR,留 LF. 例如fgets() 读入一行,行尾只有LF,没有CR.
    展开全文
  • C语言换行符与回车符的区别

    万次阅读 2012-03-19 12:56:59
     能不能说“换行符就是输入完一行内容后,光标转到下一行的起始位置”,而“回车符就是输入完一行后光标转到该行的起始位置,其并不换行”?如果是,那我们平时在键盘上用的 Enter 和 Tab 又属于什么符呢??? ...

     http://apps.hi.baidu.com/share/detail/51846766

           能不能说“换行符就是输入完一行内容后,光标转到下一行的起始位置”,而“回车符就是输入完一行后光标转到该行的起始位置,其并不换行”?如果是,那我们平时在键盘上用的 Enter 和 Tab 又属于什么符呢???

    你说的没错,换行(\n)就是光标下移一行却不会移到这一行的开头,回车(\r)就是回到当前行的开头却不向下移一行.Enter键按下后会执行\n\r这样就是我们看到的一般意义的回车了,所以你用16进制文件查看方式看一个文本,就会在行尾发现"\n\r"Tab是制表符,就是"\t",作用是预留8个字符的显示宽度,用于对齐。

    在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。

    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

    [ 游客 发表于 2008-03-27 18:55 ]

    回车键,即键盘上的ENTER键,是一个比较有用的键,在文字编辑时,回车键的作用是换行,在输入网址时回车键的作用是“转到”,在执行DOS命令时,回车键的作用是执行…… 在标准键盘上,回车键一共有2个,一个在主键盘区的右边,Shift键的上面,一个在小键盘的右下角,加号键的下面。 回车键的历史 关于“回车键”的来历,还得从机械的英文打字机说起。在打字机上,有一个部件叫“字车”,每输入一个单词,“字车”就前进一格。当输满一行后,使用者就要推动“字车”到起始位置,这时打字机会有两个动作:“字车”归位、滚筒上卷一行(相当于“字车”下移一行),以便开始输入下一行,这中推动“字车”的动作叫“回车”。后来,在电动的打字机上,人们增加了一个直接起“回车”作用的键。他被称为“回车键”。   在现今的电脑键盘上,“回车键”上曾使用过“CR”、“RETURN”的字样,后来才统一确定为“Enter”。 回车的ASCII代码 16进制是“0x0d” 10进制是“13” 在某些语言中可以用‘\r’表示。

    [ 游客 发表于 2008-03-27 18:59 ]

    如果用过机械打字机,就知道回车和换行的区别了。。。 换行就是把滚筒卷一格,不改变水平位置。 回车就是把水平位置复位,不卷动滚筒。 但是我们平时按得Enter到底是回车还是换行,不太清楚?? 看到一种说法:windows下enter是 \n\r,unix下是\n,mac下是\r 在MS的系统中纯文本格式按一个回车键是输入了两个字符,一个回车一个换行。在LINUX系统中则只是一个回车。 //以上内容参考了http://topic.csdn.net/t/20040617/23/3101951.html#和http://topic.csdn.net/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 a[10]; char b[10]; 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 return–linefeed combinations are translated into single linefeeds on input, and linefeed characters are translated to carriage return–linefeed 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. (二进制情况下回车和换行的转换是不存在的). 再引用一篇:http://zhidao.baidu.com/question/27868102.html?fr=qrl3 软硬回车 } 硬回车就是普通我们按回车产生的,它在换行的同时也起着段落分隔的作用。 软回车是用 Shift + Enter 产生的,它换行,但是并不换段,即前后两段文字在 Word 中属于同一“段”。在应用格式时你会体会到这一点。 切换: 编辑——替换,点击高级,在“查找内容”点入“特殊字符”中的手动换行符,再在“替换为”中点入“特殊字符”中的段落标记,最后点击全部替换。 键盘上只有一种回车键Enter,但却有两种不同性质的换行标记,不能不说是一个奇迹。 我们常用的回车是硬回车,就是在word中敲击Enter键产生的那个弯曲的小箭头,占两个字节。这种回车可以有效地把段落标记出来分清楚。在两个硬回车之间的文字自成一个段落,可以对它单独设置段落标记而不用担心其他段落受到影响。这也是我们习惯用硬回车的原因:排版方便。 但是硬回车也给我们带来了麻烦。你如果是网页设计者,或者是论坛游侠,一定有这样的经历:当你打算换行时,换出的行却实在不能恭维,行间距太大了!其实这和硬回车的原理是一样的,只不过在word等文本编辑器中没有显示出它的“本来面目”。不过这样的排版的确造成了不小的困难,这时我们就得请出硬回车的兄弟:软回车。 软回车只占一个字节,在word中是一个向下的箭头。如果你从很复杂的网页中向word中复制过文字的话,对它一定不会陌生。但是想在word中直接输入软回车可不是那么容易的。因为软回车不是真正的段落标记,它只是另起了一行,不是分段。所以它不是很利于文字排版,因为它无法作为单独的一段被赋予特殊的格式。但是尽管如此,它在网页设计中还是具有举足轻重的地位的。 软回车能使前后两行的行间距大幅度缩小,因为它不是段落标记,要和法定的段落标记——硬回车区别出来。硬回车的html代码是<p>..</p>,段落的内容就夹在里面,而软回车的代码很精悍:<br>。因此在网页中想用到软回车,只需切换到代码页面,键入软回车的代码即可。 下面我讲一下不同编辑器文字互相拷贝时回车的转化情况。 地球人都知道的,网页的文字如果复制到word中,则硬回车变为弯曲的箭头,软回车变为向下的箭头。结果造成习惯用word编辑文本的朋友很不习惯很不舒服的情况。 word中的文本复制到网页中也是同样的道理。可以说word和网页比较兼容的,要不怎么会有“保存为web页”这种选项呢? 记事本也是大家摸的比较多的编辑器。但是近年来随着社会发展外加记事本的种种弊端,许多人都将其打入冷宫。对此我只能表示遗憾,因为记事本本身的功能不丰富就是别的编辑器所取代不了的优点。大家再次将网页的文字复制时,不妨粘贴到记事本里试试。哈哈,不管网页设计者用的是什么回车,现在都变成一种回车了!怎么,你不信?那就看看吧:软回车变成了普通的回车,硬回车变成了两个普通的回车。你再从记事本里复制文字到word,记事本里的回车无一例外全都变成了硬回车!你再再从记事本里复制文字到网页编辑器,所有回车就都变成软回车了!!

    [ 游客 发表于 2008-03-27 19:00 ]

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

    ---------------------------------------------------------------------------------------------------------------------------

    回车的传说---兼谈\n\r区别(转载)

    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系统里使用<line feed>表示换行,每行结尾只有一个换行符\n,MSDOS和Windows系统里面每行结尾是<回车><换行>(<carriage return><line feed>)即\r\n,Apple的Mac系统里每行结尾是<回车>(<carriage return>)即\r。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,某些文本编辑器可能在每行的结尾会多出一个^M符号。 本人觉得用两个字符表示换行实在有些画蛇添足,但是在网络的世界里这一现象却大量存在,不少网络协议规定报文必须使用CR-LF换行模式。 你怎么看呢?前不久在CU的论坛对这一问题进行了讨论:http://bbs2.chinaunix.net/thread-1067432-1-1.html 这个和编程有关系吗? 有的,但是在标准C里通常情况下是体会不到的,标准C的流提供系统无关抽象层。 可以在windows系统中进行一下实验: 程序一: ---------------------------------------------- #include <stdio.h> int main(void) { int i; FILE *fp; if((fp=fopen("test.txt","w")) == NULL) { fprintf(stderr,"open file error\n"); return 1; } for(i=0;i<100;i++) fprintf(fp,"test\n"); fclose(fp); return 0; } 程序二: ------------------------------------------------------------------------------------- #include <stdio.h> int main(void) { int i; FILE *fp; if((fp=fopen("test.bin","wb")) == NULL) { fprintf(stderr,"open file error\n"); return 1; } for(i=0;i<100;i++) fprintf(fp,"test\n"); fclose(fp); return 0; } -------------------------------------------------------------------------------------- 程序一输出文件大小是600字节,程序二输出文件大小是500字节,用记事本打开程序一的输出没有什么问题,每行一个test,打开程序二的输出发现所有的test连成一行,test之间是一个黑色方框符号分隔。用UltraEdit-32以16进制编辑模式打开test.bin可以查看到黑色方框符号就是0A也就是\n,打开test.txt则会发现换行是\r\n,这就是两个文件大小相差100字节的原因。Unix类系统用户打开windows中的文件就会遇到这种苦恼。 为什么会有这种区别呢? 毕竟是源自Unix系统,C语言中使用\n表示换行,而在实际的文件中换行符号需要同操作系统一致,所以当我们在C中使用fopen打开一个文本文件时流实现了实际换行符与C中\n之间的转换。在windows中当我们用fopen打开文本文件,然后从中读到\r\n时流会转换为\n,而当我们往文件中写入\n时流会转换为\r\n。程序一是打开文本文件,程序二打开的是二进制文件,因为流只对文本文件进行换行表示的转换,以二进制模式打开流不会做任何处理。所以当你以二进制模式打开一个文本文件时将产生错乱,你必须亲自将\r\n解释为\n,同样的问题也会出现在以文本模式打开二进制文件的情况.这也解释了为什么Unix类系统中的文件不区分文本文件和二进制文件的原因。 当我们使用标准输入输出函数时有这种情况吗? 再回到我们熟悉的标准输入输出stdin,stdout C的控制台程序在加载进内存成为进程运行前C运行时库自动打开三个设备并关联到三个流:标准输入流stdin,标准输出流stdout,标准出错流stderr 通常在通用计算机中,没有重定向前这三个流对应的设备是:键盘,显示器,显示器。这三个都是字符设备,所以是以文本文件的模式打开的,在windows下当我们在键盘上敲入回车键时产生字符\r\n,但是在OS内核把键盘驱动中读到的字符发送给流的缓冲区时流会将之转换为\n,当我们向控制台输出\n时流将之转换为\r\n再传递至内核,当我们绕过标准输入输出直接调用windows中coredll.lib进行控制台输入输出时就必须面对这一现实,程序员负责实现这一转换。
    不同计算机上c语言统一规定为: 文本文件的行结束符一律变成一个符号LF,也就是换行符,也就是new line符, 也就是'\n'. “回车和换行符转换成一个换行符”-- 对PC机而言,文本文件行结束符,CRLF读入后,丢掉CR,留 LF. 例如fgets() 读入一行,行尾只有LF,没有CR.
    为了您的安全,请只打开来源可靠的网址

    打开网站    取消

    来自: http://hi.baidu.com/guorendong/blog/item/6cb4044c2fa1ede7d62afc7d.html

     

    展开全文
  • Linux 换行符结束符 文件结束符区别 文件标记 Ascii 含义 ‘’\n’ 10 换行 ‘\0’ 0 c语言中表示字符串结束符 EOT 4 传输结束符 **EOF(End of File)**是一个宏定义,其真实值根据不同平台有差异...

    Linux 换行符 行结束符 文件结束符区别

    文件标记 Ascii 含义
    ‘’\n’ 10 换行
    ‘\0’ 0 c语言中表示字符串结束符
    EOT 4 传输结束符

    EOF(End of File)是一个宏定义,其真实值根据不同平台有差异,通常为-1。表示操作系统无法从数据源获取更多数据的情况,数据源一般为文件或流。

    EOT(End-of-Transmission)传输结束字符,是一个控制字符,表示传输的结束。ascii码为04

    ‘\n’在文本文件中,除了最后一行,其余的每一行行尾都有一个换行符,即’\n’,ascii码为10

    ‘\0’等价于NULL,在c语言中,并不存在真正的字符串类型。c语言中的字符串其实是char*指向的地址到’\0’前的字符,字符串的长度并不包括’\0’。例如:

    char *s = "hello\0world";			//表示字符串 hello \0位字符串结束符      
    printf("%s",s);   						//输出hello
    
    展开全文
  • C语言文件读写操作之换行符处理

    千次阅读 2020-08-04 00:11:52
    getc,fgetc: -1代表结束符,不但能接收键盘输入的内容,也能从文件中读取一个字符; getchar() 等价于 getc(stdin);...t模式写入文件时会将\n的换行符,在写入时加入\r称为\r\n的换行符形式 b模式是按文件原本的\
  • 之前的博客提到了怎样对长度不确定且无法估计的文本文件进行按行读取的问题,这次我发现了一个每一行的末尾换行符处理的问题以及fgets的一个特性,这都是我之前没有注意到的地方。 文章目录1.每行末尾换行符的处理...
  • c语言中scanf函数读取换行符的问题

    千次阅读 2020-12-14 20:41:11
    在我们使用c语言的过程中经常会遇到一个小问题,就是在我们使用scanf这个函数时,尤其和循环体一起使用时例如 while (scanf("%c %c", &a, &b) != EOF) 这种,我们在输入结束后,会按下回车来表示我们输入...
  • 空格、制表符、换行符等统称为空白符(space character),它们只用来占位,并没有实际的内容,也显示不出具体的字符。 制表符分为水平制表符和垂直制表符,它们的 ASCII 编码值分别是 9 和 11。 垂直制表符在现代...
  • c语言中文件结束符占得字节数

    千次阅读 2015-04-04 09:59:52
    文件结束符占字节数
  • #include<stdio.h> #include<ctype.h> main() { long n=0; char ch; while((ch=getchar())!='!')//未遇到结束标志时循环继续 if(isspace(ch)) n++; printf("n=%ld\n",n); }
  • 回车符号和换行符号产生背景  关于“回车”(carriage return)...但是它有一个问题,就是打完一换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。
  • C语言中的空白

    千次阅读 2016-03-08 11:07:29
    空格、制表符、换行符统称为空白符,它们只能占位,没有实际的内容。 制表符也称缩进,就是Tab键,默认占用4个空格的位置,你也可以在编辑器中修改。 对于编译器,有的空白符会被忽略,有的却不能。请看下面几种...
  • #include #define IN 1//标志在一个单词的内部 #define OUT 0//标志在一...//读入的字符是分隔,在一个单词的外部 else if(state==OUT)//如果遇到单词的第一个字符 { state=IN; nw++; } } return nw; }
  • 摘要:C语言中,我们常常从终端输入,并且输出到终端,键盘上的回车,输入到缓冲区以后,变成了什么字符?是‘\0’还是‘\n’?回车与换行有什么区别?本文主要为你讲解C语言中的换行、回车等控制字符,帮助区别它们...
  • if (c == '\r') { //windows下"\r\n"为标志的换行符的情况 getchar(); break; } else if (c == '\n') { //Linux下"\n"为标志的换行符的情况 break; } } if (n != N) { cout ; } ...
  • 例题:下列给定程序中函数fun的功能是:删除字符串s中的所有空白字符(包括Tab字符、回车符及换行符)。输入字符串时用 “#”结束输入。 例如输入的字符串为"sd ads",则输出"sdads"。 注意:不要改动main函数,不能...
  • 统计制表符、空格和换行符的个数

    千次阅读 2021-02-17 14:34:45
    换行符 \n的ASCLL的值为10 空格符" "的ASCLLde值为23 制表符\t一般是tab键(包含4个或者8个空格)ASCLL值为9 要求用Crtl+z结束输入。 为什么是Crtl+z呢? 其实本质结束是EOF这个符号,在window这个系统中Crtl+z就是...
  • c语言占位

    2019-07-19 22:08:34
    C语言占位
  • EOF(End of file)是C/C++里面的宏定义,具体定义式是#define EOF -1,表示的是文件的结束标志,值等于-1,一般用在文件读取的函数里面,比如fscanf fgetc fgets等,一旦读取到文件最后就返回EOF标志并结束函数调用...
  • C语言占位 格式占位

    千次阅读 2020-10-07 08:17:27
    常用占位: %d, %i------代表整数,%f------浮点数,%s------字符串,%c---...C语言中的格式占位: %a,%A 读入一个浮点值(仅C99有效)%c 读入一个字符%d 读入十进制整数%i 读入十进制,八进制,十六进制整数%o ...
  • ‘\n’ 换行符

    2013-05-07 14:02:18
    “回车和换行符转换成一个换行符”-- 对PC机而言,文本文件行结束符,CRLF读入后,丢掉CR,留 LF. 例如fgets() 读入一行,行尾只有LF,没有CR. 换行(\n)就是光标下移一行却不会移到这一行的开头,回车(\r)就是回到...
  • C语言中回车

    千次阅读 2011-04-14 22:19:00
    “从键盘输入4个学生的数据是ASCII码,也就是文本文件,在送到计算机内存时,回车和换行符转换成一个换行符。……”其中的“回车和换行符转换成一个换行符”是什么意思?为什么是两个符号,为什么能转换成一个换行符...
  • 今天写题的时候写了这样一段代码 ...问题其实很简单,当getchar()被注释掉的时候,cin以换行符结束读进一个单词,但换行符是留在缓冲区的,而getline()也是以换行符结束符,当执行到getline的时候它首先读到了...
  • 计算机中换行符与回车符的区别

    千次阅读 2019-10-28 17:06:42
    计算机中换行符与回车符的区别
  • 回车符和换行符区别

    2014-04-17 09:25:42
    回车符号和换行符号产生背景:  关于“回车”(carriage return)和...但是它有一个问题,就是打完一换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失
  • 我们将单词的定义进行化简,认为单词是不包含空格、制表符\t及换行符的字符序列 **。例如:“a+b+c”,认为是1个单词,它由5个字符组成。又如:“xy abc”,为2个单词,6个字符。输入ctrl+z结束(提示:用ch!=EOF或ch...
  • 恭喜,你可能遇到了一个换行符埋下的“坑”! 本 Chat 中,我来聊聊缓冲区中这个“换行符”处理不当会给你埋下怎样的一个坑,以及避免它的一个方法。内容包括: 先从一段处理不当的 C 语言程序代码开始; 缓冲区的...
  • 关于C语言的空格和字符串结束符

    千次阅读 2010-02-23 12:28:00
    空格 和结束符/0是不一样的,但是如果用scanf函数%s的格式输入,遇到空格就会当成结束符

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 60,433
精华内容 24,173
热门标签
关键字:

c语言以换行符结束

c语言 订阅