עבור לתוכן

כמה שאלות בשפת C

Featured Replies

פורסם

התחלתי ללמוד C מהספר "הנדסת תוכנה בשפת C" ויש כמה דברים שאינ לא מבין :

1) למה משתמשים ב ENUM . כתוב בספר ש"ההוראה ENUM משמשת להגדת משתנים היכולים לקבל ערכים מתוך תת תחום מסויים"

מזה "תת תחום" ומתי משתמשים בזה?

2) למה משתמשים ב typedef ?

3) x=scanf("%d",&max);

מה מקבל X ? את כמות המספרים שהקלדתי או רק 1/0 אם הקלט נכון או לא ?

פורסם

שלום neogod :xyxthumbs:

גם לי יש את הספר הזה , נראה לי אחלה ספר .

אם אני לא טועה אתה מדבר על עמוד 62 ?

1)על יד enum אתה מגדיר משתנה שיש לו תת תחום כפי שאתה רוצה , כמו בדוגמא בספר

 enum day {sun=1 , mon=2 , tue=3 , wed=4 , thu=5 , fri=6 , sat=7}

אז על ידי זה אתה מגדיר משתנים לדוגמא:

 enum day day1, day2 ;

day1 ו day2 הם עכשיו משתנים שיכולים לקבל רק ערכים מהתת תחום שהגדרנו (ימי השבוע )

אם אתה רוצה הסבר יותר מעמיק , תחכה למומחים , כי אני ממש נוב גדול בתכנות :-\

פורסם
  • מחבר

העתקת לי את ההסבר מהספר,שאותו לא ממש הבנתי

אני צריך הסבר יותר מפורט

אבל תודה בכל מקרה

פורסם

1) קודם כל, אתה מדבר על C++. בC אין ENUM.

שנית, ENUM מאפשר לך להתאים קבועים לערכים מסויימים כדי שהקוד יהייה יותר ברור. הדוגמה שניתנה כאן מתאימה כל יום בשבוע למספר מסויים. כדי להגיד שהערך של משתנה day מסויים הוא יום ראשון, אתה צריך לרשום פשוט:

day_var = sun

במקום day_var = 1

2) TYPEDEF מאפשר לך לתת שם שונה לסוג מסויים של משתנה כדי שהתכנות יהייה ברור יותר.

typedef int s;

יגרום לכך שכל פעם שתרשום

s a;

זה יהייה כאילו רשמת

int a;

זה בעצם מגדיר לך סוג חדש שם משתנה, עם כל מה שכרוך בכך. אתה יכול לרשום גם

s* a;

וזה יגדיר לך מצביע ל- S.

אתה יכול גם לרשום

typedef char* str;

וכל פעם שתרשום

str s;

זה יהייה כאילו רשמת

char* s;

פורסם

הבהרה לגבי הגדרת קבועים: שימוש ב-enum זה על מנת להגדיר קבועים שהם מספרים שלמים. הוא עדיף על define ברוב המקרים לשימוש זה.


/* instead of this: */
#define NUM_ITERATIONS 50
#define MAX_LENGTH 3000

/* you can do that: */
enum {
NUM_ITERATIONS = 50,
MAX_LENGTH = 3000
} ;

פורסם

ד.א. DEFINE שונה מENUM בדברים הבאים:

1) SCOPE - לא כל אחד מכיר את הENUM, אלא רק מי שמתחת למחלקה שהגדירה אותו. אז זה PUBLIC אז כולם מכירים.

2) אם יש לך 2 ENUM אתה לא יכול לערבב ביניהם.

3) DEFINE מתבצע עוד לפני הקומפילציה.

4) אולי עוד דברים ששכחתי.

פורסם
  • מחבר

1 לפי מה שהבנתי ה ENUM זה מין מערכך שאני מכניס נתונים (רק מספרים שלמים) ואני יכול לקרוא לנתונים כמו שאינ קורא ממערך ?

2 אני לא מבין למה שימושי TYPYDEF ?

פורסם

קודם כל - enum יש גם ב-C, לא רק ב-C++ (במקור לא היה, אבל בסטנדרט C יש).

enum ו-typedef - השימוש העיקרי שלהם הוא לגרום לקוד שלך להיראות יותר טוב, ויותר קריא.

נניח שאתה כותב פונקציה שמקבלת את החודש הנוכחי (ינואר, פברואר וכו') ומבצעת בו חישוב כלשהו (לדוגמה, כמה ימים יש בו).

סתם ככה, היית כנראה מגדיר את הפונקציה ככה:

int calculate(int month)
{
switch(month) {
case 1:
return 31;
case 2:
return 28;
case 3:
return 31;
// and so on
}
}

אבל מה? מי שקורא את הפונקציה, לא יכול להיות בטוח מה הכוונה. האם ינואר הוא 0 או 1? מה יקרה אם תתן מספר חודש גדול מ-12?

לכן, תגדיר enum שמייצג חודש, ככה:

enum Month
{
JAN,
FEB,
MAR,
APR,
MAY,
JUN,
JUL,
AUG,
SEP,
OCT,
NOV,
DEC
}

ואז תכתוב את הפונקציה ככה:

int calculate(Month m)
{
switch(m) {
case JAN:
return 31;
case FEB:
return 28;
case MAR:
return 31;
// and so on
}
}

שתי הפונקציות יעשו בדיוק אותו דבר, אבל הצורה השנייה הרבה יותר קריאה (כלומר מי שקורא את הקוד שלך יבין אותו יותר בקלות).

שים לב שלא נתתי ערכים מספריים ל-enum - כברירת מחדל, הוא נותן להם ערכים מ-0 והלאה (כך ש-JAN == 0, FEB == 1, וכן הלאה). כמובן אפשר גם לתת להם ערכים, אבל לא חייבים.

typedef הוא פשוט שם נרדף לטיפוס מסוים. גם בו משתמשים בעיקר כדי שהתוכנית שלך תהיה יותר קריאה.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים