目录
- 1、字符型常量
- 2、字符型变量
- 3、字符型数据的输入输出
- (1)scanf()和printf()函数输入输出字符
- (2)字符输入函数getchar()
- 总结
1、字符型常量
字符型常量指单个字符,是用一对单引号及其所括起来的字符表示。
例如:‘A’、‘a’、‘0’、’$‘等都是字符型常量。
C语言的字符使用的就是ASCII字符集,总共有128个,每个相应的ASCII码都表示一个字符:
(1)每一个字符都有唯一的次序值,即ASCII码。
(2)数字’0’,‘1’,‘2’,…,‘9’、大写字母’A’,‘B’,‘C’,…,‘Z’、小写字母’a’,‘b’,‘c’,…,'z’的ASCII都是升序连续排列的。
注: 数字和数字字符不一样的,带单引号的是字符,例如:1是整型数字,而’1’是字符,其ASCII码是49,即按整型输出的话就是49,按字符型数据输出就是1。
ASCII码表:
符号(解释) |
十进制 |
十六进制 |
符号(解释) |
十进制 |
十六进制 |
NULL(空操作) |
0 |
0x00 |
@ |
64 |
0x40 |
SOH(标题开始) |
1 |
0x01 |
A |
65 |
0x41 |
STX(正文开始) |
2 |
0x02 |
B |
66 |
0x42 |
ETX(正文结束) |
3 |
0x03 |
C |
67 |
0x43 |
EOT(传输结束) |
4 |
0x04 |
D |
68 |
0x44 |
ENQ(请求) |
5 |
0x05 |
E |
69 |
0x45 |
ACK(收到通知) |
6 |
0x06 |
F |
70 |
0x46 |
BEL(响铃) |
7 |
0x07 |
G |
71 |
0x47 |
BS(退格) |
8 |
0x08 |
H |
72 |
0x48 |
HT(水平制表符) |
9 |
0x09 |
I |
73 |
0x49 |
LF(换行) |
10 |
0x0A |
J |
74 |
0x4A |
VT(垂直制表符) |
11 |
0x0B |
K |
75 |
0x4B |
FF(换页) |
12 |
0x0C |
L |
76 |
0x4C |
CR(回车) |
13 |
0x0D |
M |
77 |
0x4D |
SO(不用切换) |
14 |
0x0E |
N |
78 |
0x4E |
SI(启用切换) |
15 |
0x0F |
O |
79 |
0x4F |
DLE(数据链路转义) |
16 |
0x10 |
P |
80 |
0x50 |
DC1(设备控制1) |
17 |
0x11 |
Q |
81 |
0x51 |
DC2(设备控制2) |
18 |
0x12 |
R |
82 |
0x52 |
DC3(设备控制3) |
19 |
0x13 |
S |
83 |
0x53 |
DC4(设备控制4) |
20 |
0x14 |
T |
84 |
0x54 |
NAK(拒绝接收) |
21 |
0x15 |
U |
85 |
0x55 |
SYN(同步空闲) |
22 |
0x16 |
V |
86 |
0x56 |
ETB(结束传输块) |
23 |
0x17 |
W |
87 |
0x57 |
CAN(取消) |
24 |
0x18 |
X |
88 |
0x58 |
EM(媒介结束) |
25 |
0x19 |
Y |
89 |
0x59 |
SUB(代替) |
26 |
0x1A |
Z |
90 |
0x5A |
ESC(换码(溢出)) |
27 |
0x1B |
[ |
91 |
0x5B |
FS(文件分隔符) |
28 |
0x1C |
\ |
92 |
0x5C |
GS(分组符) |
29 |
0x1D |
] |
93 |
0x5D |
RS(记录分隔符) |
30 |
0x1E |
^ |
94 |
0x5E |
US(单元分隔符) |
31 |
0x1F |
_ |
95 |
0x5F |
(space)(空格) |
32 |
0x20 |
` |
96 |
0x60 |
! |
33 |
0x21 |
a |
97 |
0x61 |
" |
34 |
0x22 |
b |
98 |
0x62 |
# |
35 |
0x23 |
c |
99 |
0x63 |
$ |
36 |
0x24 |
d |
100 |
0x64 |
% |
37 |
0x25 |
e |
101 |
0x65 |
& |
38 |
0x26 |
f |
102 |
0x66 |
’ |
39 |
0x27 |
g |
103 |
0x67 |
( |
40 |
0x28 |
h |
104 |
0x68 |
) |
41 |
0x29 |
i |
105 |
0x69 |
* |
42 |
0x2A |
j |
106 |
0x6A |
+ |
43 |
0x2B |
k |
107 |
0x6B |
, |
44 |
0x2C |
l |
108 |
0x6C |
- |
45 |
0x2D |
m |
109 |
0x6D |
. |
46 |
0x2E |
n |
110 |
0x6E |
/ |
47 |
0x2F |
o |
111 |
0x6F |
0 |
48 |
0x30 |
p |
112 |
0x70 |
1 |
49 |
0x31 |
q |
113 |
0x71 |
2 |
50 |
0x32 |
r |
114 |
0x72 |
3 |
51 |
0x33 |
s |
115 |
0x73 |
4 |
52 |
0x32 |
t |
116 |
0x74 |
5 |
53 |
0x35 |
u |
117 |
0x75 |
6 |
54 |
0x36 |
v |
118 |
0x76 |
7 |
55 |
0x37 |
w |
119 |
0x77 |
8 |
56 |
0x38 |
x |
120 |
0x78 |
9 |
57 |
0x39 |
y |
121 |
0x79 |
: |
58 |
0x3A |
z |
122 |
0x7A |
; |
59 |
0x3B |
{
|
123 |
0x7B |
< |
60 |
0x3C |
| |
124 |
0x7C |
= |
61 |
0x3D |
} |
125 |
0x7D |
> |
62 |
0x3E |
~ |
126 |
0x7E |
? |
63 |
0x3F |
DEL(删除) |
127 |
0x7F |
在C语言中,所使用的字符被一一映射到一张表中,这张表被称为ASCII码表。
由于标准 ASCII 字符集字符数目有限,无法满足要求。为此,国际标准化组织又制定了 ISO2022 标准,它规定了在保持与 ISO646 兼容的前提下将 ASCII 字符集扩充为 8 位代码的统一方法。 ISO 1陆续制定了一批适用于不同地区的扩充 ASCII 字符集,每种扩充 ASCII 字符集分别可以扩充 128 个字符,这些扩充字符的编码均为高位为 1 的 8 位代码,称为扩展 ASCII 码。
但由于扩展ASCII不再是国际标准,故不在此展示。
十进制码值Dec |
缩写/字符 |
二进制码值Bin |
八进制码值Oct |
十六进制码值Hex |
0 |
NULL 空字符 |
0000 0000 |
00 |
0x0 |
1 |
SOH 标题开始 |
0000 0001 |
01 |
0x1 |
2 |
STX 正文开始 |
0000 0010 |
02 |
0x2 |
3 |
ETX 正文介绍 |
0000 0011 |
03 |
0x3 |
4 |
EOT 传输结束 |
0000 0100 |
04 |
0x4 |
5 |
ENQ 请求 |
0000 0101 |
05 |
0x5 |
6 |
ACK 收到通知 |
0000 0110 |
06 |
0x6 |
7 |
BEL 响铃 |
0000 0111 |
07 |
0x7 |
8 |
BS 退格 |
0000 1000 |
010 |
0x8 |
9 |
HT 水平制表符 |
0000 1001 |
011 |
0x9 |
10 |
LF 换行键 |
0000 1010 |
012 |
0xA |
11 |
VT 垂直制表符 |
0000 1011 |
013 |
0xB |
12 |
FF 换页键 |
0000 1100 |
014 |
0xC |
13 |
CR 回车键 |
0000 1101 |
015 |
0xD |
14 |
SO 不用切换 |
0000 1110 |
016 |
0xE |
15 |
SI 启用切换 |
0000 1111 |
017 |
0xF |
16 |
DLE 数据链路转义 |
0001 0000 |
020 |
0x10 |
17 |
DC1 设备控制1 |
0001 0001 |
021 |
0x11 |
18 |
DC2 设备控制2 |
0001 0010 |
022 |
0x12 |
19 |
DC3 设备控制3 |
0001 0011 |
023 |
0x13 |
20 |
DC4 设备控制4 |
0001 0100 |
024 |
0x14 |
21 |
NAK 拒绝接受 |
0001 0101 |
025 |
0x15 |
22 |
SYN 同步空闲 |
0001 0110 |
026 |
0x16 |
23 |
ETB 结束传输块 |
0001 0111 |
027 |
0x17 |
24 |
CAN 取消 |
0001 1000 |
030 |
0x18 |
25 |
EM 媒介结束 |
0001 1001 |
031 |
0x19 |
26 |
SUB 代替 |
0001 1010 |
032 |
0x1A |
27 |
ESC 换码(溢出) |
0001 1011 |
033 |
0x1B |
28 |
FS 文件分隔符 |
0001 1100 |
034 |
0x1C |
29 |
GS 分组符 |
0001 1101 |
035 |
0x1D |
30 |
RS 记录分隔符 |
0001 1110 |
036 |
0x1E |
31 |
US 单元分隔符 |
0001 1111 |
037 |
0x1F |
32 |
(space) 空格 |
0010 0000 |
040 |
0x20 |
33 |
! 叹号 |
0010 0001 |
041 |
0x21 |
34 |
" 双引号 |
0010 0010 |
042 |
0x22 |
35 |
# 井号 |
0010 0011 |
043 |
0x23 |
36 |
$ 美元符 |
0010 0100 |
044 |
0x24 |
37 |
% 百分号 |
0010 0101 |
045 |
0x25 |
38 |
& 和号 |
0010 0110 |
046 |
0x26 |
39 |
’ 闭单引号 |
0010 0111 |
047 |
0x27 |
40 |
( 开括号 |
0010 1000 |
050 |
0x28 |
41 |
) 闭括号 |
0010 1001 |
051 |
0x29 |
42 |
* 星号 |
0010 1010 |
052 |
0x2A |
43 |
+ 加号 |
0010 1011 |
053 |
0x2B |
44 |
, 逗号 |
0010 1100 |
054 |
0x2C |
45 |
- 减号/破折号 |
0010 1101 |
055 |
0x2D |
46 |
. 句号 |
0010 1110 |
056 |
0x2E |
47 |
/ 斜杠 |
0010 1111 |
057 |
0x2F |
48 |
数字0 |
0011 0000 |
060 |
0x30 |
49 |
数字1 |
0011 0001 |
061 |
0x31 |
50 |
数字2 |
0011 0010 |
062 |
0x32 |
51 |
数字3 |
0011 0011 |
063 |
0x33 |
52 |
数字4 |
0011 0100 |
064 |
0x34 |
53 |
数字5 |
0011 0101 |
065 |
0x35 |
54 |
数字6 |
0011 0110 |
066 |
0x36 |
55 |
数字7 |
0011 0111 |
067 |
0x37 |
56 |
数字8 |
0011 1000 |
070 |
0x38 |
57 |
数字9 |
0011 1001 |
071 |
0x39 |
58 |
: 冒号 |
0011 1010 |
072 |
0x3A |
59 |
; 分号 |
0011 1011 |
073 |
0x3B |
60 |
< 小于 |
0011 1100 |
074 |
0x3C |
61 |
= 等于 |
0011 1101 |
075 |
0x3D |
62 |
> 大于 |
0011 1110 |
076 |
0x3E |
63 |
? 问号 |
0011 1111 |
077 |
0x3F |
64 |
@ 电子邮件符号 |
0100 0000 |
0100 |
0x40 |
65 |
大写字母A |
0100 0001 |
0101 |
0x41 |
66 |
大写字母B |
0100 0010 |
0102 |
0x42 |
67 |
大写字母C |
0100 0011 |
0103 |
0x43 |
68 |
大写字母D |
0100 0100 |
0104 |
0x44 |
69 |
大写字母E |
0100 0101 |
0105 |
0x45 |
70 |
大写字母F |
0100 0110 |
0106 |
0x46 |
71 |
大写字母G |
0100 0111 |
0107 |
0x47 |
72 |
大写字母H |
0100 1000 |
0110 |
0x48 |
73 |
大写字母I |
0100 1001 |
0111 |
0x49 |
74 |
大写字母J |
0100 1010 |
0112 |
0x4A |
75 |
大写字母K |
0100 1011 |
0113 |
0x4B |
76 |
大写字母L |
0100 1100 |
0114 |
0x4C |
77 |
大写字母M |
0100 1101 |
0115 |
0x4D |
78 |
大写字母N |
0100 1110 |
0116 |
0x4E |
79 |
大写字母O |
0100 1111 |
0117 |
0x4F |
80 |
大写字母P |
0101 0000 |
0120 |
0x50 |
81 |
大写字母Q |
0101 0001 |
0121 |
0x51 |
82 |
大写字母R |
0101 0010 |
0122 |
0x52 |
83 |
大写字母S |
0101 0011 |
0123 |
0x53 |
84 |
大写字母T |
0101 0100 |
0124 |
0x54 |
85 |
大写字母U |
0101 0101 |
0125 |
0x55 |
86 |
大写字母V |
0101 0110 |
0126 |
0x56 |
87 |
大写字母W |
0101 0111 |
0127 |
0x57 |
88 |
大写字母X |
0101 1000 |
0130 |
0x58 |
89 |
大写字母Y |
0101 1001 |
0131 |
0x59 |
90 |
大写字母Z |
0101 1010 |
0132 |
0x5A |
91 |
[ 开方括号 |
0101 1011 |
0133 |
0x5B |
92 |
\ 反斜杠 |
0101 1100 |
0134 |
0x5C |
93 |
] 闭方括号 |
0101 1101 |
0135 |
0x5D |
94 |
^ 脱字节 |
0101 1110 |
0136 |
0x5E |
95 |
_ 下划线 |
0101 1111 |
0137 |
0x5F |
96 |
’ 开单引号 |
0110 0000 |
0140 |
0x60 |
97 |
小写字母a |
0110 0001 |
0141 |
0x61 |
98 |
小写字母b |
0110 0010 |
0142 |
0x62 |
99 |
小写字母c |
0110 0011 |
0143 |
0x63 |
100 |
小写字母d |
0110 0100 |
0144 |
0x64 |
101 |
小写字母e |
0110 0101 |
0145 |
0x65 |
102 |
小写字母f |
0110 0110 |
0146 |
0x66 |
103 |
小写字母g |
0110 0111 |
0147 |
0x67 |
104 |
小写字母h |
0110 1000 |
0150 |
0x68 |
105 |
小写字母i |
0110 1001 |
0151 |
0x69 |
106 |
小写字母j |
0110 1010 |
0152 |
0x6A |
107 |
小写字母k |
0110 1011 |
0153 |
0x6B |
108 |
小写字母l |
0110 1100 |
0154 |
0x6C |
109 |
小写字母m |
0110 1101 |
0155 |
0x6D |
110 |
小写字母n |
0110 1110 |
0156 |
0x6E |
111 |
小写字母o |
0110 1111 |
0157 |
0x6F |
112 |
小写字母p |
0111 0000 |
0160 |
0x70 |
113 |
小写字母q |
0111 0001 |
0161 |
0x71 |
114 |
小写字母r |
0111 0010 |
0162 |
0x72 |
115 |
小写字母s |
0111 0011 |
0163 |
0x73 |
116 |
小写字母t |
0111 0100 |
0164 |
0x74 |
117 |
小写字母u |
0111 0101 |
0165 |
0x75 |
118 |
小写字母v |
0111 0110 |
0166 |
0x76 |
119 |
小写字母w |
0111 0111 |
0167 |
0x77 |
120 |
小写字母x |
0111 1000 |
0170 |
0x78 |
121 |
小写字母y |
0111 1001 |
0171 |
0x79 |
122 |
小写字母z |
0111 1010 |
0172 |
0x7A |
123 |
{ 开花括号 |
0111 1011 |
0173 |
0x7B |
124 |
丨垂线 |
0111 1100 |
0174 |
0x7C |
125 |
} 闭花括号 |
0111 1101 |
0175 |
0x7D |
126 |
~ 波浪号 |
0111 1110 |
0176 |
0x7E |
127 |
DEL 删除 |
0111 1111 |
0177 |
0x7F |
2、字符型变量
用char定义的变量为字符型变量。
例如:char op; 定义了一个字符型变量op,其数据类型为char型,即字符型数据。
可以对其进行赋值,例如op='*'就是将字符型常量’*‘赋值给变量op。
字符型变量在计算机中是按照ASCII码的值来存储的,可以和整形数据进行运算,其运算规格类似,例如:op = '*'+1;,那么op按字符型数据输出就是’+’,按整型数据输出就是43。
3、字符型数据的输入输出
(1)scanf()和printf()函数输入输出字符
scanf()和printf()函数进行字符型数据的输入输出和整型浮点型的处理方式完全一样,只是格式控制字符串中相应的格式控制说明为%c
。
(2)字符输入函数getchar()
getchar()函数可以从键盘输入一个字符。其一般用法为:
这句话就是从键盘输入一个字符,并将其赋给变量ch。
(3)字符输出函数putchar()
putchar()函数是输出一个字符。其一般用法为:
输出参数是字符型变量或者字符型常量。
注: 使用getchar()函数和putchar()函数同样需要先包含头文件#include <stdio.h>
函数getchar()和putchar()分别只能输入和输出一个字符,若要处理多个字符的输出和输出,那么一般需要采用循环的方式多次调用该函数。
例如下面的代码为输入8个字符,然后将这8个字符再输出,每两个字符中间添加一个’-’。
#include <stdio.h>
int main(void)
{
char ch
int first = 1, k; /*first的值表示将要处理的是否为输入的第一个字符*/
printf("Enter 8 characters:");
for (k=1; k<=8; k++) {
ch = getchar(); /*变量ch接收从键盘输入的一个字符*/
if (first == 1) {
putchar(ch); /*输出存放在变量ch中的字符*/
first = 0; /*处理完第1个字符,清楚标志位*/
} else { /*处理第2个及以后的字符*/
putchar('-'); /*输出字符常量'-'*/
putchar(ch); /*输出存放在变量ch中的字符*/
}
}
}
运行结果:
Enter 8 characters:gorgeous
g-o-r-g-e-o-u-s
例:四则运算
求解简单的四则运算表达式。输入一个形如 "操作数 运算符 操作数"的四则运算表达式,输出运算结果,要求对除数0的情况做特别处理。
#include <stdio.h>
int main(void)
{
double value1, value2;
char op;
printf("Type in an expression:");
scanf("%lf%c%lf", &value1, &op, &value2);
if (op == '+'){ /*判断运算符是否为'+'*/
printf("=%.2f\n", value1+value2); /*对操作数做加法操作*/
} else if (op == '-'){ /*否则判断运算符是否为'-'*/
printf("=%.2f\n", value1-value2);
} else if (op == '*'){ /*否则判断运算符是否为'*'*/
printf("=%.2f\n", value1*value2);
} else if (op == '/'){ /*否则判断运算符是否为'/'*/
if (value2 != 0){
printf("=%.2f\n", value1/value2);
} else { /*对除数为0作特殊处理*/
printf("Divisior can not be 0!\n");
}
} else {
printf ("Unknown operator!\n"); /*运算符输出错误*/
}
return 0;
}
运行结果:
Type in an expression:8.65+3.29
=11.94
Type in an expression:76.9/0
Divisior can not be 0!
Type in an expression:47.2 - 76
Unknown operator!
注: 此处一定要注意,这里的操作数和运算符之间必须连续输入,两者之间不能有空格。
这是因为空格也是一个字符,它会占据运算符的位置,在程序中就会是一个无法识别的运算符。
如上述运行结果第三个。
总结