Temel C Programlama -21- Switch Karar Yapısı, break ve continue

Önceki yazıda bir değeri belli aralıklar ve koşullarda okumak için alt alta else if yapılarını kullanmıştık. Bu else if yapılarını böyle kullanmak programcı için pratik bir yöntem değildir ve programın hata verme ihtimalini artırır. Bu yüzden C dilinde bu sık kullanılan else if yani seçim ağacı yapısını switch deyimi ile kullanmak hem programı daha anlaşılır kılacak hem de daha kolay kod yazmamıza imkan sağlayacaktır. Yalnız baştan söylememiz gerekir ki switch yapısı bize asla if else yapısı kadar esnekliği vermemektedir. Bu yapının neden fazla esneklik vermediğini ise uygulamada sizlere göstereceğiz. switch yapısını anlatmakla döngü ve karar konusunu bitirsek de döngü ve kararlara ait ayrıntıları en son olarak anlatacağız. Böylelikle eksik konu bırakmadan bir sonraki konumuz olan fonksiyonlara geçeceğiz.

Switch komutuna çoklu seçim komutu adı da verilir. Switch komutunda if yapısında olduğu gibi bir karşılaştırma operatörü veya mantıksal bir işlem yoktur. Switch sadece bir değişkeni alır ve bu değişkenin değerine göre belki onlarca farklı komutu işletebilir. Biz önceki yazımızdaki basit rol yapma oyununu burada switch ile yaparak programı geliştirelim.

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main() {

// KARŞILAMA YAZISI
for (int i=0; i < 50; i++ )
printf("*");
printf("\n");
printf("ROL YAPMA OYUNUNA HOS GELDINIZ \n");
printf("WASD TUSLARI ILE HARITADA ILERLEYINIZ \n");
for (int i=0; i < 50; i++ )
printf("*");
printf("\n");
// KARŞILAMA YAZISI BITIS
int x = 0, y = 0; // kordinatlar
while (1)
{
char yon;
yon = getche();
switch(yon)
{
case 'w':
	y++;
	break;
case 's':
	y--;
	break;
case 'a':
	x--;
	break;
case 'd':
	x++;
	break;
default:
printf("\n Lutfen Dogru Tusa Basiniz \n");
break;
}
printf(" X : %i   Y : %i  \n", x, y);

} // sonsuz döngü sonu


system("PAUSE");
 } // Main Sonu

Burada yon adlı değişkenin içerdiği değere göre X ve Y değerlerini artırıp azaltıyorduk. Tek değişiklik else if yapılarının silinip switch yapısının getirilmesi olduğu için sadece switch yapısını inceleyerek devam edelim.

switch(yon)

Burada switch yapısına hangi değişkeni alacağımızı belirliyoruz ve süslü parantezleri açarak yapı blokunu oluşturuyoruz.

case ‘w’:

Bu komutun tam türkçe karşılığı ” ‘w’ durumunda” anlamına gelir. Yani aldığımız değişken w durumundayken ne iş yapılacağını burada belirtiriz. case ifadesinden sonra bir sabit değer girmemiz gereklidir. if yapılarında olduğu gibi farklı değişkenler ve operatörler burada kullanılamaz. Tam sayı, karakter gibi sabit bir değer yazmamız gereklidir. Biz burada tek tırnak arasında ‘w’ karakterini yazıyoruz.

y++;

Değerin ‘w’ karakteri olması durumunda yani klavyeden w karakteri okunması durumunda y değişkeni bir artırılıyor.

break;

Bu komut kapsamdan çıkış komutudur. break komutu ile beraber bütün switch yapısından çıkılır ve program akışına devam edilir. if, while hatta ana fonksiyonda bile break; komutunu kullandığımızda break komutu program akışını ilk süslü parantezin kapandığı noktaya götürecektir (})

default:

Burada yukarıdaki değerler karşılanmazsa standart olarak işletilecek komutlar yer almaktadır. Buraya işimize yararsa bir komut ekleyebiliriz veya break; yazıp es geçebiliriz. Biz doğru tuşa basma konusunda biz uyarı ekledik.

Switch yapısının söz dizimi şu şekildedir.

switch(degisken)
{
case deger1:
komutlar;
komutlar;
break;
case deger2:
komutlar;
komutlar;
break;

default:
break;
}

Switch yapısı belli bir veriyi işleme ve bu verideki değerleri ayıklama ve değerleri sayma konusunda çok işimize yaramaktadır. Yanlız biz kümelenmiş if else yapısında switch’de yapamadığımız pek çok işlemi yapabilme şansımız vardır. Örneğin if parantezleri içerisinde mantık operatörleri, aritmetik operatörler hatta fonksiyonlar kullanılabilir. Bunlar trigonometri, karekök alma fonksiyonları bile olabilir. Fakat Switch’in case yapısında sadece değerler okunur ve o değerlere göre işlem yapılır. Örneğin case deger == 5: diye bir komut yazmamız mümkün değildir.

Durum Operatörü

Durum operatörünü açık söylemek gerekirse ne ben kullanıyorum ne de çoğu programcı kullanıyor. İncelediğim kütüphanelerde ve hatta gelişmiş programlarda bile bu operatöre pek rastlamadım. Rastladığım nadir durumlarda da bunu bilmenin faydasını gördüm. O yüzden konuyu eksik bırakmama adına durum operatörünü size anlatacağım.

C dilinde aşırı derecede sık kullanılan bir karar yapısı olduğu için C tasarımcıları bu karar yapısını tek satıra indirip bir operatör ile basitleştirmek istemiştir. Bu karar yapısı iki değeri karşılaştırır ve karşılaştırma operatörüne göre doğru olan değeri değişkene aktarır. Bunun kodu şu şekildedir.

if ( deger1 == deger2 )
  deger3 = deger1;
else
  deger3 = deger2;

Burada bir şart ve şartın durumuna göre bir atama işlemi gerçekleşmektedir. Aynı kodu durum operatörü ile şu şekilde yazabiliriz.

deger3 = ( deger1 == deger2) ? deger1 : deger2 ;

Bu kod yapısı pek alışkın olmadığımız için pratikte kolay olsa da anlaşılırlıkta yukarıdaki if else yapısı gibi değildir. O yüzden uygulamada çok fazla görme imkanınız yoktur.

break ve continue ifadeleri

Ben C dilini öğrenirken break komutunu rahatça öğrensem de continue deyimini anlamam zaman aldı. Açıkçası İngilizce kaynakları okuyana kadar continue deyimini tam olarak anlamış değildim. Şimdi sizlere bu iki deyimi tam anlamıyla açıklamaya çalışacağım.

break ifadesi Türkçe “Ayrıl” anlamına gelmektedir. Yani program akışı bir kapsama bağlı ise bulunduğu kapsamdan ayrılıp bir üst kapsamda program akışına devam eder. Bu kapsamların süslü parantezlerle ayrıldığını buraya kadar öğrendik. Şimdi uygulamada break’ın nasıl davranacağını görelim.

int main () 
{ // ANA PROGRAM KAPSAMI

while(1) 
{ // SONSUZ DÖNGÜ KAPSAMI
komutlar;
komutlar;
break;
komutlar;
komutlar;
} // KAPSAMDAN CIKIŞ
// BREAK komutunun ardından devam edilen nokta
komutlar;
komutlar;
komutlar;

}

Burada önce program int main dediğimiz ana program fonksiyonunun kapsamı içerisinde yer alıyor. Sonrasında while(1) döngüsü ile sonsuz döngünün kapsamı içerisinde sürekli dönüp duruyor. Bu sonsuz döngünün kapsamı while(1)’den sonraki { işaretinden bir sonraki } işaretine kadar devam eder ve bu aradaki komutlar çalıştırılır. Eğer ortadaki break komutunu çalıştırırsak alttaki iki komut çalıştırılmaz döngü kapsamından hemen çıkılır ve alttaki } işaretinden itibaren program akışı devam eder. break komutu acil çıkış komutu olarak da nitelendirilebilir. Herhangi bir şarta ve kurala bağlı olmadan istediğimiz program kapsamından atlayıp çıkmamızı sağlamaktadır. Genelde de döngülerde bir şarta bağlanarak kullanılır.

continue deyiminin çevirisi ise “Es Geç” ya da “Atla” olarak ifade edilebilir. continue deyimi break; de olduğu gibi kural ve şart tanımadan kapsamdan çıkış yapmaz. Döngü akışında altındaki komutları atlayarak döngü başına tekrar döner. Bu durumda bir döngü çeviriminde kendinden sonra gelen komutların işletilmesini iptal etmektedir. Bunu da şu şekilde ifade edebiliriz.

for (int i = 0; i < 50; i++) 
{  // CONTINUE BU NOKTAYA ATLAMA YAPAR
komutlar;
komutlar;
komutlar;
continue;
komutlar; // CONTINUE ÇALIŞIRSA BU KOMUTLARI İŞLETMEZ
komutlar; // CONTINUE ÇALIŞIRSA BU KOMUTLARI İŞLETMEZ
komutlar; // CONTINUE ÇALIŞIRSA BU KOMUTLARI İŞLETMEZ
}

Burada continue programı ne döngüden ne de kapsamdan çıkarmaktadır. continue ifadesi geçen yerde program döngü başına atlama yapmaktadır ve devamındaki komutları es geçmektedir. Bu ifadeler döngü içerisinde şart durumlarına bağlanarak kullanılır. Bir sonraki yazımızda mantık operatörlerini, operatör önceliğini ve birleşik operatörleri anlatarak konumuza devam edeceğiz.

Last updated