现在的位置: 首页 > 综合 > 正文

C语言转义字符和格式控制符参考

2014年09月05日 ⁄ 综合 ⁄ 共 5465字 ⁄ 字号 评论关闭

(转载自qiqi5521的博客)



转义字符参考:


/a:蜂鸣,响铃 
/b:回退:向后退一格 
/f:换页 
/n:换行,光标到下行行首 
/r:回车,光标到本行行首 
/t:水平制表 
/v:垂直制表 
//:反斜杠 
/':单引号 
/":双引号 
/?:问号 
/ddd:三位八进制 
/xhh:二位十六进制 
/0:空字符(NULL),什么都不做 

注: 
1,/v垂直制表和/f换页符对屏幕没有任何影响,但会影响打印机执行响应操作。 
2,/n其实应该叫回车换行。换行只是换一行,不改变光标的横坐标;回车只是回到行首,不改变光标的纵坐标。 
3,/t 光标向前移动四格或八格,可以在编译器里设置 
4,/' 在字符里(即单引号里)使用。在字符串里(即双引号里)不需要,只要用 ' 即可。 

5,/? 其实不必要。只要用 ? 就可以了(在windows VC6 和tc2 中验证)。  





(中间插入hanchaoman童鞋的关于转义字符博客)

C语言中的转义字符


在字符集中,有一类字符具有这样的特性:当从键盘上输入这个字符时,显示器上就可以显示这个字符,即输入什么就显示什么。这类字符称为可显示字符,如a、b、c、$、+和空格符等都是可显示字符

另一类字符却没有这种特性。它们或者在键盘上找不到对应的一个键(当然可以用特殊方式输入),或者当按键以后不能显示键面上的字符。其实,这类字符是为控制作用而设计的,故称为控制字符。

在C语言中,构成字符常量的控制字符必须用转义字符表示。转义字符是一种以“/”开头的字符。例如退格符用'/b'表示,换行符用'/n'表示。转义字符中的'/'表示它后面的字符已失去它原来的含义,转变成另外的特定含义。反斜杠与其后面的字符一起构成一个特定的字符。

转义字符是C语言中表示字符的一种特殊形式。转义字符以反斜'/'开头,后面跟一个字符或一个八进制或十六进制数表示。转义字符具有特定的含义,不同于字符原有的意义,故称转义字符。

通常使用转义字符表示ASCII码字符集中不可打印的控制字符和特定功能的字符,如用于表示字符常量的单撇号('),用于表示字符串常量的双撇号(")和反斜杠(/)等。

例如,下面例子printf函数的格式串中用到的'/n'就是一个转义字符,其意义是“回车换行”。转义字符主要用来表示那些用一般字符不便于表示的控制代码。

 

常用的转义字符及其含义

转义字符 意义 ASCII码值(十进制)
\a 响铃(BEL) 007
\b 退格(BS) ,将当前位置移到前一列 008
\f 换页(FF),将当前位置移到下页开头 012
\n 换行(LF) ,将当前位置移到下一行开头 010
\r 回车(CR) ,将当前位置移到本行开头 013
\t 水平制表(HT) (跳到下一个TAB位置) 009
\v 垂直制表(VT) 011
\\ 代表一个反斜线字符''\' 092
\' 代表一个单引号(撇号)字符 039
\" 代表一个双引号字符 034
\0 空字符(NULL) 000
\ddd 1到3位八进制数所代表的任意字符 三位八进制
\xhh 1到2位十六进制所代表的任意字符 二位十六进制


从表中可以看出,在C语言中有三种转义字符,它们是:一般转义字符、八进制转义字符和十六进制转义字符。

1. 一般转义字符

这种转义字符,虽然在形式上由两个字符组成,但只代表一个字符。常用的一般转义字符为:

/a  /n  /t  /v  /b  /r  /f  //  /’  /"

细心的读者可能已经发现,转义字符'//'代表的反斜杠"/"、转义字符’/’’代表的字符"'"和转义字符'/"'代表的字符""",其本身就是可显示字符,为什么还要对它转义呢?

这是因为它们的原有的字符形式已作它用,其中,单引号用作区分字符常量的括号,双引号用作区分字符串(下面将要介绍字符串)的括号,而反斜杠本身已用来表示转义字符的开头,因此必须对它们用转义字符重新声明。

2. 八进制转义字符

它是由反斜杠'/'和随后的1~3个八进制数字构成的字符序列。例如,'/60'、'/101'、'/141'分别表示字符'0'、'A'和'a'。因为字符'0'、'A'和'a'的ASCII码的八进制值分别为60、101和141。

字符集中的所有字符都可以用八进制转义字符表示。

如果你愿意,可以在八进制数字前面加上一个0来表示八进制转移字符。

3. 十六进制转义字符

它是由反斜杠'/'和字母x(或X)及随后的1~2个十六进制数字构成的字符序列。例如,'/x30'、'/x41'、'/X61'分别表示字符'0'、'A'和'a'。因为字符'0'、'A'和'a'的ASCII码的十六进制值分别为0x30、0x41和0x61。

可见,字符集中的所有字符都可以用十六进制转义字符表示。

 

由上可知,使用八进制转义字符和十六进制转义字符,不仅可以表示控制字符,而且也可以表示可显示字符。但由于不同的计算机系统上采用的字符集可能不同,因此,为了能使所编写的程序可以方便地移植到其他的计算机系统上运行,程序中应少用这种形式的转义字符。

 

转义字符的使用

例:

void main()

{

int a,b,c;

a=5; b=6; c=7;

printf("%d/n/t%d %d/n %d %d/t/b%d/n",a,b,c,a,b,c);

}

 

此程序练习转义字符的使用:

a、b、c分别为整数5,6,7

调用printf显示程序运行结果:

5

67

56     7

程序在第一列输出a值5之后就是“/n”,故回车换行;接着又是“/t”,于是跳到下一制表位置(设制表位置间隔为8),再输出b值6和c 值7;后又是"/n",因此再回车换行;之后又输出a值5和b值6;再次后"/t"跳到下一制表位置(与上一行的6 对齐),但下一转义字符“/b”又使退回一格,故紧挨着6再输出c值7。

 

使用转义字符时需要注意以下问题:

1)转义字符中只能使用小写字母,每个转义字符只能看作一个字符。

2)/v垂直制表和/f换页符对屏幕没有任何影响,但会影响打印机执行响应操作。

3)在C程序中,使用不可打印字符时,通常用转义字符表示。

4)转义字符’/0’表示空字符NULL,它的值是0。而字符'0'的ASCII码值是48。因此,空字符’/0’不是字符0。另外,空字符不等于空格字符,空格字符的ASCII码值为32而不是0。编程序时,读者应当区别清楚。

5) 如果反斜线之后的字符和它不构成转义字符,则’/’不起转义作用将被忽略。

例如:

printf(“a/Nbc/nDEF/n”);

输出:

aNbc

DEF

6)转义字符也可以出现在字符串中,但只作为一个字符看待。

例 求下面字符串的长度

“/026[12,m” 长度为6

“/0mn”   长度为1。(想想:为什么不是2)

 

转义字符 意义 ASCII码值(十进制)
\a 响铃(BEL) 007
\b 退格(BS) ,将当前位置移到前一列 008
\f 换页(FF),将当前位置移到下页开头 012
\n 换行(LF) ,将当前位置移到下一行开头 010
\r 回车(CR) ,将当前位置移到本行开头 013
\t 水平制表(HT) (跳到下一个TAB位置) 009
\v 垂直制表(VT) 011
\\ 代表一个反斜线字符''\' 092
\' 代表一个单引号(撇号)字符 039
\" 代表一个双引号字符 034
\0 空字符(NULL) 000
\ddd 1到3位八进制数所代表的任意字符 三位八进制
\xhh 1到2位十六进制所代表的任意字符 二位十六进制









格式控制符参考:

格式输出字符:printf

使用:向终端输出若干个类型任意的数据。

形式:printf (格式控制符,输出列表)

说明:

格式控制符:%  格式说明引导符。

      -  指定左对齐输出。

      0  指定空位填零。

      m.n  指定输出域宽度及精度。

      l.h  输出长度的修正。

     格式字符   指定输出的数据类型。

说明:

格式字符:指定输出项的数据类型和输出格式。

     d  有符号十进制整数。

     o  无符号八进制数。

     x  无符号十六进制数。(小写的x格式中用小写字母a,b,c,d,e,f来表示10到15之间的数,大写的X则用大写的ABCDEF来表示10到15之间的数)

     u  不带符号的十进制整数。


基本整型:两个字节,十六个bit(位)

11 11 11 11 11 11 11 11   等于 65535.

11 11 11 11 11 11 11 10     等于 -2.

负数的第一位(符号位)为1。负数的补码怎么得到:原码取反加一。2的二进制数为:00 00 00 00 00 00 00 10,取反就等于11 11 11 11 11 11 11 01,然后加1,二进制数逢二进一,所以就得出-2 的二进制代码。

 

有符号的整型数可以用 %d 输出。

无符号的整型数可以用 %u 输出。

电脑里存的数字都是二进制数,最高位是符号位还是数据位,可以由输出格式符来控制。

 

二进制数转换八进制数:三个 1 对应一个 7 。

二进制数錾十六进制数:四位二进制对应一位十六进制,四个1 对应一个 f。

 

说明: 

格式字符:c    输出一个字符。

     s   输出一个字符串。

     e   以指数形式输出实型数。

     f     以小数形式输出实型数。

     g   自动决定输出格式为e和f中较短的一种,不打印无效的零。

     %   输出%。

 

注意:对于单精度数,使用 %f 格式符输出时,仅前7位是有效数字,小数6位。

   对于双精度数,使用 %lf 格式符输出时,前16位是有效数字,小数6位。

 

长度修正符

  l:对整型指定长整型long

      例:%ld , %lx , %lo , %lu

    对实型指定双精度double

           例:%lf

    h:只用于整型的格式字符修正为short

           例:%hd , %hx , %ho , %hu

对64位整数的输入输出,在POJ上的C++环境下(即VC++),64位整数是:
__int64
输入输出格式为”%I64d”.

在G++环境下, 64位整数是
long long
输入输出格式为”%lld”.

域宽及精度的描述

  M:域宽,即对应的输出项在输出设备上所占字符数

      若:实际数据宽度>M,按实际数据宽度输出。

        实际数据宽度<M,左边补空。

  N:精度,说明输出的实型数的小数位数。

 

几点说明:

    编译程序只是检查printf 函数的调用形式,不分析格式控制字符串,如果格式字符与输出项的类型不匹配,不进行类型转换。(输出的数为随机)

    格式字符要用小写字母。

    格式控制字符串中可以包含转义字符。

    格式控制字符串中的普通字符则原样输出。

    输出项的参数除了常数、变量外还可以是表达式、函数调用。

        %g,%f和%e这三个格式用于打印浮点值。
                  %g格式用于打印那些不需要按列对齐的浮点数特别有用。其作用有二:
                  一,去掉该数尾多余的零(没有达到六位的数)
                  二,保留六位有效数字(多余六位的)
                  %e格式用于打印浮点数时,一律显示地使用指数形式:例如:输出圆周率时是:3.141593e+00
                 两者的区别:
                 %g格式打印出的数是总共6位有效数字
                 %e格式打印出小数点后的6位有效数字
                 %f禁止使用指数形式来表示浮点数。因此圆周率输出为:3.141593
                (但注意它的精度要求:也是小数点后6位有效数字)
                (8)%%格式用于打印一个%字符。
               (9)%E和%G只是在输出时用大写字母(E)代替了小写字母(e)

                  输出正负号的技巧,例如:
                printf("%+d %+d %+d/n",-5,0,5);
                只要在中间加个“+”号就行。作用是输出符号位(即,数的正负号)
                如果不希望正数的前面出现‘+’号,可用下面的方法
                只要在中间加个“ ”号(即:空格)就行。例如:
                作用:如果一个数是非负数,就在它的前面插入一个空格。
                int i;
                for(i=-3;i<=3;i++)
                        printf("% d/n",i); //注意%和d之间有一个空格

              

                sscanf()的使用技巧:
                分解字符串,很多功能都需要正则表达式的知识,所以就介绍一下最简单的几种用sscanf来分解字符串 的用法。
                1.
                char str[100],str1[100],str2[100];
                gets(str);
                sscanf(str,”%s%s”,str1,str2);
                将读入的一整行字符串按空格,制表符或回车符分割成两个字符串。
                2
                取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。
          sscanf("123456 ", "%4s", str);

抱歉!评论已关闭.