列挙体をつかって文字を数値のようにあつかってみましょう。

ソーラー「共用体はとりあえず・・・おいとこ(*´▽`*)😝」


アレサ「そうですの・・・次は・・・」


ソーラー「お次はなにかな・・・」






アレサ「ソーラーさんのお料理教室 スペイン編です」


ソーラー「はい、🌞それでは みなさ~ん


お喜びください


お料理教室 スペイン編の開始です」


アレサ

「int型の変数aには整数値(定数)を


格納することができました。


同様に

float型の変数bには実数(定数)を


格納することができました。」


ソーラー「スペイン編んんんんんんんんんんんんんn\(^o^)/」


ソーラー「ここで


定数とは 


ある固定された一定の数値データ(5や7.77)のことを指しています


具体的には


int a=1;

では aが変数で、数値1が定数となります」



アレサ


「そして今回取り上げる


列挙体では、文字をあたかも整数や実数の定数のように


扱うことができるようになります


aをint型の変数とすると


a=1;


のように


変数aに数値1を代入しコンピュータのメモリに格納できます


そうしてから この数値1を


さまざまな命令文に使用することができました


これと同様に


文字を


そのまま列挙体変数に


列挙体変数=文字;



列挙体変数に格納し


さまざまな命令文に使用することができるようになります。


そうすることで


列挙体変数をつかったプログラムが構成できるようになります」


ソーラー 「文字を整数や実数のように、


列挙体変数に格納してプログラムをつくる?


文字を変数に格納して数値のようにあつかえるようになる?


かな?」


アレサ「はいっ


変数aに定数である数値1が格納できたように


列挙体宣言後

列挙体変数宣言をおこない


列挙体変数に数値でなく文字を定数として代入することができます。


ここでは


列挙体を作製し 


Orange

Apple

Lemon を 


数値のような定数として 


列挙体変数に格納


Orange

Apple

Lemon をつかって


プログラムを構成してみます。」


ソーラー 「???


列挙体を作製すれば


Orange

Apple

Lemon


を定数として列挙体変数に代入できるんだっっ


て どういうこと~~~?」


アレサ「はい😊


まず、はじめに


文字を定数として扱うことのできる列挙体を


次のような命令文で 列挙体宣言をおこない作製します。



列挙体宣言


enum 列挙体名{定数にしたい文字、定数にしたい文字、定数にしたい文


字、・・・・・};



ソーラー「定数にしたい文字が・・・


お経のように並んでるよ・・・


お盆がちかいからねぇ


もう、そんな季節か・・・」


アレサ「定数にしたい文字は この列挙体宣言の{}内に


記述します。


いくらでも好きな文字を定数にすることができます


それでは 


列挙体名を  Fruitsとし


Fruitsの列挙体宣言をおこない


Orange

Apple

Lemon


を列挙体 Fruitsに文字定数として


格納してみます



Fruitsの列挙体宣言 は


enum Fruits{Orange, Apple, Lemon };


となります


アレサ「こうしてできた 


列挙体の


列挙体名enum Fruitsも


typedefを用い


typedef enum Fruits{Orange, Apple, Lemon } Fruits;


と記述することによって


enum FruitsからFruitsに短縮変更することができます。」


ソーラー「これで列挙体Fruitsを作製し


さらに


数値のように列挙体変数に代入できる


文字定数 

Orange

Apple

Lemon


を作製することができたわけだ


では 列挙体変数ってどうなってるのかな?」


アレサ「はい、ソーラーさん


int a=1;

で例えると


intの型に数値1を格納するには変数aが必要なように


列挙体Fruitsの型に文字定数Lemonを格納するには


文字定数Lemonを代入する変数(列挙体変数)が必要です。


そういえば、構造体では数値データを格納するのに


構造体変数が必要でした、ね。


そこで


列挙体宣言を行い 列挙体Fruitsを作製したら


次は


文字定数を格納する変数(列挙体変数)を


列挙体変数宣言を行うことにより作製します。


ここでは fruitsを列挙体変数にしましょう。


fruitsの列挙体変数宣言

Fruits fruits;


これでFruitsの列挙体宣言により


文字定数となった 

Orange

Apple

Lemon


列挙体Furits型の列挙体変数fruitsに格納することができます。」


アレサ


「それでは、


実際に列挙体をつかったプログラムを一緒にみていきましょう。


#include<stdio.h>


typedef enum Fruits{Orange, Apple, Lemon }Fruits;


int main(void){


Fruits fruits;

fruits=Lemon ;

/*列挙体変数 fruitsにLemonを代入しました*/


switch(fruits){


case Orange: printf("オレンジ色です。");break;

case Apple: printf("りんご色です。");break;

case Lemon: printf("レモン色です。");break;

}

return 0;

}


コンパイル結果

レモン色です。


ソーラー「ふっふふ


列挙体変数fruitsにLemonを代入したら


switch文のcase Lemon:


が選ばれて


レモン色です が表示された。


ダイレクトだね~」


アレサ「このプログラムを


列挙体を使わないプログラムで表現してみると


#include<stdio.h>


int main(void){


int a=2;


switch(a){


case 0: printf("オレンジ色です。\n");break;

case 1: printf("りんご色です。\n");break;

case 2: printf("レモン色です。\n");break;

}

return 0;

}


コンパイル結果


レモン色です


となります。


つまり


先程は


直接Lemonを代入して


コンパイル結果


レモン色です


を表示していたものが


数値2を代入して


コンパイル結果


レモン色です


を表現したということになりますの。



もうすこしプログラムを変形して


変数名をaからlemonに変形しても・・・」



🍋🍋🍋

#include<stdio.h>


int main(void){


int lemon=2;


switch(lemon){


case 0: printf("オレンジ色です。\n");break;

case 1: printf("りんご色です。\n");break;

case 2: printf("レモン色です。\n");break;

}

return 0;

}


コンパイル結果


レモン色です

🍋🍋🍋




アレサ


「🍋🍋🍋内のプログラムも


case 2:を選ぶために


変数lemonに数値2を代入しています


変数名がlemonであっても


数値2をつかっていることに変わりはなく


直接、文字定数Lemonをつかって


case Lemon:

を選ぶというように


Lemonのケースをえらんでいるわけではないのですね。


構造的には


数値2をつかって


コンパイル結果


レモン色です


を表現したということにかわりはありません。」



ソーラー「Lemonを列挙体変数fruitsに直接代入して


switch文のケース選択をおこない


レモン色です


をprintf出力表示する


このような直接的でわかりやすい方法が


列挙体をつかえば可能になるんだね。


確かに


switch文では

case Orange: printf("オレンジ色です。");break;

case Apple: printf("りんご色です。");break;

case Lemon: printf("レモン色です。");break;


と記述されていた方が


case 0: printf("オレンジ色です。\n");break;

case 1: printf("りんご色です。\n");break;

case 2: printf("レモン色です。\n");break;」


と記されているより


printf("レモン色です。");break;を選びやすいよね。


レモン色です。


を表示したいと思ったら


case 2:でなく



case Lemon:


を選べばいいからね」











  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます