C# Switch Case Kullanımı ve Örnekleri
C# programlama dilinde switch-case yapısı, bir değişkenin veya ifadenin değerine göre farklı işlemler gerçekleştirmek için kullanılan karar yapılarından biridir. Özellikle birden fazla seçeneğin kontrol edilmesi gereken durumlarda programın daha düzenli ve okunabilir olmasını sağlar.
Örneğin kullanıcıdan alınan bir sayıya göre haftanın gününü belirlemek, hesap makinesi oluşturmak, menü seçeneklerini kontrol etmek veya ay numarasına göre ay adını görüntülemek için switch-case yapısı kullanılabilir.
1. C# SWITCH CASE NEDİR?
Switch-case, bir ifadenin değerini belirli seçeneklerle karşılaştırarak uygun komutların çalıştırılmasını sağlayan bir karar yapısıdır.
Daha önce öğrendiğimiz if-else yapısında farklı koşullar kontrol edilirken switch-case yapısında genellikle bir ifadenin alabileceği belirli değerler değerlendirilir.
Switch-case yapısında kullanılan temel anahtar kelimeler şunlardır:
- switch: Kontrol edilecek ifadeyi belirtir.
- case: İfadenin eşleşebileceği değerleri tanımlar.
- break: İlgili case bloğundan çıkılmasını sağlar.
- default: Hiçbir case değeri eşleşmediğinde çalıştırılır.
2. SWITCH CASE YAPISININ SÖZ DİZİMİ
Switch-case yapısının genel kullanımı aşağıdaki gibidir.
switch (degisken)
{
case 1:
// Birinci durumun komutları
break;
case 2:
// İkinci durumun komutları
break;
case 3:
// Üçüncü durumun komutları
break;
default:
// Hiçbir durum eşleşmezse
break;
}
Program switch içerisindeki ifadeyi değerlendirir. İfadenin değeri hangi case ile eşleşirse o bölüme ait komutlar çalıştırılır.
Hiçbir case ile eşleşme gerçekleşmezse default bölümü çalışır.
3. SWITCH CASE İLE BASİT BİR ÖRNEK
Bir değişkenin değerine göre ekrana farklı mesajlar yazdıran basit bir uygulama hazırlayalım.
int secim = 2;
switch (secim)
{
case 1:
Console.WriteLine("Birinci seçenek");
break;
case 2:
Console.WriteLine("İkinci seçenek");
break;
case 3:
Console.WriteLine("Üçüncü seçenek");
break;
default:
Console.WriteLine("Geçersiz seçenek");
break;
}
Bu örnekte secim değişkeninin değeri 2 olduğu için program ikinci case bloğunu çalıştırır.
Ekran çıktısı: İkinci seçenek
4. SWITCH CASE İÇERİSİNDE BREAK KULLANIMI
break komutu, switch yapısında eşleşen case bölümünün işlemleri tamamlandıktan sonra switch bloğundan çıkılmasını sağlar.
C# dilinde normal bir case bloğundan sonraki case bloğuna doğrudan geçiş yapılmasına izin verilmez. Bu nedenle örneklerimizde her case bölümünü break komutuyla sonlandırıyoruz.
int sayi = 1;
switch (sayi)
{
case 1:
Console.WriteLine("Sayı 1");
break;
case 2:
Console.WriteLine("Sayı 2");
break;
}
Bu örnekte sayı 1 olduğu için yalnızca "Sayı 1" mesajı yazdırılır ve break komutuyla switch yapısından çıkılır.
Önemli: Birden fazla case etiketinin aynı komutları çalıştırması da mümkündür. Bu kullanımı ilerleyen bölümlerde inceleyeceğiz.
5. SWITCH CASE İÇERİSİNDE DEFAULT KULLANIMI
Default bölümü, switch içerisindeki ifadenin hiçbir case değeriyle eşleşmemesi durumunda çalışır.
Default kullanımı zorunlu değildir. Ancak kullanıcıdan veri alınan uygulamalarda beklenmeyen seçimleri kontrol etmek için kullanılması önerilir.
int secim = 8;
switch (secim)
{
case 1:
Console.WriteLine("Toplama");
break;
case 2:
Console.WriteLine("Çıkarma");
break;
default:
Console.WriteLine("Geçersiz seçim yaptınız.");
break;
}
Bu örnekte secim değişkeninin değeri 8 olduğu için hiçbir case eşleşmez ve default bölümü çalışır.
6. SWITCH CASE İLE BİRDEN FAZLA CASE KULLANIMI
Bazı durumlarda farklı değerler için aynı işlemin gerçekleştirilmesi gerekebilir. Böyle durumlarda birden fazla case etiketi aynı komut bloğunda kullanılabilir.
int gun = 6;
switch (gun)
{
case 1:
case 2:
case 3:
case 4:
case 5:
Console.WriteLine("Hafta içi");
break;
case 6:
case 7:
Console.WriteLine("Hafta sonu");
break;
default:
Console.WriteLine("Geçersiz gün");
break;
}
Bu örnekte 1 ile 5 arasındaki günler için "Hafta içi", 6 ve 7 değerleri için "Hafta sonu" mesajı görüntülenir.
7. SWITCH CASE İLE STRING DEĞERLERİN KULLANIMI
Switch-case yapısı yalnızca sayısal değerlerle kullanılmaz. String türündeki metinler de switch içerisinde kontrol edilebilir.
string renk = "kırmızı";
switch (renk)
{
case "kırmızı":
Console.WriteLine("Dur");
break;
case "sarı":
Console.WriteLine("Hazırlan");
break;
case "yeşil":
Console.WriteLine("Geç");
break;
default:
Console.WriteLine("Bilinmeyen renk");
break;
}
Bu örnekte renk değişkeninin değeri "kırmızı" olduğundan ekrana "Dur" mesajı yazdırılır.
Dikkat: String karşılaştırmaları varsayılan olarak büyük ve küçük harfe duyarlıdır. Örneğin "Kırmızı" ile "kırmızı" aynı metin olarak değerlendirilmez.
8. UYGULAMA 1: HAFTANIN GÜNLERİNİ BULMA
Kullanıcıdan 1 ile 7 arasında bir sayı alarak haftanın hangi gününe karşılık geldiğini belirleyen Console uygulaması hazırlayalım.
Console.Write("1-7 arasında bir sayı giriniz: ");
int gun = Convert.ToInt32(Console.ReadLine());
switch (gun)
{
case 1:
Console.WriteLine("Pazartesi");
break;
case 2:
Console.WriteLine("Salı");
break;
case 3:
Console.WriteLine("Çarşamba");
break;
case 4:
Console.WriteLine("Perşembe");
break;
case 5:
Console.WriteLine("Cuma");
break;
case 6:
Console.WriteLine("Cumartesi");
break;
case 7:
Console.WriteLine("Pazar");
break;
default:
Console.WriteLine("Geçersiz gün numarası.");
break;
}
Açıklama: Kullanıcıdan alınan sayı switch yapısı içerisinde kontrol edilir. Girilen sayı hangi case değeriyle eşleşirse ilgili günün adı ekrana yazdırılır.
Örnek: Kullanıcı 4 girerse sonuç "Perşembe" olacaktır.
9. UYGULAMA 2: SWITCH CASE İLE HESAP MAKİNESİ
Kullanıcıdan iki sayı ve yapılacak işlem türünü alarak dört temel matematiksel işlemi gerçekleştiren bir uygulama hazırlayalım.
Console.Write("Birinci sayı: ");
double sayi1 = Convert.ToDouble(Console.ReadLine());
Console.Write("İkinci sayı: ");
double sayi2 = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("1 - Toplama");
Console.WriteLine("2 - Çıkarma");
Console.WriteLine("3 - Çarpma");
Console.WriteLine("4 - Bölme");
Console.Write("İşlem seçiniz: ");
int secim = Convert.ToInt32(Console.ReadLine());
switch (secim)
{
case 1:
Console.WriteLine("Sonuç: " + (sayi1 + sayi2));
break;
case 2:
Console.WriteLine("Sonuç: " + (sayi1 - sayi2));
break;
case 3:
Console.WriteLine("Sonuç: " + (sayi1 * sayi2));
break;
case 4:
if (sayi2 != 0)
{
Console.WriteLine("Sonuç: " + (sayi1 / sayi2));
}
else
{
Console.WriteLine("Sıfıra bölme yapılamaz.");
}
break;
default:
Console.WriteLine("Geçersiz işlem seçimi.");
break;
}
Açıklama: Program kullanıcının seçtiği işlem numarasına göre toplama, çıkarma, çarpma veya bölme işlemini gerçekleştirir.
Bölme işleminde ikinci sayının sıfır olup olmadığı if-else yapısıyla kontrol edilir.
Bu örnek, switch-case ve if-else yapılarının birlikte kullanılabileceğini göstermektedir.
10. UYGULAMA 3: AY NUMARASINA GÖRE MEVSİM BULMA
Kullanıcıdan 1 ile 12 arasında bir ay numarası alarak hangi mevsime ait olduğunu belirleyen bir uygulama geliştirelim.
Console.Write("Ay numarasını giriniz (1-12): ");
int ay = Convert.ToInt32(Console.ReadLine());
switch (ay)
{
case 12:
case 1:
case 2:
Console.WriteLine("Kış mevsimi");
break;
case 3:
case 4:
case 5:
Console.WriteLine("İlkbahar mevsimi");
break;
case 6:
case 7:
case 8:
Console.WriteLine("Yaz mevsimi");
break;
case 9:
case 10:
case 11:
Console.WriteLine("Sonbahar mevsimi");
break;
default:
Console.WriteLine("Geçersiz ay numarası.");
break;
}
Açıklama: Birden fazla case etiketi aynı mevsim için kullanılmıştır. Örneğin 12, 1 ve 2 değerleri kış mevsimini temsil eder.
Örnek: Kullanıcı 7 girerse ekrana "Yaz mevsimi" yazdırılır.
11. UYGULAMA 4: BASİT ATM MENÜSÜ
Switch-case yapısını kullanarak basit bir ATM menüsü hazırlayalım. Kullanıcı seçtiği işleme göre bakiye görüntüleyebilir, para yatırabilir veya para çekebilir.
double bakiye = 5000;
Console.WriteLine("=== ATM MENÜSÜ ===");
Console.WriteLine("1 - Bakiye Sorgulama");
Console.WriteLine("2 - Para Yatırma");
Console.WriteLine("3 - Para Çekme");
Console.WriteLine("4 - Çıkış");
Console.Write("İşlem seçiniz: ");
int secim = Convert.ToInt32(Console.ReadLine());
switch (secim)
{
case 1:
Console.WriteLine("Bakiyeniz: " + bakiye + " TL");
break;
case 2:
Console.Write("Yatırılacak tutar: ");
double yatir = Convert.ToDouble(Console.ReadLine());
if (yatir > 0)
{
bakiye += yatir;
Console.WriteLine("Yeni bakiye: " + bakiye + " TL");
}
else
{
Console.WriteLine("Geçersiz tutar.");
}
break;
case 3:
Console.Write("Çekilecek tutar: ");
double cek = Convert.ToDouble(Console.ReadLine());
if (cek > 0 && cek <= bakiye)
{
bakiye -= cek;
Console.WriteLine("Yeni bakiye: " + bakiye + " TL");
}
else
{
Console.WriteLine("Geçersiz tutar veya yetersiz bakiye.");
}
break;
case 4:
Console.WriteLine("Çıkış yapıldı.");
break;
default:
Console.WriteLine("Geçersiz işlem seçimi.");
break;
}
Açıklama: Bu uygulamada kullanıcıya dört farklı seçenek sunulur. Seçilen işlem switch-case ile belirlenir.
Para yatırma ve çekme işlemlerinde if-else yapısı kullanılarak tutar kontrolleri gerçekleştirilir.
Önemli: Bu uygulama menüyü yalnızca bir kez çalıştırır. Menünün sürekli görüntülenmesini sağlamak için ilerleyen derslerde öğreneceğimiz döngüler kullanılabilir.
12. UYGULAMA 5: ÖĞRENCİ NOT DEĞERLENDİRME SİSTEMİ
Kullanıcıdan öğrencinin harf notunu alarak başarı durumunu görüntüleyen bir Console uygulaması hazırlayalım.
| Harf Notu |
Değerlendirme |
| AA |
Pekiyi |
| BA |
Çok İyi |
| BB |
İyi |
| CB |
Orta |
| CC |
Geçer |
| FF |
Başarısız |
Console.Write("Harf notunuzu giriniz: ");
string harf = Console.ReadLine().Trim().ToUpper();
switch (harf)
{
case "AA":
Console.WriteLine("Pekiyi");
break;
case "BA":
Console.WriteLine("Çok İyi");
break;
case "BB":
Console.WriteLine("İyi");
break;
case "CB":
Console.WriteLine("Orta");
break;
case "CC":
Console.WriteLine("Geçer");
break;
case "FF":
Console.WriteLine("Başarısız");
break;
default:
Console.WriteLine("Geçersiz harf notu.");
break;
}
Açıklama: Kullanıcının girdiği harf notu switch-case ile kontrol edilir ve karşılık gelen değerlendirme mesajı görüntülenir.
Trim() metodu baştaki ve sondaki boşlukları temizler. ToUpper() metodu ise metni büyük harfe dönüştürür. Böylece örneğin "aa" girişi de "AA" olarak değerlendirilir.
Harf notları ve açıklamaları bu uygulamada örnek olarak belirlenmiştir.
13. SWITCH CASE VE IF ELSE ARASINDAKİ FARKLAR
Switch-case ve if-else yapıları programın karar vermesini sağlar. Ancak kullanım amaçları bakımından bazı farklılıkları bulunmaktadır.
| Özellik |
IF - ELSE |
SWITCH - CASE |
| Kullanım amacı |
Farklı koşulları değerlendirmek |
Belirli değerlere göre seçim yapmak |
| Karşılaştırma |
Büyük, küçük, eşit gibi koşullar |
Case değerleriyle eşleşme |
| Mantıksal operatörler |
Doğrudan kullanılabilir |
Geleneksel case yapısında sınırlıdır |
| Okunabilirlik |
Karmaşık koşullarda kullanışlıdır |
Çok sayıda sabit seçimde düzenlidir |
| Alternatif işlem |
else |
default |
Önemli: Modern C# sürümlerinde switch yapısı, desen eşleştirme gibi daha gelişmiş koşulları da destekler. Bu derste başlangıç seviyesine uygun geleneksel switch-case kullanımı ele alınmıştır.
14. SWITCH CASE KULLANIRKEN DİKKAT EDİLMESİ GEREKENLER
Switch-case yapısı kullanılırken aşağıdaki noktalara dikkat edilmelidir:
- Case değerleri kontrol edilen ifadenin türüyle uyumlu olmalıdır.
- Aynı switch bloğunda aynı sabit case değeri tekrar tanımlanmamalıdır.
- Normal case bloklarının sonunda break gibi uygun bir sonlandırma ifadesi kullanılmalıdır.
- Beklenmeyen değerler için default bölümü eklenmesi önerilir.
- String karşılaştırmalarında büyük ve küçük harf farklılıkları dikkate alınmalıdır.
- Kullanıcıdan alınan veriler mümkün olduğunca doğrulanmalıdır.
15. SONUÇ
C# programlama dilinde switch-case yapısı, bir değişkenin veya ifadenin farklı değerlerine göre işlem yapılmasını sağlayan önemli karar yapılarından biridir.
Bu derste switch, case, break ve default anahtar kelimelerini öğrendik. Ayrıca haftanın günlerini bulma, hesap makinesi, mevsim belirleme, ATM menüsü ve öğrenci not değerlendirme uygulamalarıyla switch-case kullanımını pekiştirdik.
Bir sonraki dersimizde C# For Döngüsü ve Kullanımı konusunu inceleyerek tekrar eden işlemlerin programlama yoluyla nasıl gerçekleştirildiğini öğreneceğiz.