Switch Case Yapısı C Programlama
Switch case ifadeleri, uzun ve içiçe koşullu ifadelerin (if statements) yerine geçebilirler. Anahtarın (switch) içine verilen değişken değeri, her bir durumu takip eden değerle karşılaştırılır ve bir değer değişkenin değeriyle eşleştiğinde yani doğru durumu -doğru kasayı da diyebiliriz- bulduğunda, bilgisayar bu noktadan itibaren programı yürütmeye devam eder.
Örneğin bir oyunda ana menü tasarlıyorsunuz ve kullanıcı eğer ;
1’e basarsa oyun kaldığı yerden başlayacak,
2’ye basarsa oyuna baştan başlayacak,
3’e basarsa ayarlara girecek,
4’e basarsa oyundan çıkacak.
Bu ihtimalleri hesaplamak için şimdiye kadar öğrendiğimiz ifadelerden if-else yapısını kullanarak bir çözüm elde edebiliriz. 4 adet if ifadesi işimizi görecektir. İşte bu gibi durumlarda kullanabileceğimiz bir diğer yapı da switch case yapısıdır. Kafalar daha fazla karışmadan switch case yapısının temel yapısını inceleyelim:
switch ( <değişken> ) { case ilk-değer: Eğer ilk-değer == <değişken> ise buradaki kodlar çalıştırılır. break; case diğer-değer: Eğer diğer-değer == <değişken> ise buradaki kodlar çalıştırılır. break; ... default: Eğer hiçbir değer <değişken> değeri ile eşleşmiyorsa buradaki kodlar çalıştırılır. break; }
Switch’in içerisinde bulunan değer bir değişkendir yani bir durumdur. Altında bulunan case, kendi değeri (ilk-deger) ile switch’in değeri (
int a = 10; int b = 10; int c = 20; switch ( a ) { case b: /* Kod */ break; case c: /* Kod */ break; default: /* Kod */ break; }
Bu arada switch case yapısında default durumu opsiyoneldir, isterseniz kodunuza eklemeyebilirsiniz. Ancak beklenmeyen bir durum ile karşılaşılması halinde başa çıkmak için kodumuza genellikle dahil ediyoruz. Eğer yapıya beklenmeyen bir girdi saptanırsa, default case kullanarak bir uyarıda bulunmak faydalı olabilir. Switch case yapıları eğer şartlar uygunsa, uzun if ifadelerine iyi bir alternatiftir. Sıklıkla kullanıcıdan girdi alınırken kullanılır. Aşağıda switch case yapısının nasıl kullanılacağını gösteren bir örnek var.
#include <stdio.h> void playgame() { printf( "Oyunu oyna fonksiyonu çağrıldı" ); } void loadgame() { printf( "Oyunu yükle fonksiyonu çağrıldı" ); } void options() { printf( "Ayarlar fonksiyonu çağrıldı" ); } int main() { int input; printf( "1. Play game\n" ); // Oyunu başlat printf( "2. Load game\n" ); // Oyunu yükle printf( "3. Options\n" ); // Ayarlar printf( "4. Exit\n" ); // Çıkış printf( "Selection: " ); // Seçim: scanf( "%d", &input ); switch ( input ) { case 1: /* İki nokta kullanılıyor, noktalı virgül değil */ playgame(); break; case 2: loadgame(); break; case 3: options(); break; case 4: printf( "Oynadığınız için teşekkürler! Çıkış yapılıyor...\n" ); break; default: // 1, 2, 3 veya 4 dışındaki seçimler geçersiz seçim sayılıyor. printf( "Geçersiz seçim, çıkış yapılıyor!\n" ); break; } getchar(); }
Bu program derlenebilir ancak fonksiyonların gövdeleri doldurulana kadar tam olarak doğru çalışmayacaktır. Bu örnek basit olmasına karşın girdi işlemeye güzel bir modeldir. Eğer bunu anlamakta zorlandıysanız case ifadeleri yerine if ifadeleri koymayı deneyin. Program tek sefer çalışıyor. Eğer bunu birden fazla kez göstermek isterseniz, örneğin geçersiz seçim halinde tekrar menüyü kullanıcıya göstermek isterseniz, tüm switch case yapısını bir sonsuz döngü içerisine alabilirsiniz. Şayet çıkış seçimi yani 4 değeri girilirse break anahtar kelimesi ile oluşturmuş olduğunuz sonsuz döngüyü kırabilirsiniz.