0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

この記事について

「C言語の基礎を学ぼう」をテーマに、自身の知識 + α をアドベントカレンダーにまとめます。
25日間でC言語をマスターしよう - Qiita Advent Calendar 2025 - Qiita

こんな方を対象としています

  • コンピュータがプログラムをどのように動かしているか知りたい/知らない方

  • プログラミングをしてみたい方

  • C言語初心者の方

キーワード

  • enum

  • typedef

説明

列挙型

プログラム内で意味を持つ数をいくつか利用したいとき、列挙型( enum )を利用します。

#include <stdio.h>

enum Item {
    APPLE,
    BANANA,
    COFFEE
};

int main(void) {
    enum Item a = APPLE;
    if (a == APPLE) {
        printf("りんごです。");
    }
    return 0;
}
りんごです。

enum Item は変数の型のように使用でき、中には APPLE 等を入れて管理することができます。

内部では enum の各要素にそれぞれ数が与えられています。

#include <stdio.h>

enum Item {
    APPLE,
    BANANA,
    COFFEE
};

int main(void) {
    printf("%d,%d,%d", APPLE, BANANA, COFFEE);
    return 0;
}
0,1,2

enum の宣言時には typedef をあわせて使用することが多いです。
typedef を使用して名前を付けることで、その後の enum を省略することができます。

#include <stdio.h>

typedef enum {
    APPLE,
    BANANA,
    COFFEE
} Item;

int main(void) {
    Item a = APPLE; // enumを省略可能
    return 0;
}

値の指定に注意

enum の宣言時に内部の値を指定することができます。

#include <stdio.h>

typedef enum {
    APPLE = 5,
    BANANA, // 直前の値 + 1 になる
    COFFEE = 9
} Item;

int main(void) {
    printf("%d,%d,%d", APPLE, BANANA, COFFEE);
    return 0;
}
5,6,9

適切な指定ではない場合、内部の値が重複することがあります。

#include <stdio.h>

typedef enum {
    APPLE = 5,
    BANANA,
    COFFEE = 6
} Item;

int main(void) {
    printf("%d,%d,%d", APPLE, BANANA, COFFEE);
    return 0;
}
5,6,6

この時は想定しない動作をするため注意が必要です。

#include <stdio.h>

typedef enum {
    APPLE = 5,
    BANANA,
    COFFEE = 6
} Item;

int main(void) {
    Item c = COFFEE;
    if (c == BANANA) {
        printf("ばななです。");
    }
    return 0;
}
ばななです。

練習

1. カラータイル

コンソールに制御文字を出力することで背景色を変更することができる。
背景色を変更してスペースを表示することでランダムなカラータイルを作成しよう。

カラータイル出力例

ポイント

コンソールの背景色を変更するには下記を出力します。

出力する値
\e[40m
\e[41m
\e[42m
\e[43m
\e[44m
マゼンタ \e[45m
シアン \e[46m
\e[47m
リセット \e[0m

下記参考にしました!( \x1b\e は同じです)
C言語で出力される文字の色や背景を変える。 #C言語入門 - Qiita

各色を列挙型で宣言しましょう。
うまく表示できない場合は、都度色をリセットするとうまくいくと思います。

解答例

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef enum {
    BLACK,
    RED,
    GREEN,
    YELLOW,
    BLUE,
    MAGENTA,
    CYAN,
    WHITE
} Color;
int main(void) {
    int i, j;
    srand((unsigned int)time(NULL));
    for (i = 0; i < 4; i++) {
        for (j = 0; j < 10; j++) {
            switch (rand() % 8) {
                case BLACK:   printf("\e[40m"); break;
                case RED:     printf("\e[41m"); break;
                case GREEN:   printf("\e[42m"); break;
                case YELLOW:  printf("\e[43m"); break;
                case BLUE:    printf("\e[44m"); break;
                case MAGENTA: printf("\e[45m"); break;
                case CYAN:    printf("\e[46m"); break;
                case WHITE:   printf("\e[47m"); break;
            }
            printf("  ");
        }
        printf("\e[0m\n");
    }
    return 0;
}

おわりに

列挙型を適切に利用することで、コメントの代わりになります。
他にも状態変化やエラーIDなどにも列挙型が使用できそうですね。

参考文献

↓↓↓ はじめてプログラミングを学んだときに読んだ本です ↓↓↓
詳細(プログラミング入門 C言語)|プログラミング|情報|実教出版

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?