Bootstrap

入门c语言DAY7——转义字符

入门第七天(昨天就要发出来的,结果退出来的时候系统没给我保存....目前写过的最长的一篇文章了)

 

由例子引出转义字符,如图:

6e584287955a47809b3c0089d2f2719c.jpg

 可以看到将n前加上\后不但没有打印出\n,反而空了一行。

像\n这样的字符就叫转义字符。(当然也不是什么字符前加\都可以用作转义字符~

先来浅浅看一下转义字符常用表,再来一个个讲解一下。0f4605e2b16242d88f7494d9aca875e6.png

 422f9dcda6b64287b41e7bd4a99c8b14.png

 图片来源于@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",'''),系统会因为直接把前两个单引号看作一对而单独出第三个单引号,从而无法编译,就会报错,如图。02c35a0b73f64fb39c1107cbef8a8ac9.jpg

面对此种情况,就需要使用转义字符\'将中间的单引号单独隔开,like this~

99caad1345ee44fabef0afe7dbb81081.jpg

 这样程序就会把第二个单引号看做一个单独的单引号,就不会出问题了。

 

(3)\":用于表示一个字符串内部的双引号,与单引号的转义字符同理~

 

(4)\\:用于表示一个反斜杠,防止它被解释为一个转义序列符。其实感觉也和单引号与双引号转义字符的来源差不多。。

比如我想打印如下代码:abcd\0ef,而且在这里我不希望\0被当做转义字符,而是作为内容的一部分来打印出来。

但我不能直接这样:printf("abcd\0ef")

否则\0就会直接被程序认定为转义字符,从而造成如下情况:

be97d7143d7846da8d303f55d8bc549e.jpg

 程序就会直接将\0视为转义字符从而终止打印。

如果我们想要让他完整的打印出所有内容,就需要用到\\这一转义字符,\\就是让程序知道\就是普通的斜杠,而非其他转义字符中的斜杠。

所以我们可以这样来得到正确答案:

c12bf4822de74a4aad137c72f16a0951.jpg

 在\0前多加一个\即可~

再比如当我想打印一个路径:c:\test\test.c

也不能直接printf,因为\t也是一种转义字符,所以需要在\t前再加一个\,也就是printf("c:\\test\\test.c")即可。

这就是转义字符\\的运用。

 

(5)\a:警告字符,蜂鸣

。。。不一定能演示出来噢,当打印一个\a时就会触发电脑上的蜂鸣,也就是警告音。仅此而已(手机上的C compiler编译器试了一下,可以发出蜂鸣噢~)

 

(6)\b:退格符,将光标向左移动一个位置,或者在需要时删除光标前的字符。(说实话感觉倒是没怎么用过。。)

(7)\f:进纸符,也就是换页得意思,将光标当前位置移到下一页的开头。现在也不大常用了。

(8)\n:换行,就是把两段文字分成两行,如图。这个倒挺常用。

29a18d17a7f7474c9a9b713960165e46.jpg

 (9)\r :回车,实际上就是敲键盘上回车键所对应的代码....我也想不出来这有什么能讲的...

 (10)\t:水平制表符,对应键盘上的Tab键,按一下回往后跳出一大段,这就是他的作用。

(11)\v:垂直制表符......让\v后面的字符从下一行开始输出,且开始的列数为\v前一个字符所在列后面一列。

(12)\ddd:ddd表示1~3个八进制的数字。如:\130,打印出来结果是X,如图:

2ac42a649ed3489db1a82a87d3427150.jpg

 八进制的130换成十进制为88,而88在ASCII编码库中代表的是X

(13)\xdd:dd表示2个十六进制数字。如:\x30,打印出来是0,如图:

3b1425e7302a4005949d637abb642f26.jpg

 

这里是从网上找到一个ASCII表(部分)

9bb486c5d5ca4cde8745a5a09a826466.jpg

 注意一下,只有转化后的十进制在0-127之间才有效~

 

今天的学习内容就到这啦~

 

 

 

 

 

;