try/catch
- C++ kursu
- Başlangıç
- Ders 100/116
- 5 dk
try/catch ile çalışma zamanı hatalarını yakalamayı öğrenirsin.
try/catch ile hata yakalama
C++'ta çalışma zamanı hatası (istisna) oluştuğunda program normalde çöker. Bunu önlemek için riskli kodu try bloğuna, hata yakalama kodunu ise catch bloğuna yazarsın. İstisna fırlatıldığında catch bloğu çalışır ve program yoluna devam eder.
try {
int n = stoi("abc");
} catch (const std::invalid_argument& e) {
cout << "Hata";
}Burada stoi("abc") bir std::invalid_argument fırlatır; bu istisna catch bloğu tarafından yakalanır ve program çökmeden devam eder. #include <stdexcept> başlığı istisna türlerini getirir.
catch bloğu ve istisna türü
Her catch bloğu belirli bir istisna türünü yakalar. Tür, parantez içinde referans olarak bildirilir: catch (const std::exception& e). Bu biçim hem kopyalamayı önler hem de türetilmiş türleri temel türle yakalamanı sağlar.
try {
throw std::runtime_error("yanlış");
} catch (const std::exception& e) {
cout << e.what();
}Burada std::runtime_error, std::exception'dan türetildiği için onun catch bloğu tarafından yakalanır. e.what() ise istisnanın açıklama dizesini döndürür.
Uygulama stoi hatasını yakala
#include <stdexcept> başlığını ekle. try bloğu içinde int n = stoi("abc"); çağrısı yap. catch (const std::invalid_argument& e) bloğu içinde cout << "Hata" << endl; yazdır.
Başlangıç kodu
#include <iostream>
#include <string>
// stdexcept başlığını ekle
using namespace std;
int main() {
// try ile stoi çağrısı yap, catch ile hatayı yazdır
return 0;
}Örnek çözüm
#include <iostream>
#include <string>
#include <stdexcept>
using namespace std;
int main() {
try {
int n = stoi("abc");
} catch (const std::invalid_argument& e) {
cout << "Hata" << endl;
}
return 0;
}Beklenen çıktı
Hata
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 try bloğunda istisna fırlatıldığında ne olur?
- catch bloğu çalışır Doğru cevap
- Program çöker
- try bloğu devam eder
- Derleme hatasıdır
Açıklama: İstisna fırlatılınca try bloğu kesilir ve catch çalışır.
2 Boşluğu doldur: catch bloğu
try {
throw std::runtime_error("x");
}
____ (const std::exception& e) {
cout << e.what();
}
try {
throw std::runtime_error("x");
}
catch (const std::exception& e) {
cout << e.what();
}
Açıklama: catch anahtar sözcüğü istisnayı yakalar.
3 Bloğu göreviyle eşleştir
| Kavram | Anlamı |
|---|---|
try |
riskli kod |
catch |
hatayı yakalar |
throw |
istisna fırlatır |