Switch İfadelerinde Enum Kullanımı
Coddy'nin C Journey'sinin Logic & Flow bölümünün bir parçası — ders 57 / 63.
C programlamadaki en güçlü kombinasyonlardan biri, enum değerlerini switch ifadeleriyle birlikte kullanmaktır. Bu eşleşme, programınızın karar verme sürecini net bir şekilde ifade eden, olağanüstü derecede okunabilir ve bakımı kolay kontrol akışı mantığı oluşturur.
Bir switch ifadesinde enum sabitlerini case olarak kullandığınızda, kod kendi kendini belgeleyen bir hale gelir. case 0: veya case 5: gibi gizemli sayılar görmek yerine, amaçlarını anında ileten anlamlı isimler görürsünüz:
switch (day) {
case MONDAY:
case TUESDAY:
case WEDNESDAY:
case THURSDAY:
case FRIDAY:
printf("It's a weekday\n");
break;
case SATURDAY:
case SUNDAY:
printf("It's a weekend\n");
break;
}Bu yaklaşım, kodunuzun anlaşılmasını ve değiştirilmesini çok daha kolay hale getirir. Bu kodu okuyan herkes her bir durumun neyi temsil ettiğini anında anlar ve yeni durumlar eklemek veya mantığı değiştirmek basit hale gelir. Derleyici ayrıca hataları yakalamaya da yardımcı olur; bir enum sabitini yanlış yazarsanız, sessiz bir hata yerine bir derleme hatası alırsınız.
Görev
KolayBasit bir hava durumu danışma sistemi oluşturmak için switch ifadesiyle birlikte bir enum kullanan bir C programı oluşturun. Programınız şunları yapmalıdır:
- Aşağıdaki sabitleri tam olarak bu sırayla içeren
WeatherConditionadında birenumtanımlayın:SUNNYCLOUDYRAINYSTORMYSNOWY
- Şu özelliklere sahip
getWeatherAdviceadında bir fonksiyon yazın:weatheradında birenum WeatherConditionparametresi alır- Hiçbir şey döndürmez (void)
- Duruma göre hava durumuna özel tavsiyeler yazdırmak için bir
switchifadesi kullanır:SUNNYiçin:Perfect day for outdoor activities!yazdırınCLOUDYiçin:Good day for a walk, no sun protection needed.yazdırınRAINYiçin:Don't forget your umbrella!yazdırınSTORMYiçin:Stay indoors and avoid travel.yazdırınSNOWYiçin:Drive carefully and dress warmly.yazdırın
- Şu özelliklere sahip
getActivitySuggestionadında bir fonksiyon yazın:weatheradında birenum WeatherConditionparametresi alır- Hiçbir şey döndürmez (void)
- Hava durumuna göre aktiviteler önermek için bir
switchifadesi kullanır:SUNNYiçin:Suggested activity: Beach or hikingyazdırınCLOUDYiçin:Suggested activity: Photography or gardeningyazdırınRAINYiçin:Suggested activity: Reading or indoor gamesyazdırınSTORMYiçin:Suggested activity: Movie marathonyazdırınSNOWYiçin:Suggested activity: Skiing or hot cocoayazdırın
- Main fonksiyonu içinde:
currentWeatheradındaenum WeatherConditiontipinde bir değişken tanımlayın- Hava durumu koşulunu temsil eden bir tamsayıyı (0, 1, 2, 3 veya 4) girdiden okuyun
- Girdiye göre ilgili enum değerini
currentWeatherdeğişkenine atayın - Mevcut hava durumu koşulunu tam olarak şu formatta yazdırın:
Current weather: [numeric_value] currentWeatherilegetWeatherAdvicefonksiyonunu çağırıncurrentWeatherilegetActivitySuggestionfonksiyonunu çağırın
Bu zorluk, okunabilir ve bakımı kolay kod oluşturmak için enum'ları switch ifadeleriyle birleştirmenin gücünü göstermektedir. Switch ifadelerinizde kafa karıştırıcı sayısal durumlar kullanmak yerine, programın mantığını açıkça ifade eden anlamlı enum sabitleri kullanacaksınız. Switch ifadesi kendi kendini belgeleyen bir hale gelerek, her bir durumun neyi temsil ettiğini anlamayı ve gerektiğinde davranışı değiştirmeyi kolaylaştırır.
Kopya kağıdı
enum değerlerini switch ifadeleriyle kullanmak, okunabilir ve sürdürülebilir kontrol akışı mantığı oluşturur:
switch (day) {
case MONDAY:
case TUESDAY:
case WEDNESDAY:
case THURSDAY:
case FRIDAY:
printf("It's a weekday\n");
break;
case SATURDAY:
case SUNDAY:
printf("It's a weekend\n");
break;
}Bu yaklaşım, case 0: veya case 5: gibi gizemli sayılar yerine anlamlı isimler kullanarak kodun kendi kendini belgelemesini sağlar. Derleyici, yanlış yazılmış enum sabitleri için sessiz hatalar yerine derleme hataları oluşturarak hataların yakalanmasına yardımcı olur.
Kendin dene
#include <stdio.h>
// TODO: WeatherCondition enum yapısını burada tanımlayın
// TODO: getWeatherAdvice fonksiyonunu burada uygulayın
// TODO: getActivitySuggestion fonksiyonunu burada uygulayın
int main() {
// Girdiyi oku
int weatherInput;
scanf("%d", &weatherInput);
// TODO: currentWeather değişkenini bildirin ve girdiye göre enum değerini atayın
// TODO: Mevcut hava durumunu "Current weather: [numeric_value]" formatında yazdırın
// TODO: getWeatherAdvice fonksiyonunu çağırın
// TODO: getActivitySuggestion fonksiyonunu çağırın
return 0;
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Logic & Flow 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ı