| [b]15. 基本数据类型:字符型(中) [/b] |
|
[b]不可打印字符([/b][b]Nonprinting Characters[/b][b])[/b]
有些 ASCII 字符是不可打印的。例如[b]退格[/b]、[b]另起一行[/b]、[b]警报[/b]等。C 语言提供了两种方法来表示这种[b]不可打印字符[/b]。
第一种方法是使用 ASCII 编码。例如,ASCII 编码中,7 用于表示警报:
char beep = 7;
第二种方法是使用特殊符号序列,也就是所谓的[b]转义字符escape sequences[/b])。参见下表:(
[b]转义字符 [/b][b]含义[/b]
\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';
下面我们详细学习每个转移字符的含义。
[b]\a[/b](警报)是 ANSI C89 添加的,用于产生[b]可听[/b]或者[b]可视[/b]的警报。\a 产生的效果[b]取决于硬件[/b]。一般来说,输出 \a 会产生[b]鸣响[/b]。但是在某些系统,输出 \a 不会产生任何效果,或者仅仅显示一个特殊字符。标准明确指出,\a 不应该改变当前[b]活跃位置[/b]([b]active position[/b])。所谓活跃位置,是指显示设备(显示器、打字机、打印机等等)显示下一个字符的位置。以显示器为例,活跃位置就是指光标所处的位置,输出 \a 不会导致光标移动位置。
[b]\b[/b]、[b]\f[/b]、[b]\n[/b]、[b]\r[/b]、[b]\t[/b],以及[b]\v[/b] 都是输出设备控制符。退格符([b]\b[/b])使当前行的活跃位置后退一个位置。换页符([b]\f[/b])使活跃位置跳到下一页的开端。注:换页符可用于控制打印机换页,但不会导致 PC 机的显示屏换页。换行符([b]\n[/b])使活跃位置跳到下一行的开端。回车符 ([b]\r [/b]) 使活跃位置返回当前行的开端。水平制表符([b]\t[/b])使活跃位置移动若干个位置(通常是8个)。垂直制表符([b]\v[/b])使活跃位置换若干行。注:[b]\v[/b]可用于控制打印机换若干行,但是不会导致PC机的显示屏换行。
[b]\\[/b]、[b]\'[/b],以及[b]\" [/b]使我们可以把[b]\[/b],[b]' [/b]和[b]" [/b]用作字符常量。如果要打印以下句子:
"\ is called 'backslash'."
我们需要使用如下语句:
printf("\"\\ is called \'backslash\'.\"");
[b]\0oo[/b] 和[b]\xhh [/b]是ASCII码的两种特殊表示形式。如果想用八进制ASCII码表示字符,可以在八进制数前面加上[b]\ [/b],然后用单引号引起来。例如:
beep = '\007'; [b]/* \007 [/b][b]代表 \a */[/b]
打头的那些0可以省略,也就是说,写成 '\07' 或者 '\7' 都一样。无论有没有打头的0 ,7 都会被当成八进制数处理。
从 C89 开始,C提供了用十六进制表示字符常量的方法:在反斜杆后面写一个 x ,然后再写 1 到 3 个十六进制数字。例如:
nl = '\xa'; [b]/* \xa [/b][b]代表 \n */[/b]
注意:使用ASCII码时,要注意区分[b]数字4的ASCII码是52 ,'4' 代表字符 4 ,而不是数字4。此外,尽管 '\n' 和 '\xa' ,'\a' 和 '\007' 是等价的,但是我们应该尽可能使用 '\n' 和 '\a' ,而不要用 '\xa' 和 '\007' 。这是因为前者易懂、便于记忆,而且移植性更高。而后者只对使用ASCII码的系统有效。[/b]和[b]数字字符[/b]。例如:字符 |
| [b]16. 基本数据类型:字符型(下) [/b] |
|
[b]一、字符输出[/b]
printf 函数使用[b]%c[/b] 表示输出字符。因为字符是以 1 字节整数的形式存取的,所以,如果使用[b]%d[/b] 的话,输出的会是整数。例如:
/* 这个程序输出字符以及字符的整数编码 */
#include[b]<[/b]stdio.h[b]>[/b]
int main(void)
{
char ch;
printf("Please enter a character.\n");
scanf("%c", &ch); /* 由用户输入一个字符 */
printf("The code for %c is %d.\n", ch, ch);
return 0;
}
请各位自行编译执行此程序,查看其执行结果。输入字符后记得要按回车键。
printf 函数输出 ch 的值两次,第一次以字符的形式输出(因为格式限定符为 %c),第二次以十进制整数的形式输出(因为格式限定符是 %d)。注意:格式限定符只是用于指定数据的输出形式,而不是用来指定数据怎么存储。
[b]二、字符类型的符号[/b]
某些编译器中,char 默认是[b]有符号[/b]的(signed)。对于这类型的编译器来说,char 的表示范围通常是 -128 到 127 。而另外一些编译器中,char 默认是[b]无符号[/b]的(unsigned)。对于这类型的编译器来说,char 的表示范围通常是 0 到 255 。一般来说,编译器的使用说明会注明它默认把 char 当作有符号的还是无符号的。
从 C89 开始,我们可以使用关键字 signed 和 unsigned 来修饰 char 。这么一来,无论编译器默认 char 是有符号的也好,无符号的也罢,我们都可以用 signed char 表示有符号 char ,也可以用 unsigned char 表示无符号 char 。 |
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有