در این آموزش به کمک مثال های مختلف با نوع داده enum (enumeration) در برنامه نویسی C آشنا خواهید شد.
در برنامه نویسی C، نوع enum یا شمارشی نوعی داده تشکیل شده از ثابت های عددی است. برای تعریف آن از کلمه کلیدی enum استفاده می شود.
enum flag {const1, const2, …, constN};
به طور پیشفرض، const1 برابر با ۰، const2 برابر با ۱ و … است. می توانید این مقادیر پیشفرض را در هنگام تعریف داده شمارشی تغییر دهید (در صورت لزوم).
// enum تغییر مقادبر پیشفرض ثابت های
enum suit {
club = 0,
diamonds = 10,
hearts = 20,
spades = 3,
};
تعریف متغیر از نوع داده شمارشی یا enum
هنگام تعریف نوع enum، طرح اولیه برای متغیر ایجاد می شود. در کد زیر شیوه تعریف متغیر نوع enum نشان داده شده است.
enum boolean {false, true};
enum boolean check; // enum تعریف متغیر از نوع
در اینجا، متغیر check از نوع enum boolean ساخته شده است.
می توانید متغیرهای enum را به صورت زیر نیز تعریف کنید.
enum boolean {false, true} check;
در اینجا، مقدار false برابر با ۰ و مقدار true برابر با ۱ است.
مثال: نوع داده enum
#include <stdio.h>
enum week {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday};
int main()
{
// creating today variable of enum week type
enum week today;
today = Wednesday;
printf(“Day %d”,today+1);
return 0;
}
خروجی
Day 4
چرا از enum استفاده می شود؟
یک متغیر enum فقط می تواند یک مقدار بگیرد و این باعث می شود تا enum گزینه خوبی برای کار با پرچم ها (flag) باشد.
#include <stdio.h>
enum suit {
club = 0,
diamonds = 10,
hearts = 20,
spades = 3
} card;
int main()
{
card = club;
printf(“Size of enum variable = %d bytes”, sizeof(card));
return 0;
}
خروجی
Size of enum variable = 4 bytes
در خروجی ۴ نشان داده می شود زیرا اندازه int برابر با ۴ بایت است.
چگونه از enum برای پرچم ها استفاده می شود؟
با یک مثال بررسی می کنیم،
enum designFlags {
ITALICS = 1,
BOLD = 2,
UNDERLINE = 4
} button;
فرض کنید در حال طراحی یک دکمه برای برنامه ویندوز هستید. برای کار با متن می توانید پرچم های ITALICS، BOLD و UNDERLINE را تنظیم کنید. به همین دلیل تمام ثابت های عددی در شبه کد بالا، توانی از ۲ هستند.
// به صورت باینری
ITALICS = 00000001
BOLD = 00000010
UNDERLINE = 00000100
چون ثابت ها توانی از ۲ هستند می توانید دو یا چند پرچم را به طور همزمان با هم ترکیب کنید، بدون اینکه با هم تداخل داشته باشند. برای این کار دو یا چند پرچم را انتخاب کرده سپس با استفاده از عملگر OR بیتی (|) آنها را با هم ترکیب کنید. مثال،
#include <stdio.h>
enum designFlags {
BOLD = 1,
ITALICS = 2,
UNDERLINE = 4
};
int main() {
int myDesign = BOLD | UNDERLINE;
// ۰۰۰۰۰۰۰۱ | ۰۰۰۰۰۱۰۰
// ۰۰۰۰۰۱۰۱
printf(“%d”, myDesign);
return 0;
}
خروجی
۵
وقتی خروجی ۵ باشد می دانید که از bold و underline استفاده شده است.
علاوه بر این می توانید پرچم ها را با توجه به نیاز خود اضافه کنید.
if (myDesign & ITALICS) {
// ITALICS کد برای متن مورب یا
}
در اینجا حروف مورب به طراحی قبلی اضافه شده است. توجه داشته باشید، فقط کدهای ایتالیک در داخل دستور if نوشته می شود.
در بیشتر موارد، بدون استفاده از داده های شمارشی می توانید هر کاری در برنامه نویسی C انجام دهید. با این حال در شرایط خاص می توانند بسیار مفید باشند.