Menu
Coddy logo textTech

בלוקי '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. כך נמנע קריסה של התוכנית שלך, ומתאפשר לך לספק למשתמשים משוב משמעותי כשמשהו משתבש.

challenge icon

אתגר

קל

צרו תוכנית שמדגימה המרה בטוחה ממחרוזת למספר באמצעות בלוקים של try ו-catch. האתגר הזה יבדוק את ההבנה שלכם כיצד לטפל בחריגות שמתרחשות בעת המרת קלט משתמש ממחרוזות למספרים שלמים.

הקלט הבא יסופק:

  • מחרוזת 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 התואם, וכך תמנע קריסה של התוכנית.

נסו בעצמכם

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

int main() {
    // קראו את הקלט
    string userInput;
    cin >> userInput;
    
    // TODO: כתבו את הקוד שלכם למטה
    // השתמשו בבלוקי try-catch עם std::stoi כדי להמיר את המחרוזת
    
    return 0;
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר C++ אונליין