Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

كتل 'try' و 'catch'

جزء من قسم Logic & Flow في رحلة C++ على Coddy — الدرس 49 من 56.

تعمل كتلتا try و catch معًا لإنشاء شبكة أمان لبرمجتك. حيث تضع الكود الذي قد يكون محفوفًا بالمخاطر داخل كتلة try، وإذا حدث استثناء، ينتقل البرنامج إلى كتلة catch المقابلة لمعالجة الخطأ بشكل لائق.

إليك هيكل بناء الجملة الأساسي:

try {
    // الكود الذي قد يطرح استثناءً
} catch (exception_type e) {
    // الكود الخاص بمعالجة الاستثناء
}

يتضمن المثال العملي تحويل السلاسل النصية إلى أرقام باستخدام std::stoi، والذي يمكن أن يطرح استثناءً من نوع std::invalid_argument إذا كانت السلسلة النصية تحتوي على أحرف غير رقمية:

try {
    std::string input = "abc";
    int number = std::stoi(input);  // سيؤدي هذا إلى طرح استثناء
    std::cout << "Number: " << number << std::endl;
} catch (std::invalid_argument& e) {
    std::cout << "Invalid input! Please enter a valid number." << std::endl;
}

عندما يحدث الاستثناء في كتلة try، يتوقف البرنامج فوراً عن تنفيذ الكود المتبقي في تلك الكتلة وينتقل إلى كتلة catch. هذا يمنع برنامجك من الانهيار ويسمح لك بتقديم ملاحظات مفيدة للمستخدمين عندما تسوء الأمور.

challenge icon

التحدي

سهل

قم بإنشاء برنامج يوضح التحويل الآمن من سلسلة نصية (string) إلى رقم باستخدام كتل try و catch. سيختبر هذا التحدي فهمك لكيفية التعامل مع الاستثناءات (exceptions) التي تحدث عند تحويل مدخلات المستخدم من سلاسل نصية إلى أعداد صحيحة.

سيتم توفير المدخلات التالية:

  • سلسلة نصية userInput قد تمثل أو لا تمثل عدداً صحيحاً صالحاً

يجب على برنامجك القيام بما يلي:

  1. وضع عملية التحويل من سلسلة نصية إلى عدد صحيح داخل كتلة try باستخدام std::stoi
  2. إذا نجح التحويل، قم بطباعة الرقم المحول مع رسالة نجاح
  3. استخدم كتلة catch للتعامل مع استثناءات std::invalid_argument التي تحدث عندما تحتوي السلسلة النصية على أحرف غير رقمية
  4. في كتلة catch، قم بطباعة رسالة خطأ تشير إلى أن المدخلات كانت غير صالحة

استخدم تنسيق المخرجات الدقيق التالي:

للتحويل الناجح:

Valid number: [converted_number]

للمدخلات غير الصالحة التي تثير استثناءً:

Error: Invalid input

تذكر أن std::stoi سيرمي استثناءً من نوع std::invalid_argument عندما يواجه سلسلة نصية لا يمكن تحويلها إلى عدد صحيح. يجب أن تحتوي كتلة try على محاولة التحويل، ويجب أن تحدد كتلة catch نوع الاستثناء كـ std::invalid_argument& للتعامل مع هذا الخطأ المحدد. عند حدوث استثناء، سينتقل البرنامج فوراً من كتلة try إلى كتلة catch المطابقة، مما يمنع البرنامج من الانهيار.

ورقة مرجعية

استخدم كتل try و catch للتعامل مع الاستثناءات بأمان:

try {
    // الكود الذي قد يطرح استثناءً
} catch (exception_type e) {
    // الكود للتعامل مع الاستثناء
}

مثال مع تحويل السلسلة النصية إلى عدد صحيح باستخدام std::stoi:

try {
    std::string input = "abc";
    int number = std::stoi(input);  // سيؤدي هذا إلى طرح استثناء
    std::cout << "Number: " << number << std::endl;
} catch (std::invalid_argument& e) {
    std::cout << "Invalid input! Please enter a valid number." << std::endl;
}

عند حدوث استثناء في كتلة try، ينتقل البرنامج فوراً إلى كتلة catch المقابلة، مما يمنع الانهيارات ويسمح بمعالجة الأخطاء بشكل سلس.

جرّب بنفسك

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

int main() {
    // قراءة المدخلات
    string userInput;
    cin >> userInput;
    
    // TODO: اكتب كودك أدناه
    // استخدم كتل try-catch مع std::stoi لتحويل السلسلة النصية
    
    return 0;
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow