列挙体をつかって文字を数値のようにあつかってみましょう。
ソーラー「共用体はとりあえず・・・おいとこ(*´▽`*)😝」
アレサ「そうですの・・・次は・・・」
ソーラー「お次はなにかな・・・」
アレサ「ソーラーさんのお料理教室 スペイン編です」
ソーラー「はい、🌞それでは みなさ~ん
お喜びください
お料理教室 スペイン編の開始です」
アレサ
「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:
を選べばいいからね」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます