- 字符变量在内存中占用一个字节,只能存放ASCII码。
‘0’~’9’对应的整数为48~57
‘A’~’Z’对应的整数为65~90
‘a’~’z’对应的整数为97~122
大写字母与小写字母的差值为32putchar和getchar
char c; c=getchar();/*从键盘读取一个字符*/ putchar(c);/*输出c的值到屏幕*/
字符运算
C语言规定,所有的字符运算都是转成ASCII的整数运算。
如:
‘B’- ‘A’相当于66-65=1
‘a’+ 1相当于97+1=98=’b’
既然字符型数据和整形数据可这么方便的转换,那么字符型数据也可以使用%d输出,用来获得字符的ASCII码序号。用scanf输入字符
- 每个%c只接受一个字符
scanf("%c%c%c",&a,&b,&c);
如果输入:uvwxyz
系统会一个一个的截取,使a = ‘u’,b = ‘v’,c = ‘w’ - 在字符型变量上使用列宽控制时,第一个变量只会读取第一个字符,第二个变量会跳跃列宽后再读取一个字符
scanf("%3c%c",&c1,&c2);
如果输入:abcde
则c1 = ‘a’,c2 = ‘d’ - 空格和回车都作为字符
scanf("%c%c%c",&a,&b,&c)
如果输入:x□y□z
□表示空格,则a = ‘x’,b = ‘□’,c = ‘y’,最右边的两个字符被丢弃。
如果输入:x(回车)yz
a,c与前面相同,但是b会赋值为一个回车,也就是ASCII码的10。
- 每个%c只接受一个字符
- 例题
#include <stdio.h>
int main()
{
char c1,c2,c3,c4,c5,c6;
scanf("%c%c%c%c",&c1,&c2,&c3,&c4);
c5=getchar();
c6=getchar();
putchar(c1);
putchar(c2);
printf("%c%C\n",c5,c6);
return 0;
}
程序运行后,若从键盘输入(从第1列开始)
123(回车)
45678(回车)
则输出结果为:1245