Nodachisoft Nodachi Sword Icon
  
@あまじ✎ 2018年6月20日に更新

第2章04 char型変数を使って1文字表示して計算する

イチからゲーム作りで覚えるC言語
第2章03 変数を使ったレベルや体力など表示する : PREV
NEXT : 第2章05 文字列変数の宣言、初期化と表示 :

この記事でやること

前回はプロジェクト「0020_keisan」のソースコードを使って、int型とfloat型の変数の宣言や初期化の方法、足し算を計算するプログラムを書きました。

今回は、別の代表的な変数である char 型についてみていきましょう。どちらの変数もゲーム制作に限らずどんなプログラムを組んでも頻繁にお世話になるかと思います。 bool 型は後ほど条件文をお話しした後に書きますので、ここでは放置しておきたいです。

この記事は前回のつづきですので、前回を読んでる前提で書いてます。

新しい char 型変数を使ったプログラム

ではでは char 型を取り扱うサンプルのプログラムを作成していきましょう。 プロジェクト「0030moji」を新しく用意して、プロジェクトに空の「Moji.c」を追加し、下のソースコードをコピペして動かしてみましょう。 プロジェクトの新規作成は[過去の記事](/blog/201806howtoaddnewprojectto_visualstudio/)をご参照ください。

 
Moji.c
#include <stdio.h>;
int main( void )
{
 char lunch = 'A';
 printf("ぷらんく:お金がないのでお昼は %c ランチにします\n", lunch);
 printf("店のオヤジ:まいど!%c ランチは「小麦スープ」だぜ!\n" ,lunch);
 lunch = lunch + 2;
 printf("ぷらんく:えっ、言い間違えました、%c ランチでした\n", lunch);
 printf("店のオヤジ:・・・\n");
}

実行すると、下のような結果になったと思います。

Moji.c
ぷらんく:お金がないのでお昼は格安 A ランチにします
店のオヤジ:まいど!A ランチは「小麦スープ」だぜ!
ぷらんく:えっ、言い間違えました、C ランチでした
店のオヤジ:・・・

では一行づつ見ていきましょう。

char型への値の代入

4行目で、char 変数名 = 変数に設定する値; という書き方が登場します。

前回、「int 変数名 = 整数;」 という似たようなプログラムを書きました。 ちなみに、4行目は下の2行に分解できます。

分解前
 char lunch = 'A';
分解後
 char lunch;
 lunch = 'A';

分解後で見たほうが、一行の意味はシンプルでわかりやすいですね。

char lunch; ですが、この lunch は char型の変数で宣言 されており、 以降、char型にあった数値やら文字やらを入力できる、という意味になります。

そして、lunch = 'A'; ですが、 変数 lunch に1文字だけ「A」を入力する、という意味になります。

変数lunchに'A'を代入

実際には英文字や数字、一部記号なども数字(もっといえば 0 と 1 の組み合わせ)でメモリ等の中で管理されており、 「'A'」という書き方は文字「A」をコンピュータが取り扱うための整数に変換して、変数lunch に入力してね。という意味になります。

英文字・数字・記号 ⇔ 整数の変換表は「ASCIIコード表」と呼ばれ、C言語以外のコンピュータ全般で今でも非常に広く使われています。 この記事の末尾にASCIIコード表を書いておきますね。

このASCIIコード表をみてもらうと、A という英字 1文字は整数の「65」に変換されます。 つまりコンピュータ上では A という英字は実際には 65 という数字で扱われてるという意味です。

これは最初から lunch に整数 65 を入力しても、同じ結果になるということです。

実際に次の行に書き換えて見てください。同じ結果になったかと思います。なるといいな。

char lunch = 65;

日本語の扱い

さきほどの4行目で、char型は1文字を入れることができるとお話したかと思います。 もし、上のソースコードで char 型に 'あ' とか試した方は、ただしく画面上に文字がでなかったかと思います。 「・」みたいな感じで文字がうまく表示されていません。正しい数字 ⇔ 日本語文字が変換できず、文字化けという現象が起こってしまっています。

Moji.cでcharに日本語を入れたときの実行結果
ぷらんく:お金がないのでお昼は格安 ・ ランチにします

じつは日本語の一文字はプログラム上、2文字だったり3文字だったりで取り扱われるような仕組みとなっています。確実に1文字として入るのは ASCIIコード表に書いてある、英文字や数字、記号などです。

詳しい話は別の機会にするとして、簡単にお話すると、 char型は 0~255 の整数しかもてない作りになっています。日本語は種類もおおくて、この整数の種類だけでは表現できないのです。ですので、 char を複数個使って一文字を表現することになっています。

そして、 char = 'あ' とか書いてしまうと、1文字に入りきらずに溢れてしまい、結果としてうまく表示できないことになってしまいます。

ちゃんと日本語を扱うための方法がありますので、次の記事で、日本語を表示するときの変数への代入方法をかきますね。

printf 関数で1文字を表示する

次の行にすすみます。

 
Moji.c
 printf("ぷらんく:お金がないのでお昼は %c ランチにします\n", lunch);
 printf("店のオヤジ:まいど!%c ランチは「小麦スープ」だぜ!\n" ,lunch);

実際にプログラムを動かした方であれば、新しくでてきた「%c」の役割はなんとなく想像がついているかもしれませんが、「%c」は整数をASCIIコード表上の1文字に変換して表示する変換指定子となります。

以前は整数を %d 、浮動小数点数(小数)を %f で表示していたかと思います。その種類の一つとなります。

ワンポイント

%c の c は Character(訳:文字)の頭文字だと思います。 英単語と結びつけると覚えやすいですね。よく使うものだけでも覚えておくと便利だとは思います。

char型で計算

次の行にすすみます。 実際にゲームプログラミングでこんなプログラムを書いたらわかりずらいので、ここのプログラムはあくまで仕組みを理解するためのものです。

 
Moji.c
 lunch = lunch + 2;

この行は見ての通り足し算の計算をしています。 でも計算に独特のルールがあるので、基本を覚える必要があります。

右辺の計算結果が左辺の変数に代入される ので、まず右辺を見てみましょう。

「lunch + 2」とあります。変数 lunch にはこの時点で 'A' が代入されていましたね。

'A' というのは整数の 65 です。

つまり変数 lunch には整数 65 が入っているので右辺は「65 + 2」となり、足し算の結果「67」となります。ここで、右辺の結果を踏まえてみると、 lunch = 67; をしていることになります。

この行は「変数 lunch に 2 を足す」という処理をしたことになります。

char型で整数を計算した結果の表示

次の行で char 型で整数の計算をした結果を表示しています。

やっているのは、5~6行目と同じです。

 
Moji.c
 printf("ぷらんく:えっ、言い間違えました、%c ランチでした\n", lunch);

結果は C ランチになってましたでしょうか。

この時点で変数 lunch には整数 67 が入っています。 「%c」で1文字を表示するとき、整数 67 に相当する文字を ASCII コード表のルールに従って表示しています。

ASCII コード表のルールでは整数 67 は文字「C」になるため、このような結果になったのでした。

あとがき

今回はここまで。お疲れさまでした。

次回は日本語の文章(文字列)を変数として宣言したり使ってみたり、をお話したいと思います。

ASCIIコード表

ASCIIコード表 ASCIIコード表

このASCIIコード表ですが、0~126の整数と変換される文字・記号・数字などを表しています。0~31までは 制御文字と呼ばれるもので、たとえば整数の 7 は「ベルを鳴らす」という特殊文字をつかったプログラムはこんな感じです。

 
ベルを鳴らすよ.c
char tokusyumoji=7;
printf("特殊文字を表示してみよー!文字=「%c」", tokusyumoji);

実行しても画面上に文字の中身はでないとおもいます。でも、動かす環境によっては「ぴーーッ!」とか、なにやら、パソコンからまずそうな音が鳴ったかもしれません。

特殊文字はそれぞれ、特別な条件や特殊なデータ、プログラム上で使うように設計されていたりします。このシリーズでは、制御文字は「0(NULL)」「10(改行コード)」「13(復帰コード)」くらいしか利用しないと思います。(実はすでにいままでのプログラムでも内部では使われていたり・・)

それ以外の特殊コードの詳細はここではご説明しませんが、ASCIIコード表自体は必要なときにこのページに立ち戻って確認できればよいな、と思っています。

あとがき

char型という一文字表示するための型についてお話しました。それだけでもだいぶ長くなってしまいました。

今回はここまで。お疲れさまでした。

非常に参考になったサイトさまや、参考文献など

ページの更新履歴

更新日 更新内容
更新なし
イチからゲーム作りで覚えるC言語
第2章03 変数を使ったレベルや体力など表示する : PREV
NEXT : 第2章05 文字列変数の宣言、初期化と表示 :
 
 
送信しました!

コメント、ありがとうございます。

なんかエラーでした

ごめんなさい。エラーでうまく送信できませんでした。ご迷惑をおかけします。しばらくおいてから再度送信を試していただくか、以下から DM などでご連絡頂ければと思います。

Twitter:@NodachiSoft_jp
お名前:
 
連絡先:
 
メッセージ:
 
戻る
内容の確認!

以下の内容でコメントを送信します。よろしければ、「送信」を押してください。修正する場合は「戻る」を押してください

お名前:
 
連絡先:
 
メッセージ:
 
Roboto からの操作ではないという確認のため確認キーを入れてください。
確認キー=95
戻る
 / 
送信確認へ
コメント欄
コメント送信確認へ

関連ありそうな記事(5件)です!

ゲーム等で使えるつなぎ目のないループするテクスチャ画像の作り方

#ツール#ゲームプログラミング✎ 2021-01-24
ゲームなどで使えるループ画像、パターンテクスチャのツール、手動での作り方をまとめ
広告領域
追従 広告領域
目次
第2章04 char型変数を使って1文字表示して計算する
第2章04 char型変数を使って1文字表示して計算する
この記事でやること
この記事でやること
新しい char 型変数を使ったプログラム
新しい char 型変数を使ったプログラム
char型への値の代入
char型への値の代入
日本語の扱い
日本語の扱い
printf 関数で1文字を表示する
printf 関数で1文字を表示する
char型で計算
char型で計算
char型で整数を計算した結果の表示
char型で整数を計算した結果の表示
あとがき
あとがき
ASCIIコード表
ASCIIコード表
あとがき
あとがき
非常に参考になったサイトさまや、参考文献など
非常に参考になったサイトさまや、参考文献など
ページの更新履歴
ページの更新履歴
Nodachisoft © 2020