字符类型
- char 是一种整数,也是一种特殊的类型:字符. 这是因为:
- 用单引号表示的字符字面量: ‘a’ , ‘i’
- ’ '也是一个字符
- scanf和printf里用%c来输入输出字符
#include <stdio.h>
int main( )
{
char c;
char d;
c = 1; //这里c是整数1,类型为整数类型
d = '1'; //这里d是字符1,类型是字符类型
if ( c == d ) {
printf("相等\n" );
}else {
printf("不相等\n");
}
printf( " c=%d\n", c);
printf( "d=%d\n", c);
return 0;
}
结果:不相等
c=1
d=9
字符的输入和输出
- 如何输出’1’这个字符给char c?
scanf(“%c”,&c); —>输入1
scanf(“%d”,&i); c= i; —>输入49
(注:这里不能直接写scanf(“%d”,&c),因为scanf-%d只能处理int,不能处理char) - ‘1’的ASCII 编码是49,所以当c == 49时,它代表’1’
#include <stdio.h>
int main( )
{
int i;
char c;
scanf ( "%d", &i) ;
c = i;
printf ( "c=%d\n", c);
printf ( "c='%c ' ln", c);
return 0;
}
结果:49
c=49
c=‘1’
混合输入
- scanf(“%d %c”&i,&c);
#include <stdio.h>
int main( )
{
int i;char c;
scanf ( "%d %c", &i, &c);
printf (" i=%d,c=%d,c='%c ' ln" ,i,c,c) ;
return 0;
}
- scanf(“%d%c”,&i,&c);
#include <stdio.h>
int main( )
{
int i;char c;
scanf ( "%d%c", &i, &c);
printf (" i=%d,c=%d,c='%c ' ln" ,i,c,c) ;
return 0;
}
可以看出scanf里面%d与%c之间有无空格是有区别的.
–若有空格,则把第一个数读入后,把其后面的空格也读完,才读入下一个数.
–若无空格,则读入第一个数后直接读入下一个数,若此数是空格,则空格也会被读入.
字符计算
- 一个字符加一个数字得到ASCII之后的字符
- 两个字符相减,得到它们在表中的距离
eg:
char c = ‘A’;
c++;
printf(“%c\n”,c); //输出B
eg:
int i = ‘Z’ - ‘A’;
printf(“%d\n”,i);
字母大小写转换
-
字母在ASCII表中是顺序排列的
-
大写字母和小写字母是分开排列的,并不在一起
-
‘a’-'A’可以得到两段之间的距离,于是
●a+‘a’-'A”可以把一个大写字母变成小写字母,而
●a+‘A’-'a’可以把一个小写字母变成大写字母
逃逸字符
-
用来表示无法打印出来的控制字符或者特殊字符,它由一个反斜杠""开头,后面跟上另一个字符,这两个字符合起来,组成了一个字符
-
eg:
这里有两个双引号,若不加\会混淆
-
制表位(\t)
到每行固定的位置
一个\t使得输出从下一个制表位开始
用\t能使得上下两行对其
#include stdio.h>
int main( )
{
printf ( "123\t456\n" );
printf ( "12\t456");
return 0;
}
输出结果如下:
- \b :z在不同编译器上意义不同,可能是回退一格,有可能是删除上一格
#include <stdio.h>
int main()
{
printf ( "123\bA\n456\n");
return 0;
}
结果如下:
可以看出光标回退了一格使A代替了3