كتل '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. هذا يمنع برنامجك من الانهيار ويسمح لك بتقديم ملاحظات مفيدة للمستخدمين عندما تسوء الأمور.
التحدي
سهلقم بإنشاء برنامج يوضح التحويل الآمن من سلسلة نصية (string) إلى رقم باستخدام كتل try و catch. سيختبر هذا التحدي فهمك لكيفية التعامل مع الاستثناءات (exceptions) التي تحدث عند تحويل مدخلات المستخدم من سلاسل نصية إلى أعداد صحيحة.
سيتم توفير المدخلات التالية:
- سلسلة نصية
userInputقد تمثل أو لا تمثل عدداً صحيحاً صالحاً
يجب على برنامجك القيام بما يلي:
- وضع عملية التحويل من سلسلة نصية إلى عدد صحيح داخل كتلة
tryباستخدامstd::stoi - إذا نجح التحويل، قم بطباعة الرقم المحول مع رسالة نجاح
- استخدم كتلة
catchللتعامل مع استثناءاتstd::invalid_argumentالتي تحدث عندما تحتوي السلسلة النصية على أحرف غير رقمية - في كتلة 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;
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1المؤشرات والذاكرة
ما هو المؤشر؟معامل العنوان (Address-Of)معامل الوصول للقيمة (Dereference)المؤشرات الفارغة (Null Pointers)المؤشرات والمصفوفاتالذاكرة الديناميكية باستخدام 'new'تحرير الذاكرة باستخدام 'delete'مراجعة - تمارين على المؤشرات2المتجهات (المصفوفات الديناميكية)
مقدمة إلى std::vectorإنشاء Vectorإضافة العناصرالوصول إلى العناصرحجم الـ Vectorالتكرار باستخدام For Loopالـ Range-Based For Loopإزالة العناصرملخص - عمليات الـ Vector5مشروع: أداة المخزون
إعداد المشروعإضافة وتحديث العناصر8أساسيات معالجة الأخطاء
مقدمة في الاستثناءاتكتل 'try' و 'catch'الكلمة المفتاحية 'throw'أنواع الاستثناءات المختلفةمعالج كافة الاستثناءاتمراجعة - القسمة الآمنة