גישה לאיברי struct
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C של Coddy. שיעור 41 מתוך 63.
עכשיו, כשאתה יכול ליצור משתני struct, עליך ללמוד כיצד לעבוד עם הנתונים המאוחסנים בתוכם. אופרטור הנקודה (.) הוא המפתח שלך לגישה לאיברים הבודדים של משתנה struct ולשינוים.
התחביר לגישה לחברי struct פשוט:
structVariable.memberNameבעזרת דוגמת המבנה Point שלנו, אפשר גם לקרוא את הערכים של השדות שלו וגם לכתוב בהם:
struct Point p1;
// כתיבה לשדות של struct
p1.x = 10;
p1.y = 20;
// קריאה משדות של struct
printf("Point coordinates: (%d, %d)\n", p1.x, p1.y);אופרטור הנקודה פועל בדיוק כמו גישה לכל משתנה אחר — אפשר להשתמש בו בהשמות, בפעולות חשבון, בקריאות לפונקציות או בכל מקום שבו היית משתמש במשתנה רגיל מאותו סוג. כל איבר מתנהג כמשתנה עצמאי מהסוג שהוצהר עבורו, ומאפשר לך לתפעל את נתוני המבנה באופן מאורגן ואינטואיטיבי.
אתגר
קלצרו תוכנית C שמדגימה גישה לאיברי struct ושינוי שלהם באמצעות אופרטור הנקודה. התוכנית שלכם צריכה:
- להגדיר
structבשםCarעם האיברים הבאים:- מספר שלם
yearלאחסון שנת הייצור - מערך תווים
brandבגודל 20 לאחסון מותג המכונית - מספר שלם
mileageלאחסון הקילומטראז׳ הנוכחי - מספר ממשי
priceלאחסון מחיר המכונית
- מספר שלם
- ליצור משתנה מסוג
CarבשםmyCar - לקרוא את ערכי הקלט הבאים ולהקצות אותם לאיברי ה-struct באמצעות אופרטור הנקודה:
- לקרוא מספר שלם עבור השנה ולהקצות אותו ל-
myCar.year - לקרוא מחרוזת עבור המותג ולהקצות אותה ל-
myCar.brand - לקרוא מספר שלם עבור הקילומטראז׳ ולהקצות אותו ל-
myCar.mileage - לקרוא מספר ממשי עבור המחיר ולהקצות אותו ל-
myCar.price
- לקרוא מספר שלם עבור השנה ולהקצות אותו ל-
- לאחר קריאת כל הערכים, לבצע את הפעולות הבאות:
- להגדיל את הקילומטראז׳ ב-1000 באמצעות
myCar.mileage += 1000; - להפחית את המחיר ב-500.0 באמצעות
myCar.price -= 500.0;
- להגדיל את הקילומטראז׳ ב-1000 באמצעות
- להדפיס את פרטי המכונית באמצעות אופרטור הנקודה כדי לגשת לכל איבר, בפורמט המדויק הבא:
Car Details:Year: [year]Brand: [brand]Mileage: [mileage]Price: [price]
האתגר הזה בוחן את ההבנה שלכם באופרטור הנקודה, הן לקריאה מאיברי struct והן לכתיבה אליהם. תתרגלו הקצאת ערכים לאיברי struct, ביצוע פעולות חשבון עליהם וגישה אליהם לצורך פלט.
לדוגמה, אם הקלט הוא:
2020
Toyota
50000
25000.50הפלט שלכם צריך להיות:
Car Details:
Year: 2020
Brand: Toyota
Mileage: 51000
Price: 24500.50נסו בעצמכם
#include <stdio.h>
#include <string.h>
// TODO: הגדירו כאן את המבנה Car
int main() {
// TODO: צרו משתנה מסוג Car בשם myCar
// קראו את ערכי הקלט
int year;
char brand[20];
int mileage;
float price;
scanf("%d", &year);
scanf("%s", brand);
scanf("%d", &mileage);
scanf("%f", &price);
// TODO: הציבו את ערכי הקלט בשדות המבנה באמצעות אופרטור הנקודה
// TODO: שנו את הקילומטראז' ואת המחיר בהתאם להוראות
// TODO: הדפיסו את פרטי המכונית באמצעות אופרטור הנקודה
printf("Car Details:\n");
// הדפיסו כאן את Year, Brand, Mileage ו-Price
return 0;
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1יסודות המצביעים
מהו מצביע?הכרזה על מצביעיםאופרטור לקיחת הכתובת (&)אופרטור ביטול ההפניה (*)מצביעי NULLסיכום: יסודות המצביעים7מבנים (structs)
מהו struct?הכרזה על structיצירת משתני structגישה לאיברי structאתחול structסיכום: struct לנתוני תלמיד2מצביעים ומערכים
שמות מערכים כמצביעיםאיברי מערך ומצביעיםאריתמטיקה של מצביעיםהשוואת מצביעיםסיכום: מעבר על מערך באמצעות מצביעים5מצביעים ופונקציות
העברה לפי ערךהעברת מצביעים לפונקציותשינוי משתנים באמצעות מצביעיםדוגמה קלאסית: החלפההעברת מערכים לפונקציותחזרה: ארגומנטים של מצביעי פונקציה3מערכי תווים ומחרוזות
מחרוזות כמערכי charתו הסיום nullקלט מחרוזת באמצעות scanfשימוש ב־strlen()שימוש ב־strcpy()שימוש ב־strcat()שימוש ב־strcmp()סיכום: פונקציות מחרוזת בסיסיותתרגלו בעצמכם: קומפיילר C אונליין