换行和回车(草稿)

本篇主要介绍换行和回车,以及在C语言中的应用。

1. 换行和回车的历史

2. 在各个操作系统中的表示

3. 按回车会得到什么

getchar值获得’\n’;getch()只获得’\r’.

“\r\n” = Enter
“\r” = Enter
“\n” = Enter

(Depending on your OS)

1

编程中,以防程序运行一闪即失,总是要在最后来一个“getch();”
 getch()和getche()需要”conio.h”
附:
getch 从键盘无回显地读一字符
调用格式 #include”stdio.h”
int getch(void);
原型在 conio.h
说明 getch从键盘直接读一个字符,不回显到屏幕上。
返回值 getch返回从键盘所读的字符。
可移植性 getch只适用于DOS
getchar 从stdin流中取字符
调用格式 #include”conio.h”
int getchar(void);
原型在 stdio.h
说明 getchar是一个宏,用于返回指定的stdin输入流的下一个字符, 它定义为getc(stdin)。
返回值 调用成功时,getchar返回所读的字符,它已被转换为无符号扩展的整形值。在遇到文件结束或出错时,
返回EOF。
可移植性 getchar适用于UNIX系统,在ANSI C中定义,与Kernighan和Ritchie的定义兼容

实测,getch不回显,getche回显,这两个函数用于从控制台(黑窗口)读取输入的字符,不是标准的C语法,但一般windows,Linux/unix都可以用。按enter键得到的字符是’\r’;
getchar是标准C的函数,得到’\n’
是stdio.h中的库函数,它的作用是从stdin流中读入一个字符,也就是说 ,如果stdin有数据的话不用输入就可以直接读取了。而getch()和getche()是conio.h中的库函数,它的作用是从键盘接收字符。
键盘输入的字符,需要通过按Enter键刷新到标准输入流,这也就是为什么,用getchar必须先按enter键才能读取字符。

2

conio.h不是C标准库中的头文件,在C standard library,ISO C 和POSIX标准中均没有定义。
conio是Console Input/Output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作,比如getch()函数等等。
大部分DOS,Windows 3.x,Phar Lap,DOSX,OS/2 or Win32平台上的C编译器提供此文件,UNIX 和Linux平台的c编译器通常不包含此头文件。
如果需要使用此头文件,可以从互联网下载。

3

不同计算机上c语言统一规定为:
文本文件的行结束符一律变成一个符号LF,也就是换行符,也就是new line符, 也就是’\n’.

4.

  • c语言的’\n’就表示原来的’\r\n’功能。
  • 键盘上的enter对应’\r’;
  • enter键有很多特殊功能,如果使用缓冲区,按enter键会将’\n’写入缓冲区,注意,不是原来的键值’\r’.
  • 二进制文件“是什么就是什么”文本文件“一切为了直接能读”,因此会做一些转换。
    例如,
  • 例如

5.

文本文件的行结束符,传统上
PC机 用 CRLF
苹果机用CR
unix 用 LF
CR – 回车符,c语言’\r’
LF – 换行符, c语言’\n’
不同计算机上c语言统一规定为:
文本文件的行结束符一律变成一个符号LF,也就是换行符,也就是new line符, 也就是’\n’.
“回车和换行符转换成一个换行符”– 对PC机而言,文本文件行结束符,CRLF读入后,丢掉CR,留 LF.
例如fgets() 读入一行,行尾只有LF,没有CR.
在解析文本或其他格式的文件内容时,常常要碰到判定回车换行的地方,这个时候就要注意既要判定”\r\n”又要判定”\n”。写程序时可能得到一行,将其进行trim掉’\r’,这样能得到你所需要的string了。

‘\n’ 10 换行(newline)
‘\r’ 13 回车(return)

6.

  • 二进制读写用fread, fwrite
  • 二进制/文本打开方式基本没有区别,
    Windows平台下
    如果以“文本”方式打开文件,当读取文件的时候,系统会将所有的”/r/n”转换成”/n”;当写入文件的时候,系统会将”/n”转换成”/r/n”写入。
    如果以”二进制”方式打开文件,则读/写都不会进行这样的转换。

在Unix/Linux平台下
“文本”与“二进制”模式没有区别。

数据有字符型和非字符型(数)两种。按文本方式写文件指的是将数据转换为对应的字符型数据之后再写入文件。对于字符型数据,由于其本身就是ASCII码字符,一般不必转换,直接写入文件。但是,由于不同的系统对于换行符(’/n’)有不同的处理(转换)方式,在有的系统(如Windows)下也会对 ‘/n’ 作适当的转换。

  • fscanf和fprintf都把要处理的内容理解成ASCII码。例如,运行代码fprintf(fp,”%d”,9);用winhex打开查看可知其内存值为0x39即数字9的ASCII码。不论fp是以文本方式打开还是以二进制方式打开都一样。
    再如,运行代码fscanf(fp,”%d”,&num),会把内存中的二进制按每8个二进制位为一组理解为ASCII码。

7

windows平台下,C语言写换行到文件,会写’\r\n’到文件,因此在;C语言读文件,如果到’\r\n’会忽略掉’\r’只返回’\n’表示遇到了换行。因此在C语言看来,’\n’就表示换行。
二进制方式打开和文本方式打开唯一的区别也就在对换行符的处理上,以二进制方式打开写什么就是什么,读什么就是什么;以文本方式打开,写’\n’相当于写’\r\n’;独到’\r\n’相当于读’\n’。

8

二进制读写是将内存里面的数据直接读写入文本中,而文本呢,则是将数据先转换成了字符串,再写入到文本中。
二进制读写就用fwrite和fread,想读多少自己就读多少字节,完全按照程序员的意愿;文本读写,可用fscanf和fprintf,这两个函数会把拿到的二进制流每8个二进制位看出一个ASCII码,并进行处理 。

6 参考资料

1.cnblog 回车符和换行符区别:
http://www.cnblogs.com/yunf/archive/2011/04/20/2021830.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值