C Programlama

Ek Bilgiler

C'de Numaralandırma (Enumeration)

C'de, belirli int sabitlerinin bir liste halinde karakter dizileri kullanarak tanımlanmasına yarayan numaralandırma kavramının genel yapısı aşağıda gösterildiği şekildedir:

enum etiket-adı {liste} değişken-listesi;

etiket-adı veya değişken-listesi ifadelerinden biri isteğe bağlı olarak tanımlanır. etiket-adı ifadesi numaralandırma işleminin adını gösterir. Numaralandırma değişkenleri sadece numaralandırma bildirimi içinde yer alan değerleri içerebilir. Bu özelliği aşağıdaki satır ile incelemeye çalışalım:

enum renk {mavi, turuncu, mor, siyah} e1;

Yukarıdaki satırda, e1 değişkenine sadece mavi, turuncu, mor ve siyah değerleri verilebilir. Normal olarak derleyici listedeki sabitlere en soldan başlamak suretiyle birer değer artırarak int değerler atar. En solda yer alan değere 0'dan başlayarak numara verilir. Yani burada mavi'ye 0, turuncu'ya 1, mor'a 2 ve siyah'a 3 değeri verilir. Numaralandırma yöntemi ile elde edilen değerler #define direktifi kullanarak da elde edilebilir:

#define mavi 0
#define turuncu 1
#define mor 2
#define siyah 3

Eğer isterseniz listedeki kelimelere kendi istediğiniz değerleri verebilirsiniz.

enum renk {mavi=3, turuncu, mor=7, siyah} e1;

Yukarıdaki satırda, mavi'ye 3, turuncu'ya 4, mor'a 7 ve siyah'a 8 değeri verilir.

Numaralandırma bir kez tanımlandıktan sonra programın herhangi bir yerinde e1 dışında bir değişken tanımlayabilirsiniz:

enum renk e2;

Şimdi, numaralandırma kavramını örneklerle incelemeye çalışalım:

#include <stdio.h>

enum renk {mavi, turuncu, mor};

void main (void)
{
  enum renk e1, e2, e3;

  e1 = mavi;
  e2 = turuncu;
  e3 = mor;

  printf("%d %d %d\n", e1, e2, e3);
  printf("%d %d %d", mavi, turuncu, mor);
}

Yukarıdaki örnekte, program aşağıdaki satırı ekrana yazar:

0 1 2
0 1 2

Program, renk çeşitlerini içeren 3 elemanlı ve renk adında bir numaralandırma bildirimi yapar. Bildirimden sonra tanımladığı e1, e2 ve e3 adlı numaralandırma değişkenlerine sıra ile numaralandırma elemanlarının değerlerini atar. Listede yer alan değerleri hem direk olarak hem de değişkenler yoluyla ekrana yazar.

#include <stdio.h>

enum renk {mavi=7, turuncu, mor=12};

void main (void)
{
  enum renk e1, e2, e3;

  e1 = mavi;
  e2 = turuncu;
  e3 = mor;

  printf("%d %d %d\n", e1, e2, e3);
  printf("%d %d %d", mavi, turuncu, mor);
}

Yukarıdaki örnekte, program aşağıdaki satırı ekrana yazar:

7 8 12
7 8 12

Program, bir önceki programın yaptığı işlemin aynısını gerçekleştirir. Tek farkı, numaralandırma elemanlarına verilen değerlerin otomatik olarak değil bildirim esnasında verilmiş olmasıdır.

#include <stdio.h>

enum meyve {Karpuz, Kavun, Kiraz, Erik} e1;

void main (void)
{
  printf("Bir sayı giriniz[0-3]: ");
  scanf("%d", &e1);

  switch (e1) {
    case Karpuz: printf("Karpuz");
       break;
    case Kiraz: printf("Kiraz");
       break;
    case Erik: printf("Erik");
       break;
    case Kavun: printf("Kavun");
  }
}

Yukarıdaki örnekte, program girdiğiniz sabit bir değerin atandığı numaralandırma elemanının adını ekrana yazar.