🚀 C# ile Programlamaya Giriş: Kodlamaya İlk Adımını At, Kendi Projelerini Geliştirmeye Başla!
00ANASAYFA 01YAZILAR 02EĞİTİM 03ELEKTRİK_ENERJİ 04OTOMOTİV_MÜHENDİSLİĞİ 05ARAÇLAR 06LAB 07SÖZLÜK 08ETİKETLER ♡OKUMA LİSTEM ⌕ARA
TRENG

Girdi ve çıktı: std::cin ile etkileşim

Kullanıcıdan veri oku, hatalı girişi yakala, metin satırı al ve çıktıyı biçimlendir; Ohm yasası hesaplayıcısıyla.

Şimdiye kadar yalnızca ekrana yazdık. Gerçek programlar kullanıcıdan veri alır. C++'ta okuma işi std::cin ile yapılır ve yazdırmada kullandığımız << operatörünün tersi olan >> operatörüne dayanır.

Ohm yasası hesaplayıcısı

Gerilim ve direnci kullanıcıdan alıp akımı ve gücü hesaplayalım.

#include <iostream>

int main() {
    double volt = 0.0;
    double direnc = 0.0;

    std::cout << "Gerilim (V): ";
    std::cin >> volt;
    std::cout << "Direnc (ohm): ";
    std::cin >> direnc;

    if (!std::cin || direnc <= 0.0) {
        std::cout << "Gecersiz giris!\n";
        return 1;
    }

    double akim = volt / direnc;
    std::cout << "Akim: " << akim << " A\n";
    std::cout << "Guc: " << volt * akim << " W\n";
    return 0;
}

Programı çalıştırıp 12 ve 4 girersek:

Gerilim (V): 12
Direnc (ohm): 4
Akim: 3 A
Guc: 36 W

std::cin >> volt; satırı, boşluğa ya da satır sonuna kadar olan metni okur ve volt değişkeninin tipine çevirir. İki değeri tek satırda da yazabilirsin: std::cin >> volt >> direnc;. Arada boşluk ya da Enter olması fark etmez.

Hatalı girişi yakalamak

Kullanıcı sayı yerine "abc" yazarsa std::cin bozuk (fail) duruma geçer. Bu durumu if (!std::cin) ile kontrol edebilirsin. Kontrolde ayrıca fiziksel olarak anlamsız değerleri de eledik: direnç sıfır ya da negatifse bölme yapmıyoruz. Koşullar (if) konusunu iki ders sonra ayrıntılı işleyeceğiz; şimdilik "eğer şart doğruysa içindeki satırları çalıştır" olarak oku.

Hatadan sonra devam etmek istiyorsan akışı onarman gerekir:

std::cin.clear();                                              // hata durumunu temizle
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // satırın kalanını at

İkinci satır için #include <limits> gerekir.

Boşluklu metin okumak: getline

std::cin >> ad yalnızca ilk kelimeyi okur. "Ali Veli" yazılmış tam bir satır almak için std::getline kullanılır. Ancak sayı okuduktan hemen sonra getline çağırırsan, sayıdan sonra kalan Enter karakterini okuyup boş bir metin alırsın. Çözüm, araya ignore koymaktır:

#include <iostream>
#include <limits>
#include <string>

int main() {
    int yas = 0;
    std::string ad;

    std::cout << "Yas: ";
    std::cin >> yas;
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

    std::cout << "Ad soyad: ";
    std::getline(std::cin, ad);

    std::cout << ad << ", " << yas << " yasinda\n";
    return 0;
}

Çıktıyı biçimlendirmek

<iomanip> başlığı çıktıyı düzenlemeni sağlar:

  • std::fixed ve std::setprecision(n): ondalık basamak sayısını belirler.
  • std::setw(n): bir sonraki değer için en az n karakterlik alan ayırır; tablo yazdırırken çok işe yarar.
  • std::left ve std::right: hizalamayı seçer.

Örneğin std::cout << std::fixed << std::setprecision(2) << 3.14159; ekrana 3.14 yazar. setprecision kalıcıdır; bir kere ayarlayınca sonraki sayıları da etkiler.

std::cerr hata mesajları için ayrı bir çıkış akışıdır. Programın çıktısını dosyaya yönlendirdiğinde (program > sonuc.txt) normal çıktı dosyaya gider ama hata mesajları ekranda kalır. Büyük projelerde bu ayrım çok işe yarar.

Kullanıcıdan gelen veriye asla güvenme. Sıfıra bölme, negatif direnç ya da harf girilmesi programı yanlış sonuca ya da çökmeye götürebilir. Her girişi doğrula.

Kendin dene

  1. Hesaplayıcıyı, akım ve direnç girilince gerilimi bulacak şekilde değiştir.
  2. Sonuçları iki ondalık basamakla yazdır.
  3. Kullanıcıdan bir ad ve bir yaş al, "Ahmet 25 yaşında" biçiminde yazdır.
  4. Sayı yerine harf girince programın "Gecersiz giris!" demesini dene.

// Mini sınav

Bir seçeneğe tıkla; doğru mu yanlış mı, anında ve nedeniyle birlikte göreceksin.

1. std::cin >> x; satırı ne yapar?
2. Boşluk içeren tam bir satırı (örn. “Ali Veli”) okumak için hangisi kullanılır?
3. Bir sayı okuduktan sonra getline çağırınca boş metin almamak için ne yapılmalıdır?

Bitirdiğinde işaretle: ilerlemen kaydolur, +20 XP kazanırsın.

İpucu: ← → tuşlarıyla dersler arasında gezinebilirsin.