お疲れ様です。サンチョです!
今回は文字を扱う変数についてご紹介します。
文字はchar型変数で扱う
文字を代入する変数はchar型で定義します。
まずはサンプルをコピペして感覚をつかんでください。
#include<stdio.h>
int main() {
char moji = 'A';
printf("文字は %c です\n", moji);
}
※これを実行すると「文字は A です」と表示されます。
代入する文字はシングルクォーテーション(’)で囲んでください。
尚、文字を表示する際の変換指定子は「%c」です。
変換指定子を「%d」にしたらどうなるの?
試しにサンプルの「%c」を「%d」に書き換えると「65」と表示されます。
この数値は「10進数で表現された文字コード(ASCIIコード)」です。
すべての文字は文字コードという数字の組み合わせで定義されているので、
「%d」なら10進数、「%c」なら文字として表示されるんですね。
次のサンプルを実行してみると、より実感できると思います。
#include<stdio.h>
int main() {
int num = 65;
printf("数字 %d は文字だと %c です\n", num, num);
}
※これを実行すると「数字 65 は文字だと B です」と表示されます。
もとが数値ということなので、次のような計算式も作れちゃいます。
#include<stdio.h>
int main() {
char moji = 'A';
printf("文字は %c です\n", moji + 1);
}
※これを実行すると「文字は B です」と表示されます。
文字コードは「A」が「65」、「B」が「66」と定義されているので
「A + 1」とすると「B」になります。
文字列はchar型の配列で扱う
文字列とは、簡単にいうと「Hello」というような文字のまとまりのことです。
実はchar型の変数には1文字しか代入することができないので
文字列を扱いたい場合は、char型の配列を用意する必要があります。
#include<stdio.h>
int main() {
char mojiretsu[6] = { 'H','e','l','l','o','\0' };
printf("文字列は %s です\n", mojiretsu);
}
※これを実行すると「文字列は Hello です」と表示されます。
EOS(終端文字)
サンプルをみると「\0」って何?と思いますよね。
これはEOS(End Of String)と呼ばれるもので、文字列の終わりを表しています。
日本語に直訳すると終端文字ですね。
サンプルで扱っている文字列は「Hello」なので5文字ですが、
終端文字を入れるために、配列の要素数は6を指定しています。
もし配列の要素数が5で、終端文字がなかったらどうなるか?
次のサンプルで確認してみてください。
#include<stdio.h> int main() { char mojiretsu[5] = { 'H','e','l','l','o'}; printf("文字列は %s です\n", mojiretsu); }
※これを実行すると私の環境では「文字列は Helloフフフフフフフ・D侒 です」と表示されました。
printf関数はEOSをみて文字の終わりを判断するので、
EOSが無いとこうなっちゃうんですね。
因みに、配列の要素数が6のときに「\0」を省略した場合、
空いている部分が「\0」で穴埋めされるので正しく表示されます。
文字列の代入はダブルクォーテーション(””)囲んでもOK
文字列をダブルクォーテーションで囲んで代入することも可能です。
おそらくはこちらの方が使いやすいと思います。
#include<stdio.h>
int main() {
char mojiretsu[6] = "Hello";
printf("文字列は %s です\n", mojiretsu);
}
この場合も、EOSが入るよう配列の要素数に気を付けてください。
まとめ
今回はchar型の変数について触れていきました。
簡単にまとめると以下のとおりです。
・char型には文字を代入できる。ただし1文字だけ。
・文字は文字コードで定義されているので、数値で表示することもできる。
・文字列はchar型の配列で持つことができる。
・EOS(終端文字)がないと表示した際に「フフフフ…」となるので注意。
次回は関数の作り方に触れていきます。
お疲れ様でした!
コメント