Enums במשפטי switch
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C של Coddy. שיעור 57 מתוך 63.
אחד השילובים העוצמתיים ביותר בתכנות C הוא שימוש בערכי enum עם פקודות switch. השילוב הזה יוצר לוגיקה של זרימת בקרה קריאה וניתנת לתחזוקה במיוחד, שמבטאת בבירור את תהליך קבלת ההחלטות של התוכנית שלך.
כשמשתמשים בקבועי enum כמקרים במשפט switch, הקוד מתעד את עצמו. במקום לראות מספרים מסתוריים כמו case 0: או case 5:, רואים שמות בעלי משמעות שמעבירים מיד את מטרתם:
switch (day) {
case MONDAY:
case TUESDAY:
case WEDNESDAY:
case THURSDAY:
case FRIDAY:
printf("It's a weekday\n");
break;
case SATURDAY:
case SUNDAY:
printf("It's a weekend\n");
break;
}הגישה הזו הופכת את הקוד שלך להרבה יותר קל להבנה ולשינוי. כל מי שקורא את הקוד הזה יודע מיד מה כל מקרה מייצג, והוספת מקרים חדשים או שינוי הלוגיקה נעשים פשוטים. המהדר גם עוזר לזהות שגיאות — אם תאיית לא נכון קבוע של enum, תקבל שגיאת קומפילציה במקום באג שקט.
אתגר
קלצרו תוכנית C שמשתמשת ב-enum עם פקודת switch כדי לבנות מערכת פשוטה להמלצות מזג אוויר. התוכנית שלכם צריכה:
- להגדיר
enumבשםWeatherConditionעם הקבועים הבאים בסדר המדויק הזה:SUNNYCLOUDYRAINYSTORMYSNOWY
- לכתוב פונקציה בשם
getWeatherAdviceש:- מקבלת פרמטר מסוג
enum WeatherConditionבשםweather - לא מחזירה ערך (void)
- משתמשת בפקודת
switchכדי להדפיס עצה המתאימה למזג האוויר:- עבור
SUNNY: להדפיסPerfect day for outdoor activities! - עבור
CLOUDY: להדפיסGood day for a walk, no sun protection needed. - עבור
RAINY: להדפיסDon't forget your umbrella! - עבור
STORMY: להדפיסStay indoors and avoid travel. - עבור
SNOWY: להדפיסDrive carefully and dress warmly.
- עבור
- מקבלת פרמטר מסוג
- לכתוב פונקציה בשם
getActivitySuggestionש:- מקבלת פרמטר מסוג
enum WeatherConditionבשםweather - לא מחזירה ערך (void)
- משתמשת בפקודת
switchכדי להציע פעילויות בהתאם למזג האוויר:- עבור
SUNNY: להדפיסSuggested activity: Beach or hiking - עבור
CLOUDY: להדפיסSuggested activity: Photography or gardening - עבור
RAINY: להדפיסSuggested activity: Reading or indoor games - עבור
STORMY: להדפיסSuggested activity: Movie marathon - עבור
SNOWY: להדפיסSuggested activity: Skiing or hot cocoa
- עבור
- מקבלת פרמטר מסוג
- בפונקציה הראשית:
- להכריז על משתנה מסוג
enum WeatherConditionבשםcurrentWeather - לקרוא מספר שלם מהקלט שמייצג את מצב מזג האוויר (0, 1, 2, 3 או 4)
- להקצות ל-
currentWeatherאת ערך ה-enum המתאים בהתאם לקלט - להדפיס את מצב מזג האוויר הנוכחי בדיוק בפורמט הזה:
Current weather: [numeric_value] - לקרוא לפונקציה
getWeatherAdviceעםcurrentWeather - לקרוא לפונקציה
getActivitySuggestionעםcurrentWeather
- להכריז על משתנה מסוג
האתגר הזה מדגים את העוצמה שבשילוב enums עם פקודות switch ליצירת קוד קריא וקל לתחזוקה. במקום להשתמש במקרים מספריים מבלבלים בפקודות ה-switch שלכם, תשתמשו בקבועי enum בעלי משמעות שמבטאים בבירור את הלוגיקה של התוכנית. פקודת ה-switch מתעדת את עצמה, ולכן קל להבין מה מייצג כל מקרה ולשנות את ההתנהגות לפי הצורך.
נסו בעצמכם
#include <stdio.h>
// TODO: להגדיר כאן את ה-enum WeatherCondition
// TODO: לממש כאן את הפונקציה getWeatherAdvice
// TODO: לממש כאן את הפונקציה getActivitySuggestion
int main() {
// לקרוא קלט
int weatherInput;
scanf("%d", &weatherInput);
// TODO: להכריז על המשתנה currentWeather ולהקצות לו ערך enum על סמך הקלט
// TODO: להדפיס את תנאי מזג האוויר הנוכחי בפורמט "Current weather: [numeric_value]"
// TODO: לקרוא לפונקציה getWeatherAdvice
// TODO: לקרוא לפונקציה getActivitySuggestion
return 0;
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1יסודות המצביעים
מהו מצביע?הכרזה על מצביעיםאופרטור לקיחת הכתובת (&)אופרטור ביטול ההפניה (*)מצביעי NULLסיכום: יסודות המצביעים7מבנים (structs)
מהו struct?הכרזה על structיצירת משתני structגישה לאיברי structאתחול structסיכום: struct לנתוני תלמיד10Enums ו־typedef
enum לקבועים בעלי שםהכרזה על Enums ושימוש בהםEnums במשפטי switchשימוש ב־typedef ליצירת כינויים לטיפוסיםtypedef עם Structsסיכום: תרגול typedef ו־Enum2מצביעים ומערכים
שמות מערכים כמצביעיםאיברי מערך ומצביעיםאריתמטיקה של מצביעיםהשוואת מצביעיםסיכום: מעבר על מערך באמצעות מצביעים5מצביעים ופונקציות
העברה לפי ערךהעברת מצביעים לפונקציותשינוי משתנים באמצעות מצביעיםדוגמה קלאסית: החלפההעברת מערכים לפונקציותחזרה: ארגומנטים של מצביעי פונקציה3מערכי תווים ומחרוזות
מחרוזות כמערכי charתו הסיום nullקלט מחרוזת באמצעות scanfשימוש ב־strlen()שימוש ב־strcpy()שימוש ב־strcat()שימוש ב־strcmp()סיכום: פונקציות מחרוזת בסיסיותתרגלו בעצמכם: קומפיילר C אונליין