enum לקבועים בעלי שם
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C של Coddy. שיעור 55 מתוך 63.
בעת כתיבת תוכניות C, לעיתים קרובות יש צורך לעבוד עם קבוצות של ערכי קבועים קשורים. לדוגמה, ייתכן שתצטרך לייצג את ימי השבוע, את חודשי השנה או מצבים שונים בתוכנית. במקום להשתמש במספרים גולמיים כמו 0, 1, 2, אפשר להשתמש ב־enum כדי ליצור שמות בעלי משמעות עבור הקבועים האלה.
טיפוס מונה, או enum, מאפשר לך להגדיר קבוצה של קבועים שלמים בעלי שמות. כך הקוד שלך קריא הרבה יותר וקל יותר לתחזוקה. הנה התחביר הבסיסי:
enum DayOfWeek {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
};כברירת מחדל, השם הראשון מקבל את הערך 0, השני מקבל 1, וכן הלאה. לכן MONDAY שווה ל־0, TUESDAY שווה ל־1, ו־SUNDAY שווה ל־6. הגישה הזאת ברורה הרבה יותר מלזכור שיום 0 פירושו יום שני או שיום 6 פירושו יום ראשון.
השימוש ב-enum הופך את הקוד שלך לתיעודי בפני עצמו ועוזר למנוע שגיאות שעלולות להתרחש כשמשתמשים במספרי קסם לאורך התוכנית.
אפשר להצהיר על משתנים מטיפוס enum ולהקצות להם ערכי enum:
enum DayOfWeek today;
today = MONDAY; // מקצה 0 ל-todayאתגר
קלכתבו תוכנית C שמגדירה enum עבור צבעי רמזור ומדגימה את השימוש בו. על התוכנית שלכם:
- להגדיר
enumבשםTrafficLightעם הקבועים הבאים בסדר המדויק הזה:REDYELLOWGREEN
- בפונקציה הראשית:
- להכריז על משתנה מסוג
enum TrafficLightבשםcurrentLight - לקרוא מספר שלם מהקלט שמייצג את מצב הרמזור (0, 1 או 2)
- להקצות את ערך ה-enum המתאים ל-
currentLightבהתאם לקלט:- אם הקלט הוא 0, להקצות
RED - אם הקלט הוא 1, להקצות
YELLOW - אם הקלט הוא 2, להקצות
GREEN
- אם הקלט הוא 0, להקצות
- להדפיס את מצב הרמזור הנוכחי בפורמט המדויק הזה:
Current light: [enum_name] - להדפיס את הערך המספרי של הרמזור הנוכחי בפורמט המדויק הזה:
Numeric value: [number] - לקבוע ולהדפיס את הפעולה בהתאם למצב הרמזור הנוכחי:
- אם
RED: להדפיסAction: Stop - אם
YELLOW: להדפיסAction: Caution - אם
GREEN: להדפיסAction: Go
- אם
- לחשב ולהדפיס את הרמזור הבא ברצף:
- אם הרמזור הנוכחי הוא
RED(0), הבא הואGREEN(2) - אם הרמזור הנוכחי הוא
YELLOW(1), הבא הואRED(0) - אם הרמזור הנוכחי הוא
GREEN(2), הבא הואYELLOW(1)
- אם הרמזור הנוכחי הוא
- להדפיס את הרמזור הבא בפורמט המדויק הזה:
Next light: [enum_name]
- להכריז על משתנה מסוג
האתגר הזה מדגים כיצד קבועי enum הופכים את הקוד לקריא יותר משימוש במספרים גולמיים. במקום לזכור ש-0 מייצג אדום, 1 מייצג צהוב ו-2 מייצג ירוק, אפשר להשתמש בשמות בעלי משמעות כמו RED, YELLOW ו-GREEN. תתרגלו להגדיר enum, להשתמש בקבועי enum בהקצאות ובהשוואות, ולגשת לערכים השלמים הבסיסיים של קבועי enum.
נסו בעצמכם
#include <stdio.h>
// TODO: להגדיר כאן את ה-enum TrafficLight
int main() {
// לקרוא קלט
int input;
scanf("%d", &input);
// TODO: להכריז על המשתנה currentLight ולהקצות לו ערך enum על סמך הקלט
// TODO: להדפיס את מצב הרמזור הנוכחי
// TODO: להדפיס את הערך המספרי
// TODO: להדפיס את הפעולה בהתאם למצב הרמזור הנוכחי
// TODO: לחשב ולהדפיס את מצב הרמזור הבא
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 אונליין