Temel C Programlama -20- Else ve Else If Yapıları

Önceki yazıda karar yapılarını anlatırken sadece basit bir if karar yapısını sizlere anlattık. If karar yapısında şart sağlanırsa if blokundaki komutlar işletiliyordu. Şart sağlanmadığında herhangi bir komutun işletilmemesi çoğu zaman büyük bir eksiklik olarak karşımıza çıkacaktır. O yüzden C dilinde if ile beraber else yani “Değilse” karar yapısı kullanılmaktadır. Bununla ilgili bir kodu şöyle yazabiliriz.

Eğer A, B’den Büyükse A B’den Büyüktür Yazdır Değilse A B’den küçüktür Yazdır.

Bu durumda karşılaştığımız iki duruma göre ayrı işletilecek kodu belirlemiş oluruz. If ifadesini anlatırken öğrencinin not durumuna göre geçti yazan bir komut yazmıştık. Fakat geçmediği zaman ekranda bir şey yazmıyordu. Kaldı ifadesini yazmak için şöyle bir komut kullanabiliriz.

if ( not >= 45 ) {
printf( "Gecti" );
} 
else {
printf( "Kaldi" );
}

Burada not değeri 45’e eşit veya 45’den büyükse printf fonksiyonu ile ekrana “Gecti” yazdırılır. Eğer şart sağlanmıyorsa not değeri 45’den düşük demektir ve öğrenci kalmıştır. Bunu yazdırmak için de printf fonksiyonu ile “Kaldi” yazdırırız. Şimdi if/else yapısının söz dizimini yazalım.

if (şart) {
komutlar;
komutlar;
komutlar;
}
else
{ 
komutlar;
komutlar;
komutlar;
}


if (şart)
tekkomut;
else
tekkomut;

Şimdi if ve else yapılarının beraber kullanıldığı çok basit bir program yazalım ve programın çalışma mantığını inceleyelim.

#include <stdio.h>
#include <stdlib.h>
int main() {
int sayi;
printf("Bir Sayi Giriniz:");
scanf("%i", &sayi);
if (sayi >= 100){
	printf("\n Sayi 100'den Buyuktur / Esittir \n");
   }
else
  {
	printf("\n Sayi 100'den Kucuktur \n");
  }

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

Burada önceki örneklerde olduğu gibi if karar yapısıyla başlayarak sayının 100’den büyük veya 100’e eşit olup olmadığını denetledik. Bunu if (sayi >= 100) komutuyla yaptık. Sonrasında printf fonksiyonuyla şart sağlandıysa sayının 100’den büyük veya 100’e eşit olduğunu yazdırdık. Eğer bu şart sağlanmadıysa yani sayı 100’den büyük veya 100’e eşit DEĞİLSE sayının 100’den küçük olduğunu anlarız. Bu durumda else ifadesinin ardından süslü parantezlerle bir kapsam (blok) açıp else yani DEĞİLSE şartı gerçekleştiğinde işletilecek komutu yazdık. Bu komut printf fonksiyonu yardımıyla sayının 100’den küçük olduğunu ekrana yazdırmaktadır.

Buraya kadar else deyiminin ne işe yaradığını anlamış olduk. Bu noktaya kadar her şey basit görünürken else if deyimi karşımıza çıkmaktadır. else if “DEĞİLSE EĞER” ifadesinin karşılığıdır. Yani değer önce bir şart ile karşılaşmalı sonra o şartı sağlamazsa başka bir şart ile karşılaşmalıdır. Bu durumda peş peşe onlarca şart yazma imkanımız olur. Örnek bir else if programını şöyle yazabiliriz.

#include <stdio.h>
#include <stdlib.h>
int main() {
int sayi;
printf("Bir Sayi Giriniz:");
scanf("%i", &sayi);
if (sayi > 100){
	printf("\n Sayi 100'den Buyuktur\n");
}
else if (sayi == 100 )
{
	printf("\n Sayi 100'e Esittir\n");
}
else
{
	printf("\n Sayi 100'den Kucuktur \n");
}

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

Öncelikle karar yapısını her zaman if deyimi ile başlatıyoruz. İlk ve en önemli şartı buraya yazmamız gereklidir. Sonrasında şart karşılanmazsa ikinci bir şarta değeri tabi tutuyoruz. Bu da else if (sayi == 100 ) komutuyla burada yapılmıştır. Eğer sayı 100’den büyük değilse ve eğer 100’e eşitse şartını bu program yerine getirmektedir. else if ifadesi ile başlayan şartları yukarıdaki if ile başlayan şarttan bağımsız tutmamak gereklidir. else if şartı da sağlanmazsa en sonunda else if’in DEĞİLSE şartı olan else ifadesini kullanırız ve sayi değişkeninin 100’den küçük olduğuna hükmederiz.

Else if yapılarını peşpeşe kullanarak daha karmaşık bir karar yapısı meydana getirmek mümkündür. Şu program bir robot kumanda programının bir parçası olabilir.

if ( yon == sol){
	sola_git();
}
else if (yon == sag )
{
	saga_git();
}
else if (yon == ileri)
{
	ileriye_git();
}
else if (yon == geri)
{
	geriye_git();
}

Bu durumda else if yapısının söz dizimini şu şekilde özetleyebiliriz.

if (şart)
{
komutlar;
}
else if (şart)
{
komutlar;
}
else if (şart) 
{
komutlar;
}
else // isteğe bağlı
{
komutlar;
}

Şimdi bu komutlarla konsol tabanlı bir rol yapma oyununun koordinat tabanlı haritasını yapalım ve bu harita üzerinde gezinelim. Klavyemizde aynı diğer oyunlarda olduğu gibi WASD tuşlarına basarak programı kontrol edeceğiz. W kuzey, A batı, S güney ve D harfi de doğu harfine karşılık gelecek. Bizim haritada ilerlediğimizi ve haritada ne konumda olduğumuzu ise printf fonksiyonu ile ekrana yazdıracağız. Bu basit oyun şimdilik boş bir haritada geçse de konumuz ilerledikçe buna ilaveler yaparak daha eğlenceli bir hale getireceğiz.

#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();
if (yon == 'w'){
	y++;
}
else if (yon == 's'){
	y--;
}
else if (yon == 'a'){
	x--;
}
else if (yon == 'd') {
	x++;
}
else
printf("\n Lutfen Dogru Tusa Basiniz \n");

printf(" X : %i   Y : %i  \n", x, y);

} // sonsuz döngü sonu


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

Burada öncelikle programı tanıtmaya yönelik bir karşılama yazısı ekliyoruz. Gömülü sistemler üzerinde çalışırken de LCD, TFT gibi bir çıkış birimi kullandığımızda program açılırken programı tanıtıcı bir açılış metnini ekleriz. Program yazarken bunu alışkanlık haline getirmeniz sizin için iyi olacaktır. #include <conio.h> yönergesi ile yeni bir başlık dosyasını programa ekledik. Bu programda kullanacağımız getche() fonksiyonunu kullanmak için şarttır.

yon = getche();

getche() fonksiyonu scanf fonksiyonu gibi olmayıp klavyede bir tuşa bastığımızda tuşa basar basmaz girilen harfi veya rakam değerini okumakta ve bunu değer olarak döndürmektedir. Eğer klavyede hiçbir tuşa basmazsak getche() fonksiyonu işletildiği anda programı beklemeye almaktadır. while(1) sonsuz döngüsünün içerisine yazdığımız bu komut ile her tuşa bastığımızda döngü bir çevirimde bulunacaktır.

if (yon == ‘w’){ y++; }

Eğer W tuşuna basarsak kordinat sistemindeki Y ekseninde değer bir artacaktır. Eğer bastığımız tuş “w” değilse diğer kontrol yapılarından değer geçecek ve ilgili yerde ilgili değeri artıracaktır. Eğer başka bir tuşa bastıysak program hata verecektir. Programın en sonunda ise X ve Y değerlerini ekrana yazdırıyoruz. Programın çıkışı şu şekilde olabilir.

Buraya kadar else ve else if yapılarını anlatmış olduk. Sonraki konuda switch ve mantıksal işlem operatörlerini anlatarak bu örnek üzerinde daha karmaşık işlemler yapacağız.

Last updated