列挙体
#include<stdio.h> #define putsa(str) (putchar('\a'),puts(str)) enum animal {Dog,Cat,Monkey,Invalid}; void dog(void){ puts("わんわん"); } void cat(void){ puts("にゃんにゃん"); } void monkey(void){ puts("きっきっ"); } enum animal select(void){ int tmp; do{ printf("0… 犬 1… 猫 2… 猿 3… 終了:"); scanf("%d",&tmp); if(tmp<Dog || tmp>Invalid){ putsa("不正な入力です。"); } }while(tmp<Dog || tmp>Invalid); return tmp; } int main(void){ enum animal selected; do{ switch(selected = select()){ case Dog: dog(); break; case Cat: cat(); break; case Monkey: monkey(); break; } }while(selected != Invalid); return 0; }
enum animal {Dog,Cat,Monkey,Invalid};
この部分は、列挙体の宣言。その列挙体に与える識別子であるanimalをタグと呼ぶ。
{}の中にかかれた、Dog,Cat,Monkey,Invalidは列挙定数で、それぞれの列挙定数には、先頭から順に0,1,2,3という整数値が与えられる。
enum animal型は、その値の集合を表す型になる。
enum animal selected;
この部分は、enum animal型をもつ変数selectedの宣言。
この宣言によって、selectedは,0,1,2,3という値をもち得る変数となる。