列挙型

 RPGのキャラクターのステータス項目として、今まで出てきたものの他に「性別」というものがあります。「"男性"」「"女性"」の文字(もしくは文字列)で定義しても良いのですが、コンピュータのプログラム処理において、状態や選択肢が何個かしかないのであれば数値にして処理することを推奨されています。例えば、

  • 男性:0
  • 女性:1

 このように定義できるのであれば、そうした方が良いでしょう。しかし、プログラムを作る人(使う人)の目から見て「性別:1」と表示される(プログラムのソースコードに数値しか書かれていない)のでは、わかりにくいところがあります。そこで、enumという命令を用いれば、コンピュータが自動で男性と女性の数値を定義してくれます。このときに使うenumのことを列挙型と呼びます。

 以下のサンプルプログラムを作成し、実行してみて下さい。

#include <stdio.h>
#include <string.h>

enum genderType {MEN, WOMEN};

struct person {
    char name[40];          // 名前
    char job[40];           // 職業
    int lv;                 // レベル
    int hp;                 // HP
    int mp;                 // MP
    enum genderType gender;
};
typedef struct person character;

void showStatus(character chara) {
    printf("名前:%s\n", chara.name);
    printf("職業:%s\n", chara.job);
    printf("レベル:%d\n", chara.lv);
    printf("HP:%d\n", chara.hp);
    printf("MP:%d\n", chara.mp);
    if(chara.gender == MEN) {
        printf("性別:%d(男性)\n", chara.gender);
    } else {
        printf("性別:%d(女性)\n", chara.gender);
    }
}

int main(int argc, const char * argv[])
{
    
    // insert code here...
    
    // 戦士「ああああ」
    character aaaa;
    strcpy(aaaa.name, "ああああ");
    strcpy(aaaa.job, "戦士");
    aaaa.lv = 40;
    aaaa.hp = 360;
    aaaa.mp = 0;
    aaaa.gender = MEN;
    
    // 魔法使い「いいいい」
    character iiii;
    strcpy(iiii.name, "いいいい");
    strcpy(iiii.job, "魔法使い");
    iiii.lv = 38;
    iiii.hp = 250;
    iiii.mp = 230;
    iiii.gender = WOMEN;
    
    showStatus(aaaa);
    showStatus(iiii);
    
    return 0;
}

 以下のような結果が出力されます。

名前:ああああ
職業:戦士
レベル:40
HP:360
MP:0
性別:0(男性)
名前:いいいい
職業:魔法使い
レベル:38
HP:250
MP:230
性別:1(女性)

 enumの命令を使わなくとも、自信でdefine文を用いて

#define MEN 0
#define WOMEN 1

 と定義しても構いません。お好きな方法をお使い下さい。

 Tips:列挙型もtypedef宣言で別名をつけることが可能です。

■スポンサーリンク

このページの先頭へ