Menu
Coddy logo textTech

'try' ve 'catch' Blokları

Coddy'nin C++ Journey'sinin Mantık & Akış bölümünün bir parçası — ders 49 / 56.

try ve catch blokları, kodunuz için bir güvenlik ağı oluşturmak üzere birlikte çalışır. Potansiyel olarak riskli kodları bir try bloğunun içine yerleştirirsiniz ve bir istisna oluşursa program, hatayı düzgün bir şekilde ele almak için ilgili catch bloğuna atlar.

İşte temel sözdizimi yapısı:

try {
    // İstisna fırlatabilecek kod
} catch (exception_type e) {
    // İstisnayı işleyecek kod
}

Pratik bir örnek, dizeleri sayılara dönüştürmek için std::stoi kullanılmasını içerir; bu, dize sayısal olmayan karakterler içeriyorsa bir std::invalid_argument istisnası fırlatabilir:

try {
    std::string input = "abc";
    int number = std::stoi(input);  // Bu bir istisna fırlatacaktır
    std::cout << "Number: " << number << std::endl;
} catch (std::invalid_argument& e) {
    std::cout << "Invalid input! Please enter a valid number." << std::endl;
}

try bloğunda bir istisna oluştuğunda, program o bloktaki geri kalan kodun yürütülmesini hemen durdurur ve catch bloğuna atlar. Bu, programınızın çökmesini önler ve işler ters gittiğinde kullanıcılara anlamlı geri bildirimler sağlamanıza olanak tanır.

challenge icon

Görev

Kolay

try ve catch bloklarını kullanarak güvenli dizeden sayıya dönüştürmeyi gösteren bir program oluşturun. Bu görev, kullanıcı girişini dizelerden tam sayılara dönüştürürken oluşan istisnaları (exceptions) nasıl yöneteceğiniz konusundaki anlayışınızı test edecektir.

Aşağıdaki girdi sağlanacaktır:

  • Geçerli bir tam sayıyı temsil edebilecek veya etmeyebilecek bir userInput dizesi

Programınız şunları yapmalıdır:

  1. Dizeden tam sayıya dönüştürme işlemini std::stoi kullanarak bir try bloğu içine yerleştirin
  2. Dönüştürme başarılı olursa, dönüştürülen sayıyı bir başarı mesajıyla birlikte yazdırın
  3. Dize sayısal olmayan karakterler içerdiğinde oluşan std::invalid_argument istisnalarını işlemek için bir catch bloğu kullanın
  4. Catch bloğunda, girdinin geçersiz olduğunu belirten bir hata mesajı yazdırın

Aşağıdaki tam çıktı formatını kullanın:

Başarılı dönüştürme için:

Valid number: [converted_number]

İstisna fırlatan geçersiz girdi için:

Error: Invalid input

std::stoi fonksiyonunun, tam sayıya dönüştürülemeyen bir dizeyle karşılaştığında bir std::invalid_argument istisnası fırlatacağını unutmayın. try bloğu dönüştürme girişimini içermeli ve catch bloğu bu özel hatayı işlemek için istisna türünü std::invalid_argument& olarak belirtmelidir. Bir istisna oluştuğunda, program hemen try bloğundan eşleşen catch bloğuna atlayarak programın çökmesini önleyecektir.

Kopya kağıdı

İstisnaları güvenli bir şekilde işlemek için try ve catch bloklarını kullanın:

try {
    // İstisna fırlatabilecek kod
} catch (exception_type e) {
    // İstisnayı işleyecek kod
}

std::stoi dizeden tam sayıya dönüştürme ile ilgili örnek:

try {
    std::string input = "abc";
    int number = std::stoi(input);  // Bu bir istisna fırlatacaktır
    std::cout << "Number: " << number << std::endl;
} catch (std::invalid_argument& e) {
    std::cout << "Invalid input! Please enter a valid number." << std::endl;
}

try bloğunda bir istisna oluştuğunda, program hemen ilgili catch bloğuna atlar; bu da çökmeleri önler ve hataların kontrollü bir şekilde ele alınmasını sağlar.

Kendin dene

#include <iostream>
#include <string>
using namespace std;

int main() {
    // Girdiyi oku
    string userInput;
    cin >> userInput;
    
    // YAPILACAK: Kodunuzu aşağıya yazın
    // Dizeyi dönüştürmek için std::stoi ile try-catch bloklarını kullanın
    
    return 0;
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık & Akış bölümündeki tüm dersler