בלוקי 'try' ו-'catch'
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-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. כך נמנע קריסה של התוכנית שלך, ומתאפשר לך לספק למשתמשים משוב משמעותי כשמשהו משתבש.
אתגר
קלצרו תוכנית שמדגימה המרה בטוחה ממחרוזת למספר באמצעות בלוקים של try ו-catch. האתגר הזה יבדוק את ההבנה שלכם כיצד לטפל בחריגות שמתרחשות בעת המרת קלט משתמש ממחרוזות למספרים שלמים.
הקלט הבא יסופק:
- מחרוזת
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 התואם, וכך תמנע קריסה של התוכנית.
נסו בעצמכם
#include <iostream>
#include <string>
using namespace std;
int main() {
// קראו את הקלט
string userInput;
cin >> userInput;
// TODO: כתבו את הקוד שלכם למטה
// השתמשו בבלוקי try-catch עם std::stoi כדי להמיר את המחרוזת
return 0;
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מצביעים וזיכרון
מהו מצביע?אופרטור קבלת כתובתאופרטור ביטול הפניהמצביעי Nullמצביעים ומערכיםזיכרון דינמי באמצעות 'new'שחרור זיכרון באמצעות 'delete'סיכום — תרגול מצביעים2וקטורים (מערכים דינמיים)
היכרות עם std::vectorיצירת וקטורהוספת איבריםגישה לאיבריםגודל הווקטורמעבר על איברים באמצעות לולאת forלולאת for מבוססת טווחהסרת איבריםסיכום — פעולות על וקטורים5פרויקט: כלי לניהול מלאי
הגדרת הפרויקטהוספה ועדכון של פריטים8טיפול בסיסי בשגיאות
מבוא לחריגותבלוקי 'try' ו-'catch'מילת המפתח 'throw'סוגים שונים של חריגותמטפל לכל סוגי החריגותסיכום – חלוקה בטוחהתרגלו בעצמכם: קומפיילר C++ אונליין