Enum の宣言と使用
CoddyのCジャーニー「Logic & Flow」セクションの一部 — レッスン 56/63。
これで、enumを定義したので、その列挙型の変数を作成し、意味のある値を割り当てることができます。これが列挙型の真価を発揮する場面です。紛らわしい数字を扱う代わりに、わかりやすい名前を使用します。
enum型の変数を宣言するには、他の変数を宣言するのと同じ構文を使用します。
enum DayOfWeek today;
enum DayOfWeek weekend_day;その後、列挙型(enum)の名前付き定数を使用して、これらの変数に値を代入することができます。
today = WEDNESDAY;
weekend_day = SATURDAY;これを生の数値を使う場合と比較してみましょう:today = 2; や weekend_day = 5;。列挙型(enum)を使用すると、どの曜日を扱っているかがすぐにわかりますが、数値の場合はそれぞれの値が何を表しているかを覚えておく必要があります。これにより、コードの可読性が大幅に向上し、エラーが発生しにくくなります。
チャレンジ
簡単シンプルなタスク管理システムのために、列挙型(enum)変数の宣言と使用方法を示すCプログラムを作成してください。プログラムは以下の要件を満たす必要があります:
TaskStatusという名前のenumを定義し、以下の定数をこの通りの順序で含めます:PENDINGIN_PROGRESSCOMPLETEDCANCELLED
- main関数内で:
enum TaskStatus型の3つの変数task1、task2、task3を宣言します。- 各タスクのステータスを表す3つの整数(0、1、2、または3)を入力から読み取ります。
- 入力に基づいて、対応する列挙型の値を各タスク変数に代入します:
- 入力が0の場合、
PENDINGを代入します。 - 入力が1の場合、
IN_PROGRESSを代入します。 - 入力が2の場合、
COMPLETEDを代入します。 - 入力が3の場合、
CANCELLEDを代入します。
- 入力が0の場合、
- 列挙型の値を使用して、各タスクのステータスを以下の形式で出力します:
"Task 1 status: %d\n""Task 2 status: %d\n""Task 3 status: %d\n"
- 各ステータスカテゴリにいくつのタスクがあるかをカウントして出力します:
"Pending tasks: %d\n""In progress tasks: %d\n""Completed tasks: %d\n""Cancelled tasks: %d\n"
- アクティブなタスク(
PENDINGまたはIN_PROGRESSのいずれかであるタスク)の総数を計算し、次の形式で出力します:"Active tasks: %d\n"
このチャレンジでは、生の数値の代わりに意味のある名前を使用することで、列挙型変数がどのようにコードの可読性を高めるかを学びます。列挙型変数の宣言、入力に基づいた列挙型の値の代入、比較における列挙型定数の使用、および列挙型の値を用いた計算を練習します。
チートシート
enum型の変数を宣言するには、他の変数を宣言するのと同じ構文を使用します:
enum DayOfWeek today;
enum DayOfWeek weekend_day;enumの列挙定数を使用して、enum変数に値を代入します:
today = WEDNESDAY;
weekend_day = SATURDAY;生の数値の代わりにenum名を使用することで、コードの可読性が向上し、エラーが発生しにくくなります。today = WEDNESDAY; と today = 2; を比較してみてください。enum版では、どの曜日を扱っているかがすぐにわかります。
自分で試してみよう
#include <stdio.h>
// TODO: ここで TaskStatus 列挙型を定義する
int main() {
// 3つのタスクステータスの入力を読み込む
int status1, status2, status3;
scanf("%d", &status1);
scanf("%d", &status2);
scanf("%d", &status3);
// TODO: 3つの enum TaskStatus 変数 (task1, task2, task3) を宣言する
// TODO: 入力に基づいて列挙型の値を割り当てる
// TODO: タスクのステータスを表示する
// TODO: 各カテゴリのタスクをカウントする
// TODO: アクティブなタスクの数を計算して表示する
return 0;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Logic & Flowのすべてのレッスン
10Enum と typedef
名前付き定数のための EnumEnum の宣言と使用switch 文での Enum の利用型エイリアスのための typedef の使用構造体での typedefまとめ:typedef と Enum の演習