はじめに

こんにちは。ぐぅです。

今回は 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^)