0Pricing
C++ Academy · Ders

Hata İşleme ve Durum

Akış durumunu denetleyin

Hata İşleme ve Durum, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.

Akış durumu bitleri

Her akış, durum bayraklarıyla kendi koşulunu izler:

  • goodbit: her şey yolunda.
  • eofbit: dosya sonuna ulaşıldı.
  • failbit: mantıksal bir hata (biçim hatası).
  • badbit: ciddi bir G/Ç hatası.
#include <iostream>
#include <fstream>

int main() {
    std::ifstream in("missing_98765.txt");
    std::cout << std::boolalpha << "good: " << in.good() << '\n';
    return 0;
}

Akışı denetleme

Bir akış bool türüne dönüştürülür: kullanılabilir olduğunda true olur. if (!in) başarısızlığı kısa ve öz biçimde algılar.

#include <iostream>
#include <fstream>

int main() {
    std::ifstream in("nope_55555.txt");
    if (!in) std::cout << "stream not usable\n";
    else std::cout << "ok\n";
    return 0;
}

good, eof, fail, bad

Her bayrağın bir sorgu yöntemi vardır: good(), eof(), fail() ve bad().

#include <iostream>
#include <sstream>

int main() {
    std::istringstream s("abc");
    int x;
    s >> x; // fails: not a number
    std::cout << std::boolalpha;
    std::cout << "fail: " << s.fail() << '\n';
    std::cout << "bad: " << s.bad() << '\n';
    return 0;
}

Başarısız veri çekme

>> beklenen türü ayrıştıramadığında failbit ayarlanır ve hedef değişmeden bırakılır.

#include <iostream>
#include <sstream>

int main() {
    std::istringstream s("hello");
    int n = -1;
    if (!(s >> n)) std::cout << "could not read an int, n stays " << n << '\n';
    return 0;
}

Durumu temizleme

Bir fail bayrağı ayarlandıktan sonra, sıfırlamak için clear() çağrılana kadar akış kullanılamaz durumda kalır.

#include <iostream>
#include <sstream>

int main() {
    std::istringstream s("x 42");
    int n;
    s >> n;          // fails on 'x'
    s.clear();       // reset state
    std::string word;
    s >> word;       // now reads 'x'
    std::cout << "recovered: " << word << '\n';
    return 0;
}

Hatalı girdiyi yok sayma

clear() işleminden sonra yeniden denemeden önce sorun oluşturan karakterleri atmak için ignore() kullanın.

#include <iostream>
#include <sstream>
#include <limits>

int main() {
    std::istringstream s("bad 100");
    int n;
    while (!(s >> n)) {
        s.clear();
        s.ignore(std::numeric_limits<std::streamsize>::max(), ' ');
    }
    std::cout << "read " << n << '\n';
    return 0;
}

EOF ile hatayı ayırt etme

Bir okuma döngüsü sona erdikten sonra bunun temiz bir eof() durumu mu yoksa gerçek bir bad() başarısızlığı mı olduğunu denetleyin.

#include <iostream>
#include <sstream>

int main() {
    std::istringstream s("1 2 3");
    int x;
    while (s >> x) {}
    std::cout << std::boolalpha << "reached eof: " << s.eof() << '\n';
    std::cout << "hardware error: " << s.bad() << '\n';
    return 0;
}

Açtıktan sonra denetleme

Eksik veya okunamayan bir yol nedeniyle hızlıca başarısız olmak için dosyayı açtıktan hemen sonra akışı her zaman doğrulayın.

#include <iostream>
#include <fstream>

int main() {
    std::ifstream in("absent_11111.txt");
    if (!in.is_open()) {
        std::cout << "open failed, aborting\n";
        return 1;
    }
    std::cout << "never reached\n";
    return 0;
}

exceptions özelliğini etkinleştirme

exceptions() ile akışın hatalarda istisna fırlatmasını sağlayabilir, sessiz başarısızlıkları yakalanabilir std::ios_base::failure durumlarına dönüştürebilirsiniz.

#include <iostream>
#include <fstream>

int main() {
    std::ifstream in;
    in.exceptions(std::ios::failbit);
    try {
        in.open("ghost_22222.txt");
    } catch (const std::exception& e) {
        std::cout << "caught open failure\n";
    }
    return 0;
}

Okuma sayılarını doğrulama

İkili bir read işleminden sonra gcount(), gerçekte kaç bayt okunduğunu bildirir ve eksik okumaları algılamanızı sağlar.

#include <iostream>
#include <fstream>

int main() {
    int v = 9;
    std::ofstream("g.bin", std::ios::binary).write(reinterpret_cast<const char*>(&v), sizeof(v));
    int out;
    std::ifstream in("g.bin", std::ios::binary);
    in.read(reinterpret_cast<char*>(&out), sizeof(out));
    std::cout << "read " << in.gcount() << " bytes\n";
    return 0;
}

Sağlam bir okuma döngüsü

Teknikleri birleştirin: döngü içinde akışı denetleyin, ardından döngü sona erdiğinde temiz bir bitişi hatadan ayırt edin.

#include <iostream>
#include <sstream>

int main() {
    std::istringstream s("5 10 15");
    int total = 0, x;
    while (s >> x) total += x;
    if (s.eof()) std::cout << "sum = " << total << " (clean)\n";
    else std::cout << "error during read\n";
    return 0;
}

Hızlı Kontrol

Akış durumu konusundaki anlayışınızı sınayın.

Özet

Akış hatalarının ele alınmasını öğrendiniz:

  • good/eof/fail/bad durum bayrakları, kendi yöntemleriyle sorgulanabilir veya akış bool olarak denetlenebilir
  • clear() durumu sıfırlar ve ignore() hatalı girdiyi atar
  • temiz eof() durumunu gerçek hatalardan ayırt edin; exceptions() istisna fırlatabilir ve gcount() ikili okumaları doğrular

Sonraki ders: <random> ile rastgele sayılar üretme.

Sıkça Sorulan Sorular

“Hata İşleme ve Durum” dersi ücretsiz mi?

Evet — “Hata İşleme ve Durum” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.

“Hata İşleme ve Durum” dersinde ne öğreneceğim?

Akış durumunu denetleyin C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C++ Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Hata İşleme ve Durum” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. ifstream ile Dosya Okuma
  2. ofstream ile Dosya Yazma
  3. İkili Dosya G/Ç
  4. Hata İşleme ve Durum
← C++ Academy Sayfasına Dön