字符类型
char(character)是一种整数,也是一种特殊的类型:字符。这是因为
① 用单引号表示的字符字符字面量:‘a’,'1'
②‘’也是一个字符
③printf和scanf里用%c来输入、输出字符。
1 #include<stdio.h> 2 int main() 3 { 4 char c; 5 char d; 6 c = 1; 7 d = '1'; 8 printf("c = %d,d = %d,d = %c\n",c,d,d); 9 return 0; 10 }
//运行结果:c = 1,d = 49,d = '1'
通过例子看到,字符'1'和整数1不相等。字符‘1’和整数49相等。字符也是整数的一种。
字符的输入输出
如何输入‘1’这个字符给char c ?
scanf("%c",&c); ---->1
scanf("%d",&i);c=i; ---->49
‘1’的ASCII编码是49,所以c == 49时,它代表'1'
1 #include<stdio.h> 2 int main () 3 { 4 char c; 5 int d; 6 scanf("%c",&c); 7 printf("c = %d,c = '%c'\n",c,c); 8 scanf("%d",&d); 9 printf("d = %d,d = '%c'\n",d,d); 10 return 0; 11 }
//运行结果:输入 1
输出 c=49,c='1'
输入 49
输出 d = 49,d = '1'
字符的输入看scanf的参数,%c就是输入的即是字符;%d就是整数,对应的字符。
混合输入
int i;char c;
scanf("%d %c",&i,&c);
scanf("%d%c",&i,&c);
有何不同?
1 #include<stdio.h> 2 int main() 3 { 4 int i; 5 char c; 6 scanf("%d %c",&i,&c);//中间有空格 7 printf("i = %d,c = %d,c = '%c'\n",i,c,c); 8 scanf("%d%c",&i,&c);//中间无空格 9 printf("i = %d,c = %d,c = '%c'\n",i,c,c); 10 return 0; 11 }
//运行结果:
有空格,输入1a,1 a,1 a都可以正确读入整数和字符
无空格,只能1a可以正确读入整数和字符。1 a,1 a读入整数1和空格字符。读不进字符a。
字符计算
1 #include<stdio.h> 2 int main() 3 { 4 char c = 'A'; 5 c++; 6 printf("%c",c); 7 return 0; 8 }
字符可以转化为整数运算,结构再转化为字符。
字母在ASCII表中是顺序排列的;
大写字母和小写字母是分开排列的,并不在一起。
于是:
①‘a’-'A'可以得到两段之间的距离
②A+'a'-A可以把一个大写字母变成小写字母
③a+'A'-'a'可以把一个小写字母变成大写字母。
逃逸字符
用来表达无法印出来的控制字符或特殊字符,它由一个反斜杠"\"开头,后面跟上另一个字符,这两个字符合起来,组成了一个字符。
如 printf("请分别输入身高的英尺和英寸,""如输入\"5 7\"表示5英尺7英寸:")
字符 | 意义 | 字符 | 意义 |
\b | 回退一格 | \" | 双引号 |
\t | 到下一表格位 | \' | 单引号 |
\n | 换行 | \\ | 反斜杠本身 |
\r | 回车 |
不同的终端shell翻译可能有区别,通常\b是回退一格不删除,\t制表符,用于对齐;\n通常执行换行和回车两个动作。