首页 > 技术文章 > C语言-字符类型

Cobby-baby 2020-02-02 09:59 原文

C语言-字符类型

char不仅是一种整数,也是一种特殊的类型:字符(character)。

  • 常用单引号表示字符的字面量,如'a', '1'。
  • 单引号''也是一个字符,printf和scanf里用的%c来输入输出字符

注意:char整数类型和字符类型不相等,如1与"1",一个是数字,一个是字符,

#include <stdio.h>
int main()
{
    char c;
    char d;
    c = 1;
    d = '1';//将字符赋值给一个char变量
    if (c == d){
        printf("相等\n");
    }else{
        printf("不相等\n");
    }
    printf("c=%d\n",c);
    printf("d=%d\n",d);
    return 0;
}
//结果:不相等!

作为一个整数,c的输出值为1,d的输出值为49。计算机中用49来表达字符1。每一个字符在计算机中都有一个值来表达它(ASCII码)。同理,在使用scanf时也是如此。

字符的输入输出

在scanf里输入'1'这个字符给char c:

scanf("%c",&c); -> 1,输入1得到49

scanf("%d",&i); c = i ; -> 49,需要输入49

#include <stdio.h>
int main()
{
    char c;
    scanf("c%",&c);//scanf将值传给c,以下面两种形式输出
    printf("c=%d\n",c);//以整数值是多少
    printf("d='%c'\n",c);//如果当做一个字符,它是多少,这里%c的''自己加上去的,这样结果显示时有''
    return 0;
}
//结果输入1,c=49,c='1'

以%d的输入情况下去读取,观察结果。scanf只能处理int,不能处理char,所以对上面代码进行了更改(不能把int类型转为char类型,但可以输入char)

#include <stdio.h>
int main()
{
    int i;
    char c;
    scanf("d%",&i);//%d是整型,int的数值不能转为字符
    c = i
    printf("c=%d\n",c);//以整数值是多少
    printf("d='%c'\n",c);//如果当做一个字符,它是多少,这里%c的''自己加上去的,这样结果显示时有''
    return 0;
}
//结果:输入给它1。c=1,d='';输入给它49。c=49,d='1'

这里整数49与'1'相等。

混合输入

  • 注意下面的不同(空格区别)
  • scanf("%d %c",&i,&c)
  • scanf("%d%c",&i,&c)

%c:从输入里读出一个字符

#include <stdio.h>
int main()
{
    int i
    char c;
    scanf("d% %c",&i,&c);//%d是整型,int的数值不能转为字符
    printf("i=%d",c=%d,c='%c'\n",i,c,c);
    return 0;
}
//输入12 1。i=12,c=49,c='1'
//输入12a。i=12,c=97,c='a'
//输入12  1。i=12,c=49,c='1'
//将scanf中换成"d%%c"
//输入12 1。i=12,c=32,c=' ',空格的ASCII就是32
//输入12a。i=12,c=97,c='a'
//输入12  1。i=12,c=32,c=' '

%d后面没有空格,整数只读到整数结束为止,后面的分配给后面;如果后面是有空格的,读到整数后还要把后面的空格都读到。也就是说在%c前加空格会跳过空白字符(空格、换行符)开始读取,不加空格会把空白字符也读取。

字符计算

既然字符是一种整数,当然可以做运算。

#include <stdio.h>
int main()
{
    char c = 'A'
    c++
    printf("%c\n",c);
    return 0;
}
//结果为B。c+=2会等到C
//做减法
//int i = 'Z' - 'A';
//printf("%d\n",i);
//结果为25
  • 一个字符加一个数字得到ASCII码表中那个数之后的字符
  • 两个字符的减法,得到它们在表中的距离
  • 字母在ASCII表中是顺序排列的
  • 大写字母和小写字母是分开排列的,并不在一起
  • 'a'-'A'可以得到两段之间的距离,A+'a'-'A'可以把一个大写字母变成小写字母,而a+'A'-'a'可以把一个小写字母变成大写字母

推荐阅读