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'可以把一個小寫字母變成大寫字母