Menu
Coddy logo textTech

İsimlendirilmiş Sabitler için enum

Coddy'nin C Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 55 / 63.

C programları yazarken, genellikle birbiriyle ilişkili sabit değer kümeleriyle çalışmanız gerekir. Örneğin, haftanın günlerini, yılın aylarını veya bir programdaki farklı durumları temsil etmeniz gerekebilir. 0, 1, 2 gibi ham sayılar kullanmak yerine, bu sabitler için anlamlı isimler oluşturmak üzere enum kullanabilirsiniz.

Numaralandırılmış bir tür veya enum, adlandırılmış tam sayı sabitlerinden oluşan bir grup tanımlamanıza olanak tanır. Bu, kodunuzu çok daha okunabilir ve bakımı daha kolay hale getirir. İşte temel sözdizimi:

enum DayOfWeek {
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
};

Varsayılan olarak, ilk isim 0 değerini alır, ikincisi 1 değerini alır ve bu şekilde devam eder. Böylece MONDAY 0'a, TUESDAY 1'e ve SUNDAY 6'ya eşittir. Bu yaklaşım, 0. günün Pazartesi veya 6. günün Pazar olduğunu hatırlamaktan çok daha nettir.

enum kullanmak, kodunuzu kendi kendini belgeleyen hale getirir ve programınız boyunca sihirli sayılar (magic numbers) kullanıldığında oluşabilecek hataları önlemeye yardımcı olur.

Numaralandırma türünde değişkenler tanımlayabilir ve bunlara numaralandırma değerleri atayabilirsin:

enum DayOfWeek today;
today = MONDAY;  // today'ye 0 atar
challenge icon

Görev

Kolay

Trafik ışığı renkleri için bir enum tanımlayan ve kullanımını gösteren bir C programı oluştur. Programın şunları yapması gerekir:

  1. Aşağıdaki sabitleri tam olarak bu sırayla içeren enum adlı bir TrafficLight tanımla:
    • RED
    • YELLOW
    • GREEN
  2. main fonksiyonunda:
    • enum TrafficLight türünde, currentLight adlı bir değişken tanımla
    • Trafik ışığının durumunu (0, 1 veya 2) temsil eden bir tamsayıyı girdiden oku
    • Girilen değere göre ilgili enum değerini currentLight değişkenine ata:
      • Girdi 0 ise RED ata
      • Girdi 1 ise YELLOW ata
      • Girdi 2 ise GREEN ata
    • Mevcut ışık durumunu tam olarak şu biçimde yazdır: Current light: [enum_name]
    • Mevcut ışığın sayısal değerini tam olarak şu biçimde yazdır: Numeric value: [number]
    • Mevcut ışığa göre eylemi belirle ve yazdır:
      • RED ise: Action: Stop yazdır
      • YELLOW ise: Action: Caution yazdır
      • GREEN ise: Action: Go yazdır
    • Sıradaki ışığı hesapla ve yazdır:
      • Mevcut ışık RED (0) ise sıradaki ışık GREEN (2) olur
      • Mevcut ışık YELLOW (1) ise sıradaki ışık RED (0) olur
      • Mevcut ışık GREEN (2) ise sıradaki ışık YELLOW (1) olur
    • Sıradaki ışığı tam olarak şu biçimde yazdır: Next light: [enum_name]

Bu görev, enum sabitlerinin kodu ham sayılar kullanmaya kıyasla nasıl daha okunabilir hâle getirdiğini gösterir. 0'ın kırmızı, 1'in sarı ve 2'nin yeşil anlamına geldiğini hatırlamak yerine, RED, YELLOW ve GREEN gibi anlamlı adlar kullanabilirsin. Bir enum tanımlama, atamalarda ve karşılaştırmalarda enum sabitlerini kullanma ve enum sabitlerinin temelindeki tamsayı değerlerine erişme pratiği yapacaksın.

Kendin dene

#include <stdio.h>

// TODO: Burada TrafficLight enum'ını tanımlayın

int main() {
    // Girdiyi oku
    int input;
    scanf("%d", &input);
    
    // TODO: currentLight değişkenini bildirin ve girdiye göre enum değerini atayın
    
    // TODO: Mevcut ışık durumunu yazdırın
    
    // TODO: Sayısal değeri yazdırın
    
    // TODO: Mevcut ışığa göre eylemi yazdırın
    
    // TODO: Bir sonraki ışığı hesaplayın ve yazdırın
    
    return 0;
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık & Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online C derleyicisi