46章 列挙型 enum

http://www.geocities.jp/ky_webid/c/046.html

列挙型というものが登場しました。

ようは連番を簡単に定義できるもののようです。

列挙型をうまく使いこなせば、配列へのアクセスにおいて可読性をあげることができるようです。

確かに文字で定義されているほうが見た感じ分かりやすいですもんね。

問題1

列挙定数に負数が使えるかどうか確かめて下さい。

試すだけですね。やってみます。

enum eDATA {
    FOO=-1,
    BAR,
    BAZ,
};

int main (int argc, char *argv[]) {
    
    printf("%d\n",FOO);
    printf("%d\n",BAR);
    printf("%d\n",BAZ);
    
    return 0;
}
$ main
-1
0
1

負数でもちゃんと表示されてますね。

問題2

次の列挙型を使って、キーボードから入力された整数に対応する色を、文字として表示させるプログラムを作って下さい。

enum eCOLOR{ RED=20, BLUE, GREEN=5, WHITE=10, BLACK };

例えば、21が入力されたらBLUEという文字を表示します。該当する色がないときは、ERRORと表示します。

enum eCOLOR{ RED=20, BLUE, GREEN=5, WHITE=10, BLACK }; 

int main (int argc, char *argv[]) {
    enum eCOLOR color;
    int num;
    
    scanf("%d",&num);
    
    switch(num){
        case RED:
            puts("赤です。");
            break;
        case BLUE:
            puts("青です。");
            break;
        case GREEN:
            puts("緑です。");
            break;
        case WHITE:
            puts("白です。");
            break;
        case BLACK:
            puts("黒です。");
            break;
        default:
            puts("エラー");
            break;
    }
    
    return 0;
}
$ main
21
青です。

$ main
0
エラー

$ main
11
黒です。

できました。REDやBLUE等、数値じゃなくて定数で指定できるのが素晴らしいですね。凄く処理の意図がわかりやすくなりました。

答え合わせ

問題3

次の記号定数を、1つの列挙型に書き直して下さい。

#define NUM1 (10)
#define NUM2 (NUM1+1)
#define NUM3 (NUM1+2)
#define MAX (100)

面白そうです。さっそく解いてみます。

enum eLIST {
    NUM1=10,
    NUM2,
    NUM3,
    MAX=100
};

int main (int argc, char *argv[]) {
    
    printf("%d\n",NUM1);
    printf("%d\n",NUM2);
    printf("%d\n",NUM3);
    printf("%d\n",MAX);
    
    return 0;
}
$ main
10
11
12
100

できました。あってると思います。

答え合わせ

あってました。




今回は列挙型というものを覚えました。今後色々と活用できそうなのでどんどん使っていこうと思います。