转义字符必须以“\”开头,常用的转义字符见下表。
转义字符
功能或输出结果
\f
换页,将当前位置移到下页的开头
\v
垂直制表符
\a
响铃
\n
换行,将当前位置移到下一行的开头
\r
回车,将当前位置移到本行开头
\t
水平制表符,将当前位置移到下一个tab位置
\b
退格,将当前位置后退一个字符
\'
输出一个单撇号(')
\"
输出一个双撇号(")
\?
输出一个问号(?)
\\
输出一个反斜线(\)
\ddd
1~3位八进制数所代表的字符,d的值可以是0~7的任何数字
\xhh
1~2位十六进制数所代表的字符,h的值可以是0~f的任何数字
一、\f和\v和\a
\f(换页)和\v(垂直制表符)对屏幕没有任何影响,只会影响打印机执行响应操作,故此处不再具体介绍。
\a的响铃功能是让系统自带的蜂鸣器发出“叮”的一声,因目前计算机已经基本没有安装蜂鸣器,无法测试,故此处也不再具体介绍。
二、\n
\n实现输出时换行的功能。可以参考以下例句具体理解。
printf("hello");printf("world"); //显示一行,等价于printf("helloworld");
printf("hello\nworld"); //显示两行,第一行“hello”,第二行“world”
printf("\nhelloworld"); //显示两行,第一行空白行,第二行“helloworld”
printf("helloworld\n"); //显示两行,第一行“helloworld”,第二行空白行
三、\r
\r实现输出时光标从当前位置移到本行的开头。与\n的区别是\r不换行。可以参考以下例句具体理解。
printf("hello\rworld!"); //hello被覆盖,显示“world!”
printf("hello\rabc"); //hel被覆盖,显示“abclo”
printf("hello\rabc");printf("1234"); //hello被覆盖,显示“abc1234”
四、\t
\t实现输出时光标从当前位置移动到下一个tab位置即下一个制表位。在C语言中默认情况下制表位表示8个字符宽度的位置。因此,\t表示将光标移动到第8、16、24、32等字符位置后进行输出。可以参考以下例句具体理解。
printf("hello\tworld"); //显示“hello+3个空格+world”
printf("abcd\tworld"); //显示“abcd+4个空格+world”
printf("helloworld\tabcd"); //显示“helloworld+6个空格+abcd”
printf("\thello\tworld"); //显示“8个空格+hello+3个空格+world”
五、\b
\b实现输出时光标从当前位置移动到前一个字符位置,因此使用\b后继续输出时,可以造成删除前一个字符的假象。可以参考以下例句具体理解。
printf("hello\bworld"); //“hello”→“hell”→“hellworld”
printf("helloworld\b"); //光标从b字符后移到b字符,显示“helloworld”
printf("helloworld\babc"); //“hellworld”→“hellworl”→“hellworlabc”
printf("xyz\b\b123"); //“xyz”→“xy”→“x”→“x123”
printf("xy\bz\b123"); //“xy”→“x”→“xz”→“x”→“x123”
六、\'和\"和\?和\\
如果需要显示“c:\news”这样的字符串,当使用printf("c:\news");进行输出时,将产生歧义,因为系统不知道到底是要输出“c:\news”这个字符串,还是先输出“c:”,然后换行再输出“ews”。为了避免产生歧义这样的情况发生。C语言将“'”、“"”、“?”、“\”这四个字符的输出定义为转义字符的输出,即每次输出这几个字符时,前面还需要添加“\”。可以参考以下例句具体理解。
printf("c:\\news"); //显示“c:\news”
printf("转义字符\'\\n\'表示换行"); //显示“转义字符'\n'表示换行”
七、\ddd和\xhh
\ddd表示输出1~3位八进制数对应的ASCII码字符。\xhh表示输出1~2位十六进制数对应的ASCII码字符。可以参考以下例句具体理解。同时为了方便,以下用“□”表示空格。
printf("\101 \141 \x41 \x61"); //显示“A□a□A□a”
上例中“\101”与“\x41”为八进制下和十六进制下“A”对应的ASCII。“\141”与“\x61”为八进制下和十六进制下“a”对应的ASCII(具体转换可查ASCII码表或者学习进制转换规则)。
printf("\408"); //显示“□8”
上例中“\408”不是一个转义字符,因为8不是八进制数字,因此“\408”应该是转义字符“\40”和普通字符“8”。而“\40”是空格的八进制ASCII码,所以最后显示“□8”。
printf("\1011 \5011"); //显示“A1□A1”
上例中“\1011”不是一个转义字符,因为转义字符只能为1~3位数字,因此“\1011”应该是“\101”和普通字符“1”。而“\101”是A的八进制ASCII码,所以“\1011”最后显示“A1”。
同理,“\5011”不是一个转义字符,应该是转义字符“\501”和普通字符“1”。但是如果将“\501”转换为二进制为“101 000 001”,而ASCII码只有8位,因此这里要将最左边的“1”视为溢出。故“\501”对应的转义字符也是“\101”。所以“\5011”最后也是显示“A1”。
【来源:国外高防服务器 http://www.558idc.com/stgf.html 欢迎留下您的宝贵建议】