6.3 switch – case Yapısı
6.3 switch – case Yapısı
Bu deyim bir değişkenin içeriğine bakarak, programın akışını bir çok seçenekten birine yönlendirir. case (durum) deyiminden sonra değişkenin durumu belirlenir ve takip eden gelen satırlar (deyimler) işleme konur. Bütün durumların aksi söz konu olduğunda gerçekleştirilmesi istenen deyimler default deyiminden sonraki kısımda bildirilir. Genel yazım biçimi:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
switch(değişken) { case sabit1: ... deyimler; ... case sabit2: ... deyimler; ... . . . case sabitn: ... deyimler; ... default: ... hata deyimleri veya varsayılan deyimler; ... } |
Program Program 6.4’te switch deyiminin basit bir kullanımı gösterilmiştir.
Program 6.4: switch-case yapısının kullanımı
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
/* 06prg04.c: switch - case yapısının kullanımı */ #include <stdio.h> int main(void) { char kr; printf("Lutfen bir karakter girin\n"); kr = getchar(); /* tek bir karakterin okunması */ switch (kr) { case 'a': printf("a harfine bastiniz\n"); case 'b': printf("b harfine bastiniz\n"); default: printf("a veya b ye basmadiniz\n"); } return 0; } |
ÇIKTI
1 2 3 4 5 |
Lutfen bir karakter girin a a harfine bastiniz b harfine bastiniz a veya b ye basmadiniz |
ÇIKTI
1 2 3 4 |
Lutfen bir karakter girin b b harfine bastiniz a veya b ye basmadiniz |
ÇIKTI
1 2 3 4 |
Lutfen bir karakter girin b b harfine bastiniz a veya b ye basmadiniz |
ÇIKTI
1 2 3 |
Lütfen bir karakter girin c a veya b ye basmadiniz |
Programda, klavyeden okunan tek bir karakter değişkenin içeriğine bakılıp uygun dallanmalar yaptırılmıştır. 11. satırda değişken getchar() fonksiyonu ile okutulmuştur. Eğer 'a' veya'b' karakterlerinden biri girilirse, ekrana bu harflerin girildiğine dair mesaj yazılacak, aksi takdirde bu karakterin dışında bir karakterin giriş olarak kullanıldığı gösteren bir mesaj yazılacaktır. Örneğin 'c' karakteri klavyeden girilmiş ise a veya b ye basmadiniz gibi. Fakat 'a' karakterleri girildiğinde ekrana her üç durumda yazdırılmaktadır. Bunun sebebi,case 'a': durumunda sırasıyla 16, 18 ve 20. satırların işleme konmasıdır. Bunu engellemek için 16. satırdan sonra programın başka bir yere yönlendirilmesi gerekir. Bu yönlendirme,Bölüm 7‘de anlatılacak olan break deyimi ile yapılır. Derleyici bu deyim ile karşılaştığında, bulunduğu yapının içinden koşulsuz olarak ayrılır ve takip eden işleme başlar[1].
Program 6.4’te case 'a': durumu için 16, 18 ve 20. satırlar da işleme konumuştu. Eğer klavyeden 'a' karakterini girip ekrana sadece a harfine bastiniz iletisi yazdırılmak isteniyorsa, 20. satıra break deyimi ilave edilmelidir. break deyiminin kullanımı Program 6.5’te gösterilmiştir.
Program 6.5: switch-case yapısı ve break kullanımı
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
/* 06prg05.c: switch - case yapısı ve break kullanımı */ #include <stdio.h> int main(void) { char kr; printf("Lutfen bir karakter girin\n"); kr = getchar(); /* tek bir karakterin okunması */ switch (kr) { case 'a': printf("a harfine bastiniz\n"); break; case 'b': printf("b harfine bastiniz\n"); break; default: printf("a veya b ye basmadiniz\n"); break; } return 0; } |
ÇIKTI
1 2 3 |
Lutfen bir karakter girin a a harfine bastiniz |
ÇIKTI
1 2 3 |
Lutfen bir karakter girin k a veya b ye basmadiniz |
Program 6.6 switch-case yapısın farklı bir kullanımı ile ilgili bir örnektir. Programda, önce iki sayı isteniyor ardından yapılan seçimle bu sayıların toplamı, farkı, çarpımı veya oranı ekrana yazdırılıyor.
Program 6.6: switch-case yapısı ve break kullanımı
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
/* 06prg06.c: switch-case yapısı */ #include <stdio.h> #include <stdlib.h> int main(void) { int secim; float x,y, sonuc; printf("Iki sayi girin: "); scanf("%f %f",&x,&y); puts("*** Menu ***"); puts("[1] Toplama"); puts("[2] Cikarma"); puts("[3] Carpma"); puts("[4] Bolme"); printf("Seciminiz: "); scanf("%d",&secim); switch( secim ) { case 1: sonuc = x + y; printf("Toplam = %f\n",sonuc); break; case 2: sonuc = x-y; printf("Fark = %f\n",sonuc); break; case 3: sonuc = x * y; printf("Carpim = %f\n",sonuc); break; case 4: sonuc = x/y; printf("Oran = %f\n",sonuc); break; default: puts("Yanlis secim !\a"); } return 0; } |
ÇIKTI
1 2 3 4 5 6 7 8 |
Iki sayi girin: 3 8 *** Menu *** [1] Toplama [2] Cikarma [3] Carpma [4] Bolme Seciminiz: 1 Toplam = 11.000000 |
ÇIKTI
1 2 3 4 5 6 7 8 |
Iki sayi girin: 3 8 *** Menu *** [1] Toplama [2] Cikarma [3] Carpma [4] Bolme Seciminiz: 7 Yanlis secim ! |
switch-case yapısı if-else yapısının bir alternatifidir. Yani, Program 6.6’daki switch-case kısmı, if-else yapısı ile de aşağıdaki gibi yazılabilirdi. İnceleyiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<span style="color: blue;">switch</span>( secim ) { <span style="color: blue;">case</span> 1: sonuc = x + y; printf("Toplam = %f\n",sonuc); break; <span style="color: blue;">case</span> 2: sonuc = x-y; printf("Fark = %f\n",sonuc); break; <span style="color: blue;">case</span> 3: sonuc = x * y; printf("Carpim = %f\n",sonuc); break; <span style="color: blue;">case</span> 4: sonuc = x/y; printf("Oran = %f\n",sonuc); break; <span style="color: blue;">default</span>: puts("Yanlis secim !\a"); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<span style="color: blue;">if</span>(secim == 1){ sonuc = x + y; printf("Toplam = %f\n",sonuc); } <span style="color: blue;">else if</span>(secim == 2){ sonuc = x-y; printf("Fark = %f\n",sonuc); } <span style="color: blue;">else if</span>(secim == 3 ){ sonuc = x * y; printf("Carpim = %f\n",sonuc); } <span style="color: blue;">else if</span>(secim == 4){ sonuc = x/y; printf("Oran = %f\n",sonuc); } <span style="color: blue;">else</span>{ puts("Yanlis secim !\a"); } |