Chinaunix首页 | 论坛 | 博客
  • 博客访问: 19268676
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类: C/C++

2008-03-20 18:33:38

来源: 作者:antigloss 等级:精品
发布于2006-01-10 13:58 被读2891次 【字体: 】

不可打印字符(Nonprinting Characters

 

 

    有些 ASCII 字符是不可打印的。例如退格另起一行警报等。C 语言提供了两种方法来表示这种不可打印字符

 

    第一种方法是使用 ASCII 编码。例如,ASCII 编码中,7 用于表示警报:

 

        char beep = 7;

 

    第二种方法是使用特殊符号序列,也就是所谓的转义字符escape sequences。参见下表:

 

    转义字符          含义

          \a            警报( Alert (ANSI C)

          \b            退格(Backspace

          \f            换页(Form feed

          \n            换行(Newline

          \r            回车(Carriage return

          \t            水平制表符(Horizontal tab

          \v            垂直制表符(Vertical tab

          \\            反斜杆( Backslash (\)

          \'            单引号( Single quote (')

          \"            双引号( Double quote (")

          \?            问号( Question mark (?)

          \0oo        八进制数( Octal value (o 代表一个八进制数字)

          \xhh        十六进制数( Hexadecimal value (h 代表一个十六进制数字)

 

给变量赋值的时候,转义字符必须使用单引号引住。例如:

 

          char nl = '\n';

 

下面我们详细学习每个转移字符的含义。

 

    \a(警报)是 ANSI C89 添加的,用于产生可听或者可视的警报。\a 产生的效果取决于硬件。一般来说,输出 \a 会产生鸣响。但是在某些系统,输出 \a 不会产生任何效果,或者仅仅显示一个特殊字符。标准明确指出,\a 不应该改变当前活跃位置active position)。所谓活跃位置,是指显示设备(显示器、打字机、打印机等等)显示下一个字符的位置。以显示器为例,活跃位置就是指光标所处的位置,输出 \a 不会导致光标移动位置。

 

\b\f\n\r\t,以及 \v 都是输出设备控制符。退格符(\b)使当前行的活跃位置后退一个位置。换页符(\f)使活跃位置跳到下一页的开端。注:换页符可用于控制打印机换页,但不会导致 PC 机的显示屏换页。换行符(\n)使活跃位置跳到下一行的开端。回车符 ( \r ) 使活跃位置返回当前行的开端。水平制表符(\t)使活跃位置移动若干个位置(通常是8个)。垂直制表符(\v)使活跃位置换若干行。注:\v可用于控制打印机换若干行,但是不会导致PC机的显示屏换行。

 

    \\\',以及 \" 使我们可以把 \' " 用作字符常量。如果要打印以下句子:

 

"\ is called 'backslash'."

 

我们需要使用如下语句:

 

printf("\"\\ is called \'backslash\'.\"");

 

或者

 

printf("\"\\ is called 'backslash'.\"");

 

注意,在字符串字面量中,无论写 \' 还是 ',输出都是一样的。但是,在给字符变量赋值时,一定要写 \'。例如:

 

char ch = ''';   /* 错误! */

char ch = '\'';   /* 正确。 */

 

 

    \0oo \xhh ASCII码的两种特殊表示形式。如果想用八进制ASCII码表示字符,可以在八进制数前面加上 \ ,然后用单引号引起来。例如:

 

            beep = '\007';        /*  \007 代表 \a  */

 

打头的那些0可以省略,也就是说,写成 '\07' 或者 '\7' 都一样。无论有没有打头的0 7 都会被当成八进制数处理。

 

    C89 开始,C提供了用十六进制表示字符常量的方法:在反斜杆后面写一个 x ,然后再写 1 3 个十六进制数字。例如:

 

            nl = '\xa';        /*  \xa 代表 \n  */

 

    注意:使用ASCII码时,要注意区分数字数字字符。例如:字符4ASCII码是52 '4' 代表字符 4 ,而不是数字4。此外,尽管 '\n' '\xa' '\a' '\007' 是等价的,但是我们应该尽可能使用 '\n' '\a' ,而不要用 '\xa' '\007' 。这是因为前者易懂、便于记忆,而且移植性更高。而后者只对使用ASCII码的系统有效。

 

参考资料:C Primer 5th Edition

                    C99 标准

本文版权归 以及 作者 antigloss 共同所有,转载请注明原作者和出处。谢谢。

阅读(590) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~