入门第七天(昨天就要发出来的,结果退出来的时候系统没给我保存....目前写过的最长的一篇文章了)
由例子引出转义字符,如图:
可以看到将n前加上\后不但没有打印出\n,反而空了一行。
像\n这样的字符就叫转义字符。(当然也不是什么字符前加\都可以用作转义字符~
先来浅浅看一下转义字符常用表,再来一个个讲解一下。
图片来源于@code-流苏【C语言入门——常用转义字符 - CSDN App】http://t.csdnimg.cn/uDOj7
(ps.解释顺序和图中不大一样噢,而且会更详细更全。)
(写在前面:其实这么学下来,我觉得转义字符就是钻牛角尖时发明出来的,比如打印字符,偏偏打印单引号和双引号(・∀・)......)
(1)\?:书写连续多个问号时使用,防止他们被解析成三字母词。早期在c语言编译器中有三字母词(现在基本上没有了),比如有些早期编译器会把??)编译为],把??(编译为[
所以在如下例子中:
printf("%s\n","(are you ok??)")
有的编译器可能会打印为(are you ok]
所以这个时候可以利用转义字符来处理。
改为这样:printf("%s\n","(are you ok\?\?)")就不会被识别为三字母词,也就再也不会出问题~
(2)\':用于表示字符常量'
当我要打印一个字符常量时,一般会使用如下格式:printf("%c\n",'?')(?代表一个字符,需要用单引号'引起来。)
但我要打印一个单引号时,既不能直接printf("%c\n",'''),系统会因为直接把前两个单引号看作一对而单独出第三个单引号,从而无法编译,就会报错,如图。
面对此种情况,就需要使用转义字符\'将中间的单引号单独隔开,like this~
这样程序就会把第二个单引号看做一个单独的单引号,就不会出问题了。
(3)\":用于表示一个字符串内部的双引号,与单引号的转义字符同理~
(4)\\:用于表示一个反斜杠,防止它被解释为一个转义序列符。其实感觉也和单引号与双引号转义字符的来源差不多。。
比如我想打印如下代码:abcd\0ef,而且在这里我不希望\0被当做转义字符,而是作为内容的一部分来打印出来。
但我不能直接这样:printf("abcd\0ef")
否则\0就会直接被程序认定为转义字符,从而造成如下情况:
程序就会直接将\0视为转义字符从而终止打印。
如果我们想要让他完整的打印出所有内容,就需要用到\\这一转义字符,\\就是让程序知道\就是普通的斜杠,而非其他转义字符中的斜杠。
所以我们可以这样来得到正确答案:
在\0前多加一个\即可~
再比如当我想打印一个路径:c:\test\test.c
也不能直接printf,因为\t也是一种转义字符,所以需要在\t前再加一个\,也就是printf("c:\\test\\test.c")即可。
这就是转义字符\\的运用。
(5)\a:警告字符,蜂鸣
。。。不一定能演示出来噢,当打印一个\a时就会触发电脑上的蜂鸣,也就是警告音。仅此而已(手机上的C compiler编译器试了一下,可以发出蜂鸣噢~)
(6)\b:退格符,将光标向左移动一个位置,或者在需要时删除光标前的字符。(说实话感觉倒是没怎么用过。。)
(7)\f:进纸符,也就是换页得意思,将光标当前位置移到下一页的开头。现在也不大常用了。
(8)\n:换行,就是把两段文字分成两行,如图。这个倒挺常用。
(9)\r :回车,实际上就是敲键盘上回车键所对应的代码....我也想不出来这有什么能讲的...
(10)\t:水平制表符,对应键盘上的Tab键,按一下回往后跳出一大段,这就是他的作用。
(11)\v:垂直制表符......让\v后面的字符从下一行开始输出,且开始的列数为\v前一个字符所在列后面一列。
(12)\ddd:ddd表示1~3个八进制的数字。如:\130,打印出来结果是X,如图:
八进制的130换成十进制为88,而88在ASCII编码库中代表的是X
(13)\xdd:dd表示2个十六进制数字。如:\x30,打印出来是0,如图:
这里是从网上找到一个ASCII表(部分)
注意一下,只有转化后的十进制在0-127之间才有效~
今天的学习内容就到这啦~