C’ye giriş konumuzun 3. ve son bölümünden C’de (ve genel olarak bütün programlama dillerinde) kullanılan basit bir kaç komuttan bahsedeceğim.
if
İlk bahsedeceğim komut if komutu. if komutu sayesinde programımızın istediğimiz bir bölümünü bir şarta bağlı olarak çalıştırabilir veya o kısmın çalışmamasını sağlayabiliriz. if komutunun genel olarak kullanımı şu şekildedir.
if ( … şart … ) {
…
komutlar
…
}
Burada eğer şart kısmında belirttiğimiz koşulumuz doğru ise { … } arasında kalan tüm komutlar çalıştırılacaktır, eğer doğru değil iste bu parantezler arasında kalan komutlar görmezden gelinecek, program }’dan sonra gelen satırdan çalışmaya devam edecektir.
şart kısmında belirttiğimiz koşul herhangi bir matematiksel eşitlik olabilir. Örnek olarak
if ( a > b ) {
...
}
if içindeki komutlar sadece a değişkeni b’den büyük ise çalışacaktır. a’nın daha küçük veya eşit olma durumlarında … kısmındaki komutlar atlanacaktır. Kullanabileceğimiz diğer şart komutları
a > b (a b’den büyük ise)
a >= b (a b’den büyük veya eşit ise)
a < b (a b’den küçük ise)
a <= b (a b’den küçük veya eşit ise
a == b (a ve b birbirine eşit ise)
a != b (a ve b birbirine eşit değil ise)
Bir örnek program ile daha iyi açıklamaya çalışayım.
#include <stdio.h>
int main(void){
int x;
scanf("%d", &x);
if( x > 0 ) {
printf("X is a positive number!\n");
}
if( x < 0 ) {
printf("X is a negative number!\n");
}
if( x == 0 ) {
printf("X is zero!\n");
}
return 0;
}
main fonksiyonumuzu incelediğimizde, ilk satırımızda x isminde bir değişken tanımlıyoruz. Bir sonraki komutta scanf diye bir fonksiyon kullandık. Bu da aynı printf gibi stdio.h kütüphanesinde bulunan bir fonksiyon. İşlevi ise kullanıcının klavye gireceği bir inputu bir değişkene atamak. Bu fonksiyonu kullandığımız yerde program durdurulacak, kullıcıdan bir sayı (veya string) girmesi beklenecektir. Kullanıcı istediği bir değişkeni girip enter’a bastığında girmiş olduğu sayı x değişkenine (veya fonksiyonda hangi değişkeni belirttiysek) atanacaktır. %d kullanmamızın sebebi x in bir integer olması, farklı değişken türleri için farklı harfler kullanılır. Daha fazla bilgi için
http://www.cplusplus.com/reference/clibrary/cstdio/scanf.html
inceleyebilirsiniz. x den önce kullandığımız & işareti ise x değilde x’in adresini gönderdiğimizi gösteriyor, adresler ve pointerlar daha ileri bir konu olduğu için burada bahsetmeyeceğim.
Özet olarak scanf fonksiyonu geldiğinde kullanıcı bir sayı girecek enter a basacak ve bu sayı x e atanmış olacak. Bundan sonra bir if komutu ile karşılaşıyoruz
if( x > 0 ) {
printf("X is a positive number!\n");
}
Burada { … } içindeki satırlar yani printf fonksiyonumuz eğer if ( … şart …) kısmındaki şart doğru ise çalışacaktır. Yani eğer kullanıcı pozitif bir sayı girmişse ekrana X is a positive number! yazdırılacaktır. Eğer sayı 0 dan büyük değil { … } parantezleri arasındaki bütün komutlar görmezden gelinecek, program } dan sonra gelen ilk satırdan devam etmeye başlayacaktır.
İkinci if komutu yine ilkine benzer bu sefer x in 0′dan küçük olup olmadığını kontrol ediyor, son if komutumuzda x in 0′a eşit olduğu durumları kontrol ediyor.
Yukarda bahsettiğimiz örnekler hep tek bir şarta bağlı olarak çalışıyordu. Eğer gerekiyorsa tek bir if içinde birden fazla şartı kontrol edebilir, tüm bu şartlara bağlı olarak if komutunun içini çalışıp çalıştırabiliriz. İki tip bağlaç ile şartları birbirine bağlayabiliriz. Birincisi && (and) kullanarak, ikincisi || (or) kullanılarak yapılır. Eğer && kullanırsak bütün koşullar doğru olduğunda if çalışacaktır, || kullanır isek herhangi bir koşulun doğru olması yeterli olacaktır. İkisi içinde birer örnek verelim,
if ( a > b && a > 0) {
printf("a is greater than b and it is a positive number!\n");
}
Burada a sayısı b sayısından büyük olduğunda ve a sayısı 0′dan büyük olduğunda if komutu içinde ki kodlar çalışacaktır, eğer iki koşuldan en az birisi yanlış ise görmezden gelineceklerdir. or için bir örnek:
if ( a == 0 || b == 0 ) {
printf("a*b is zero!\n");
}
Yukarıdaki örnekte de a veya b sayılarından herhangi birinin 0 olup olmadığını kontrol ediyoruz, eğer bu sayılardan biri 0 ise bunların çarpımlarının sonucu da 0 olacağı için a*b is zero! yazısını ekrana yazdırıyoruz.
2 den fazla şartıda bir birine bağlayabiliriz, hatta bu grupladığımız şartları parantez içine alarak yine başka bir şart ilede birbirine bağlayabiliriz. Bir örnek ile göstermeye çalışayım.
if ( (a > 0 && b > 0) || (a < 0 && b < 0) ){
printf("a*b is a positive number!\n");
}
Yukarıdaki örnekte eğer a ve b değişkenlerinin ikiside 0 dan büyük veya ikiside 0 dan küçük ise printf komutu çalışacaktır.
else, else if
else komutu if komutundan sonra kullanılır. Eğer bir if komutunun şartı doğru değil ise, ve bundan sonra bir else geliyorsa else içindeki kodlar çalışacaktır. Eğer if komutu doğru ise çalışmayacaktır.
if ( a > 0 ) {
printf("a is a positive number!");
} else {
printf("a is not a positive number!");
}
Yukarıdaki örnekte ilk önce a değişkeni 0′dan büyük mü diye kontrol ettik, eğer büyük ise if komutundan sonra gelen { … } parantezlerinin içi çalışacaktır, eğer yanlış ise else komutundan sonra gelen { … } parantezlerinin içi çalışacaktır. Yani a sayısı 0 dan büyük ise “a is a positive number!” yazısı ekrana yazdırılacak, değil ise “a is not a positive number!” yazısı ekrana yazdırılacaktır.
else if komutu yine else e benzer bir şekilde bir if komutundan sonra kullanılır fakat bu sefer else den farklı olarak else kısmının içini de bir şarta bağlı olarak çalışmasını sağlayabiliriz.
if ( a > 0 ) {
printf("a is a positive number!");
} else if ( a < 0 ) {
printf("a is a negative number!");
} else {
printf("a is zero!");
}
Yukarıdaki örnekte önce a > 0 şartı kontrol edilecektir. Eğer doğru ise “a is a positive number” ekrana yazılacak, else kısmına hiç bakmadan en son } parantezinden sonraki komuta geçilecektir. Eğer a > 0 şartı yanlış ise else kısmının şartı yani a < 0 kontrol edilecek ve eğer doğru ise ekrana “a is a negative number!” ekrana yazdırılacaktır. Eğer bu şartta doğru değil ise en sonda gelen else kısmı çalışacaktır.
if, else, else if konusunda bilmemiz gerek bir diğer şey de, eğer {…} parantezleri arasında sadece tek satırlı bir komut varsa eğer istersek bu parantezleri kullanmayabiliriz. Mesela
if ( a > b ) {
printf("a is greater than b!");
}
ile
if ( a > b )
printf("a is greater than b!");
arasında hiç bir fark yoktur. Fakat eğer if komutu içinde birden fazla satır kullanıyorsak bu şekilde bir kısaltma yapamayız. Aynı durumu else veya else if içinde kullanılabilir.