$1.99 Domains* at GoDaddy.com

C Programlama swicth – case

c_programlama-168switch – case, if – else if yapısına oldukça benzer bir ifadedir. Ancak aralarında iki fark vardır. Birincisi, switch – case yapısında, aralık deÄŸeri girmezsiniz. Direkt olarak ifadelerin bir ÅŸeylere eÅŸit olup olmadığına bakarsınız. İkinci farksa, switch – case yapılarında, illa ki uygun koÅŸulun saÄŸlanmasıyla yapının kesilmek zorunda olmayışıdır. ‘break’ komutu kullanmadığınız takdirde, diÄŸer ÅŸartların içindeki iÅŸlemleri de yapma imkanınız olabilir. switch case en tepeden baÅŸlayarak ÅŸartları tek tek kontrol eder. Uygun ÅŸart yakalanırsa, bundan sonra ki ifadeleri kontrol etmeden doÄŸru kabul eder. Ve ÅŸayet siz break koymamışsanız, eÅŸitlik uygun olsun olmasın, alt tarafta kalan case’lere ait komutlarda çalıştırılacaktır. if – else if ise daha önce söylemiÅŸ olduÄŸumuz gibi böyle deÄŸildir. Uygun koÅŸul saÄŸlandığında, yapı dışarsına çıkılır.

switch case yapısında ki durumu, aşağıdaki tabloda görebilirsiniz:

switch case Yapısı switch case Akış Diyagramı
switch( degisken ) {
	case sabit1:
		komut(lar)
		[break]
	case sabit2:
		komut(lar)
		[break]
	.
	.
	.
	case sabitN:
		komut(lar)
		[break]
	default:
		komut(lar);
}
sm_switch_case 

Sanırım gözünüze biraz farklı gözüktü. Yapı olarak ÅŸimdiye kadar görmüş olduÄŸunuz if else gibi gözükmese de, bir örnekten sonra arasında pek bir fark olmadığını göreceksiniz. Her komut sonunda koyduÄŸum break komutu, zorunlu deÄŸildir ve o nedenle köşeli parantezle belirtilmiÅŸtir. break koyduÄŸuz takdirde, uygun koÅŸul saÄŸlandıktan sonra, daha fazla kontrol yapılmayacak ve aynen if – else if yapısında olduÄŸu gibi program orada kesilecektir. Ama break koymazsanız, altında kalan bütün iÅŸlemler -bir daha ki break’e kadar- yapılacaktır.

Kodun sonunda gördüğünüz default komutu, if – else if yapısında ki sonuncu else gibidir. Uygun hiçbir ÅŸart bulunamazsa, default komutu çalışır.

ÖğrendiÄŸimiz bilginin pekiÅŸmesi için biraz pratik yapalım. Bir not deÄŸerlendirme sistemi olsun. 100 – 90 arası A, 89 – 80 arası B, 79 – 70 arası C, 69 – 60 arası D, 59 ve altıysa F olsun. EÄŸer 100′den büyük veya negatif bir sayı girilirse, o zaman program hatalı bir giriÅŸ yapıldığını konusunda bizleri uyarsın. Bunu ÅŸimdiye kadar öğrendiÄŸiniz bilgilerle, if – else if yapısını kullanarak rahatlıkla yanıtlayabilirsiniz. Ama ÅŸu an konumuz switch case olduÄŸundan, cevabını öyle verelim:

#include<stdio.h>
int main( void )
{
	int not;
	printf("Lütfen notu giriniz> ");
	scanf("%d",&not);
	switch( not / 10 ) {
		case 10:
		case 9: printf("NOT: A\n"); break;
		case 8: printf("NOT: B\n"); break;
		case 7: printf("NOT: C\n"); break;
		case 6: printf("NOT: D\n"); break;
		case 5:
		case 4:
		case 3:
		case 2:
		case 1:
		case 0: printf("NOT: F\n"); break;
		default:
			printf("HATA: Bilinmeyen bir deÄŸer girdiniz!\n");
	}

	return 0;
}

Algoritmaya bakalım: Önce sayıyı alıyor ve 10′a bölüyoruz. Yani girilen not, 57 ise 5.7 sonucunu elde ediyoruz. Ancak iki tam sayının sonucu bir virgüllü sayı veremez, tıpkı iÅŸleme giren deÄŸiÅŸkenler gibi tam sayı olarak döner. Dolayısıyla bilgisayarın elde edeceÄŸi sonuç, 5.7 deÄŸil, sadece 5′tir. switch case yapısında koÅŸullar yukardan baÅŸlayarak kontrol ediliyor. case 5′e gelindiÄŸinde eÅŸitlik saÄŸlanıyor. Ama break konmadığı için, switch case’ten çıkılmıyor. Ve altında kalan iÅŸlemlerde yapılıyor. Altında herhangi bir iÅŸlem veya break olmadığından case 0′a kadar bu böyle sürüyor. Ve case 0′da ekrana bir çıktı alıp switch case yapısı break ile sonlandırılmaktadır.

switch case, if – else if yapısının sunduÄŸu esnekliÄŸe sahip deÄŸildir. Daha çok menü olarak sunulacak iÅŸlerde kullanılır. ÖrneÄŸin Unix’in ünlü listeleme komutu ls içersinde, verilen parametrelerin kontrolü switch case kullanılarak saÄŸlanmıştır.

Kategoriler: C Programlama, Yazılım

Tags: , , ,

Yorumlar

Yorum Yok

Yorumunuzu Ekleyin

Yorum eklemek için giris yapmalısınız.