はじめに
こんにちは。ぐぅです。
今回は C 言語を学ぶ上で知っておかなければいけない知識の 1 つ、 ASCII コードについてのエピソードをまとめました。
研修を進めていたある日、 ASCII コードというものに出会いました。
説明 「数字、アルファベット、記号などを整数で表したもの」
ぐぅ 「ふ~ん…」
初めて ASCII コードについて知った時はこのような印象しか持ちませんでした。
しかし、実は ASCII コードはとても大切だということが後日分かりました。
次の問題を考えてみてください。
【問題】 char 型で定義した変数 num にある整数を代入し、 printf ( “ %d ” ); で出力せよ。
ただし、出力した値と入力した値が同じになるようにする。
※ヒント: num から ‘ 0 ’ を引く。
イマイチよく分からないので、とりあえず下記のプログラムを作ってみました。
#include <stdio.h>
int main(void)
{
char num; // char型の変数 num を定義
printf (“ 整数を入力してください ”); //コマンドラインから整数を入力
num = getchar ( ); //入力した整数を num に代入
printf ( “ num : %d ” , num ); // 10進数で num を表示
return 0;
}
プログラムができたので、コンパイルして実行!
試しにキーボードから 1 を入力してみました。
さて、どんな値が出力されるでしょうか??
----------------------------------------------------- 出力結果
-----------------------------------------------------
ぐぅ「???????????」
なぜ 1 ではなく、 49 という数字が出力されたのか…?
一気にパニックに陥りました。
解説
今回のポイントは、 getchar( ) で「 1 」を入力し printf ( “ %d ” ); で出力したということです。
getchar( ) で入力されたものを出力するときは、一般的には printf ( “ %c ” ); を使用します。
%c は入力された値(文字)を文字として出力します。
しかし今回の問題では出力として printf ( “ %d ” ); を使用しなければいけません。
%d は入力された値を 10 進数表示(数字)で出力します。
つまり…
下記のプログラムで「 1 」を入力すると、文字として「 1 」が出力されます。
#include <stdio.h>
int main(void)
{
char num; // char型の変数 num を定義
printf (“ 整数を入力してください ”); //コマンドラインから整数を入力
num = getchar(); //入力した整数を num に代入
printf ( “ num : %c ” , num ); // 文字として num を表示
return 0;
}
今回の問題ではgetchar( ) で「 1 」を入力し、 printf ( “ %d ” ); を使って10 進数で出力しました。
入力と出力の形式が異なるため、入力した値と出力した値が一致しなかったのです。
ぐぅ 「でも、どうして 1 を入力したら 49 が出力されたの?」
ここで登場するのが ASCII コードです。
が!!
今回はここまで。
次回のぐぅのブログでは「なぜ 49 が出力されたのか」その理由を明らかにします!
お楽しみに (^^)
まとめ
getchar( ) を通してchar 型の変数に数字を代入する場合、「文字」として扱われる。
文字として入力したものを printf ( “ %d ” ); で出力すると、入力値と出力値が一致しない
ぐぅのつぶやき
入出力の形式についてよく分かっていなかったけど、とても大切なことだったんだなぁ。
今後は意識してコードを見るようにしよう!
次回への架け橋
ASCII コード表を見てみよう!ASCII コード表はこちら (^o^)