CodeBlanks Logo Icon CodeBlanks

Hata yönetimi

try/catch ile girdi doğrulama ve hata yönetimi eklersin.

Özel istisna ile doğrulama

Bu derste addTask işlevine bir doğrulama ekleyeceğiz. Başlık boşsa InvalidTaskException istisnası fırlatılacak; çağıran kod bunu try/catch ile yakalayıp kullanıcıya mesaj gösterecek.

InvalidTaskException, std::exception'dan türetilmiş bir sınıftır; what() metodunu geçersiz kılarak özel mesaj döndürür. Bu sayede program, geçersiz girişlerde çökmeden uygun bir yanıt verebilir.

try/catch ile yakalama

addTask çağrısını try bloğuna alırsın; istisna fırlatıldığında catch bloğu çalışır. catch (const InvalidTaskException& e) biçiminde yakalanan istisnanın mesajına e.what() ile erişilir.

try {
    addTask(tasks, "", "bekliyor");
} catch (const InvalidTaskException& e) {
    cout << e.what();
}

Burada boş başlık InvalidTaskException fırlatır; catch bunu yakalayıp mesajı yazdırır. Program çökmeden yoluna devam eder. Bu desen, kullanıcı girişi doğrulamanın standart yoludur.

Uygulama InvalidTaskException sınıfı ekle

class InvalidTaskException : public std::exception tanımla; public: bloğunda const char* what() const noexcept override { return "geçersiz görev"; } yaz. addTask işlevinin başına if (title.empty()) throw InvalidTaskException(); ekle. main içinde printMenu(); çağrısından sonra try { addTask(tasks, "Ödev", "bekliyor"); addTask(tasks, "", "bekliyor"); } catch (const InvalidTaskException& e) { cout << e.what() << endl; } ve en son listTasks(tasks); çağrısı ekle.

Başlangıç kodu

main.cpp
#include <iostream>
#include <string>
#include <vector>
#include <stdexcept>
using namespace std;

struct Task {
    string title;
    string status;
};

// InvalidTaskException sınıfını tanımla

void printMenu() {
    cout << "1 - Ekle" << endl;
    cout << "2 - Listele" << endl;
    cout << "3 - Çıkış" << endl;
}

void addTask(vector<Task>& tasks, string title, string status) {
    // boş başlık için throw ekle
    Task t;
    t.title = title;
    t.status = status;
    tasks.push_back(t);
}

void listTasks(const vector<Task>& tasks) {
    for (Task t : tasks) {
        cout << t.title << " - " << t.status << endl;
    }
}

int main() {
    printMenu();
    vector<Task> tasks;
    // try/catch ile addTask çağrısı ve listTasks ekle
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>
#include <string>
#include <vector>
#include <stdexcept>
using namespace std;

struct Task {
    string title;
    string status;
};

class InvalidTaskException : public std::exception {
public:
    const char* what() const noexcept override {
        return "geçersiz görev";
    }
};

void printMenu() {
    cout << "1 - Ekle" << endl;
    cout << "2 - Listele" << endl;
    cout << "3 - Çıkış" << endl;
}

void addTask(vector<Task>& tasks, string title, string status) {
    if (title.empty()) throw InvalidTaskException();
    Task t;
    t.title = title;
    t.status = status;
    tasks.push_back(t);
}

void listTasks(const vector<Task>& tasks) {
    for (Task t : tasks) {
        cout << t.title << " - " << t.status << endl;
    }
}

int main() {
    printMenu();
    vector<Task> tasks;
    try {
        addTask(tasks, "Ödev", "bekliyor");
        addTask(tasks, "", "bekliyor");
    } catch (const InvalidTaskException& e) {
        cout << e.what() << endl;
    }
    listTasks(tasks);
    return 0;
}

Beklenen çıktı

1 - Ekle
2 - Listele
3 - Çıkış
geçersiz görev
Ödev - bekliyor

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Boşluğu doldur: throw çağrısı

Soru
if (title.empty()) {
    ____ InvalidTaskException();
}
Cevap
if (title.empty()) {
    throw InvalidTaskException();
}

Açıklama: throw ile istisna fırlatılır.

2 addTask'ta boş başlık nasıl bildirilir?

  • Program çöker
  • 0 döndürür
  • Yoksayar
  • InvalidTaskException fırlatır Doğru cevap

Açıklama: Boş başlıkta InvalidTaskException fırlatılır.

3 Bloğu göreviyle eşleştir

Kavram Anlamı
try addTask çağrısı
throw istisna fırlatır
catch mesajı yazdırır

Başlangıç bölümündeki tüm dersler