Programına karar verdir: karşılaştırma ve mantık operatörleri, if-else zinciri, switch ve üçlü operatör.
Program her zaman aynı satırları sırayla çalıştırmaz; veriye göre yol seçmesi gerekir. Pil gerilimi düşükse uyarı ver, direnç sıfırsa bölme yapma, menüden seçilen işlemi çalıştır. Bunların hepsi koşullu yapılarla yazılır.
Karşılaştırma ve mantık operatörleri
| Operatör | Anlamı |
|---|---|
== != | eşit, eşit değil |
< <= > >= | küçük, küçük eşit, büyük, büyük eşit |
&& | ve (ikisi de doğru) |
|| | veya (en az biri doğru) |
! | değil |
if, else if, else
Tek hücreli bir Li-ion pilin gerilimine göre doluluk durumunu yazdıralım:
#include <iostream>
int main() {
double voltaj = 3.9;
if (voltaj >= 4.1) {
std::cout << "Dolu\n";
} else if (voltaj >= 3.7) {
std::cout << "Iyi\n";
} else if (voltaj >= 3.3) {
std::cout << "Dusuk\n";
} else {
std::cout << "Kritik\n";
}
// Birlesik kosul: guvenli calisma araligi
if (voltaj > 3.0 && voltaj < 4.2) {
std::cout << "Aralik icinde\n";
}
// Ucli operator
const char* durum = (voltaj >= 3.7) ? "devam" : "sarj et";
std::cout << "Karar: " << durum << '\n';
// switch: menu secimi
int secim = 2;
switch (secim) {
case 1:
std::cout << "Birinci\n";
break;
case 2:
std::cout << "Ikinci\n";
break;
case 3:
std::cout << "Ucuncu\n";
break;
default:
std::cout << "Gecersiz\n";
break;
}
return 0;
}
Iyi
Aralik icinde
Karar: devam
Ikinci
Zincir yukarıdan aşağı değerlendirilir ve ilk doğru olan dal çalışır, geri kalanlara bakılmaz. 3.9 değeri 4.1'den küçük olduğu için ilk dal atlanır, ikinci dal (>= 3.7) doğru çıkar. Sıralamanın önemli olduğuna dikkat et: eşikleri küçükten büyüğe dizersen ilk koşul hep doğru çıkar.
switch ne zaman?
switch tek bir tam sayı (ya da karakter, enum) değerini sabit değerlerle karşılaştırır. Menü seçimleri, durum makineleri ve komut kodları için idealdir. Her case sonunda break yazmayı unutma; yazmazsan program bir alttaki case'e de "düşer" (fall-through). Bu bazen bilinçli kullanılır ama çoğunlukla hatadır. default dalı, hiçbir case uymadığında çalışır.
switch, ondalıklı sayılarla ya da metinle çalışmaz; orada if zinciri kullanırsın.
Üçlü operatör
koşul ? a : b biçimi, koşul doğruysa a, değilse b değerini üretir. Kısa atamalarda şıktır; iç içe kullanmaya başlarsan okunmaz hale gelir, o zaman if yaz.
C++17: if içinde ilk değer
C++17 ile if içinde bir değişken tanımlayıp hemen sınayabilirsin. Değişken yalnızca bu if bloğunda yaşar:
if (int hata = hataKoduOku(); hata != 0) {
std::cout << "Hata kodu: " << hata << '\n';
}
Burada hataKoduOku sana kalmış bir fonksiyon; örnek yalnızca yazımı göstermek için.
Klasik tuzak: if (x = 5) yazmak. Bu bir karşılaştırma değil atamadır; x 5 olur ve koşul her zaman doğru sayılır. Karşılaştırma için çift eşittir kullan: if (x == 5). -Wall bayrağı çoğu zaman bu hatayı uyarı olarak gösterir.
Ondalıklı sayıları == ile karşılaştırma. 0.1 + 0.2 == 0.3 ifadesi yanlış çıkar çünkü ikili gösterimde bu sayılar tam saklanamaz. Bunun yerine farkın küçük bir eşikten az olup olmadığına bak: std::abs(a - b) < 1e-9 (<cmath> başlığı gerekir).
Kendin dene
- Bir sıcaklık değeri için "Soğuk" (<10), "Ilık" (10-25) ve "Sıcak" (>25) yazdıran if-else zinciri yaz.
- Menü programı yaz: 1 = akım, 2 = güç, 3 = çıkış.
switchile seçimi işle. - Önceki dersteki Ohm hesaplayıcısına "direnç sıfırsa hata ver" kontrolünü kendi başına ekle.
// Mini sınav
Bir seçeneğe tıkla; doğru mu yanlış mı, anında ve nedeniyle birlikte göreceksin.
Bitirdiğinde işaretle: ilerlemen kaydolur, +20 XP kazanırsın.
İpucu: ← → tuşlarıyla dersler arasında gezinebilirsin.