Platform
Programlama

7. Koşullar - C++

if, else, karşılaştırma ve mantıksal operatörler.

resul · Editör, Yazar· 22 Ağustos 2026· 6 dk okuma

Koşul, programın bir yolda vereceği kararı belirler. Bunun için if / else kullanırız. Mesela:

cpp
#include <iostream>

int main() {
    const int yas{21};

    if (yas >= 18) {
        std::cout << "yetiskin\n";
    } else {
        std::cout << "kucuk\n";
    }
    return 0;
}

burada if in yanında () içine bir koşul yazarız. Bu koşul sağlanırsa {} içindeki kodlar çalışır, sağlanmazsa else varsa orası çalışır.
yas 18'den büyük veya eşitse yetiskin, değilse kucuk yazdırılır.

>= gibi operatörler listesi aşağıdaki gibidir.

OperatörAdıÖrnek (a 5, b 3)Sonuç
==eşit mia == bfalse
!=eşit değil mia != btrue
>büyük müa > btrue
<küçük müa < bfalse
>=büyük veya eşit mia >= btrue
<=küçük veya eşit mia <= bfalse

Bunların hepsi bir bool üretir: true veya false. if de tam olarak bu kullanılır. yas >= 18 ya doğrudur ya değildir; ikisi birden olmaz.

Altıncı derste atamanın bir ifade olduğunu söylemiştik. = değeri atar, == ise eşitliği sorgular. Karışırsa program “eşit mi” diye bakmaz, doğrudan 5 yazar:

cpp
int x{0};
if (x = 5) {        // x'i 5 yapar, sonra 5'e bakar (true). karşılaştırma değil
    std::cout << "girdi\n";
}
if (x == 5) {       // gerçekten 5 mi diye sorar
    std::cout << "esit\n";
}

if (x = 5) yazınca çoğu derleyici uyarır (-Wall bunu bildirir). Uyarıyı “nasıl olsa çalışıyor” diye atlamadan okuyabilirsin. Eşitlik sorusu her zaman == dır.

Neden bunu anlattım?

Çünkü mesela, matematikteki 3 < x < 10 C++'ta “x hem 3'ten büyük hem 10'dan küçük” demez. 3 < x bir bool üretir, onu 10 ile karşılaştırmaya kalkar. İki karşılaştırmayı && ile bağlarız, birazdan geleceğiz.

if, else, else if

Tek durumda if yeter. İki durumda if / else. Üç veya daha fazla durum varsa else if zinciri:

cpp
#include <iostream>

int main() {
    int notu{75};

    if (notu >= 90) {
        std::cout << "A\n";
    } else if (notu >= 70) {
        std::cout << "B\n";
    } else if (notu >= 50) {
        std::cout << "C\n";
    } else {
        std::cout << "kaldi\n";
    }
    return 0;
}

Yukarıdan aşağı sırayla kontrol edilir. İlk sağlanan kısım çalışır, gerisine bakılmaz. notu 75 olduğu için A'ya girmez, B'ye girer, C'yi kontrol bile etmez.
Süslü parantezi tek satırda da olsan koyman gerek. Çünkü böyle de yazabilirsin if (x == 1) std::cout << "a"; sonra bir satır daha eklersin, o satır koşulun dışında kalır, saatlerce ararsın. O yüzden yazabiliyor olman yazman gerektiği anlamına gelmez. Seride {} alışkanlığı burada da geçerli.

if içine if de yazılır else if kullanımı yerine mantıken.Ancak okunması zorlaşır. İki üç dal varsa önceliğin else if dalları kurmak olsun. İç içe if yazdıysan her else'in hangi if'e ait olduğu süslü parantezle belli olsun.

Mantıksal operatörler

Birden fazla soruyu tek koşulda birleştirmek için üç tane operatör vardır:

OperatörAdıNe zaman true
&&veiki taraf da true
||veyaen az bir taraf true
!değiltrue'yu false, false'u true yapar
cpp
#include <iostream>

int main() {
    const int yas{21};
    const bool ogrenci{true};

    if (yas >= 18 && ogrenci) {
        std::cout << "indirimli\n";
    }

    if (yas < 18 || ogrenci) {
        std::cout << "kampanya\n";
    }

    if (!ogrenci) {
        std::cout << "tam fiyat\n";
    }
    return 0;
}

&& solda false değeri alındıysa ise sağı hiç çalıştırmaz. || solda true değeri varsa sağı çalıştırmaz. Buna kısa devre denir. Mesela b != 0 && a / b > 2 yazınca b 0 iken bölmeye hiç girilmez; tanımsız davranışa (sıfıra bölme) yol açmaz. Kısa devre olmasa a / b yine hesaplanırdı.
! tek operand alır (altıncı dersteki -sayi gibi). Sonuncu if koşulunda ise if (!hazir) “hazır değilse” demektir.

Parantezi bolca kullanabilirsin. a || b && c koşulunda && önceliği c++ daha önemlidir. Yani önce b && c değerlendirilir, ardından sonucu a ile || üzerinden birleştirilir. Eğer tam olarak onu istiyorsan bile ne kastettiğini a || (b && c) diye yaz ki sırayı ezberlemek zorunda hissetme. Tam tersini yapmak istersin ancak parantez koymazsın yanlış hatırladığın için. Sıkıntı çıkabilir.

Koşulu değişkende sunmak

cpp
const bool yetiskin{yas >= 18};
if (yetiskin) {
    std::cout << "yetiskin\n";
}

if (yetiskin == true) yazmana gerek yok. yetiskin zaten bool dur. == true boşa görüntü kirliliği. Yani (yetiskin) zaten true ve false döndürür.
const bool yetiskin{yas >= 18}; bu ise başka yerde tanımlı yas değişkeni 18'den büyük veya eşitse yetiskin bool değişkenini true yapar aksi halde false.

if içinde tanım

Üçüncü derste dar kapsamdan söz etmiştik: isim yalnızca kullanıldığı blokta yaşarsa kapsam daralır. Modern C++ için o değişkeni ifin () içine de koyabilirsin. Dışarı sızmaz. :

cpp
#include <iostream>

int main() {
    if (const int yas{21}; yas >= 18) {
        std::cout << "yetiskin\n";
    } else {
        std::cout << "kucuk, yas: " << yas << '\n';
    }
    // yas burada yok
    return 0;
}

;den önceki kısım tanım, sonraki kısım koşul. else içinde yas hâlâ görünür; if tamamen bitince yas tamamen ölür.

switch

if / else if ile tam sayıları tek tek == ile kontrol etmek her şeyi uzatoır. switch dediğimizz şey verilem değere göre dallar çıkartır:

cpp
#include <iostream>

int main() {
    int gun{3};

    switch (gun) {
        case 1:
            std::cout << "pazartesi\n";
            break;
        case 2:
            std::cout << "sali\n";
            break;
        case 3:
            std::cout << "carsamba\n";
            break;
        default:
            std::cout << "bilinmiyor\n";
            break;
    }
    return 0;
}

case yanına sabit ifade yazılır (beşinci ders: derleyicinin şimdiden bildiği tamsayı). gun == 3 olduğu için carsamba basılır.
break o dalı bitirir. Yazmazsan alttaki diğer case lere geçer: 3'ü yazmayı unutursan carsamba ve bilinmiyor hatası art arda çıkar. break kullanmamak hatadır.
default hiçbir case değeri karşılanmazsa çalışır. Koymak zorunda değilsin; tutmayan değer sessizce o case ı atlatır. Yani switch içindeki hiç bir case çalışmasa bile sorun yok. Bilinmeyen değeri almak istemiyorsan default koy.

switch; int, char, enum gibi tamsayı türlerinde çalışır. std::string ile switch yapılmaz; orada if / else if kullanılır.
İleride enum class diye bişeler göreceğiz. Yon::sol gibi isimler doğrudan 1 2 yerine geçicek, switch in o zaman daha okunur olacağını görürsünüz. Şimdilik tamsayı diye bilin.

Alıştırma

Kullanıcıdan bir int not u al (std::cin). 90 ve üzeri A, 70 ve üzeri B, 50 ve üzeri C, altındakiler kaldı şeklinde çıktı ürettir. {} ile başlat. if (notu = 90) yazmayı dene, derleyicinin ne dediğine bak, == ile düzelt.

Kaynaklar

Editör · Yazarresul
cpp