İ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 atarGörev
KolayTrafik ışığı renkleri için bir enum tanımlayan ve kullanımını gösteren bir C programı oluştur. Programın şunları yapması gerekir:
- Aşağıdaki sabitleri tam olarak bu sırayla içeren
enumadlı birTrafficLighttanımla:REDYELLOWGREEN
- main fonksiyonunda:
enum TrafficLighttüründe,currentLightadlı 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
currentLightdeğişkenine ata:- Girdi 0 ise
REData - Girdi 1 ise
YELLOWata - Girdi 2 ise
GREENata
- Girdi 0 ise
- 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:
REDise:Action: StopyazdırYELLOWise:Action: CautionyazdırGREENise:Action: Goyazdır
- Sıradaki ışığı hesapla ve yazdır:
- Mevcut ışık
RED(0) ise sıradaki ışıkGREEN(2) olur - Mevcut ışık
YELLOW(1) ise sıradaki ışıkRED(0) olur - Mevcut ışık
GREEN(2) ise sıradaki ışıkYELLOW(1) olur
- Mevcut ışık
- 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;
}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
1Pointer Temelleri
Pointer Nedir?Pointer TanımlamaAdres Operatörü (&)Dereference Operatörü (*)NULL Pointer'larÖzet: Pointer Temelleri4Proje: Basit Metin Aracı
Projeye Genel BakışKarakter Sayma7Yapılar (structs)
Struct Nedir?Struct TanımlamaStruct Değişkenleri OluşturmaStruct Üyelerine ErişmeStruct BaşlatmaÖzet: Öğrenci Verisi Struct'ı10Enum'lar ve Typedef
İsimlendirilmiş Sabitler için enumEnum Tanımlama ve KullanmaSwitch İfadelerinde Enum KullanımıTür Takma Adları için typedef KullanımıStruct'lar ile typedef KullanımıÖzet: Typedef ve Enum Pratiği2İşaretçiler ve Diziler
İşaretçi Olarak Dizi İsimleriDizi Elemanları - İşaretçilerİşaretçi Aritmetiğiİşaretçilerin KarşılaştırılmasıÖzet: İşaretçi ile Dizi Gezinme5İşaretçiler ve Fonksiyonlar
Değer ile GeçmeFonksiyonlara İşaretçi Göndermeİşaretçiler ile Değişkenleri DeğiştirmeKlasik Bir Örnek: SwapFonksiyonlara Dizi GöndermeÖzet: Fonksiyon İşaretçi Argümanları8Yapılar ve İşaretçiler
Yapılara İşaretçilerOk Operatörü (->)Yapıları Değer ile AktarmaYapı İşaretçilerini AktarmaYapıların Dinamik TahsisiÖzet: Yapıyı Değiştirme - Ptr11Son Tekrar Görevleri
Tekrar: Dinamik String BirleştirmeTekrar: Struct DizisiTekrar: Kelime Frekans Sayacı3Karakter Dizileri ve Stringler
char Dizisi Olarak StringlerNull Sonlandırıcıscanf ile String Girişistrlen() Kullanımıstrcpy() Kullanımıstrcat() Kullanımıstrcmp() KullanımıÖzet: Temel String FonksiyonlarıKendi başına pratik yap: Online C derleyicisi