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 veignore()hatalı girdiyi atar- temiz
eof()durumunu gerçek hatalardan ayırt edin;exceptions()istisna fırlatabilir vegcount()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
- ifstream ile Dosya Okuma
- ofstream ile Dosya Yazma
- İkili Dosya G/Ç
- Hata İşleme ve Durum