1 SPEAKER: בואו לכתוב תכנית ש מנחה את המשתמש לשמות ו בתיהם של שלושה תלמידים. עכשיו, כדי לאחסן אותם שמות ובתים אנחנו יכולים להשתמש, מה, שישה משתנים. שלוש מחרוזות לשמות, ועוד שלוש מחרוזות לבתים, אבל אנחנו כבר יודעים שאנחנו יכולים לנקות קוד שעל ידי שימוש במערכים במקום, למשל מערך בגודל 3 עבור שלושה שמות, ועוד מערך של גודל 3 לבתים. אבל מתברר שאנחנו יכולים לנקות את זה עוד יותר, ולמעשה לשמור אותם שמות ובתים יחד, כך ש שמו של התלמיד והבית שלו או שלה איכשהו במארז, ולכן כדי לדבר, לתוך אותו משתנה. כדי לעשות זאת, אם כי, אנחנו צריכים להכריז הסוג שלנו נתונים, הסוג שלנו ב-C, כי מחברי C לא עשו בהכרח חושב על שנים. לשם כך אנחנו יכולים להשתמש במילת המפתח typedef, יחד עם struct מילת מפתח אחר. בואו נסתכל. בתוך structs.h, יש לי כבר קיבל נכתבו על ידי כולל ספריית CS50. אני הבא אני הולך להקליד struct typedef, ולאחר מכן סד מתולתל. בתוך struct, אני הולך תציין כי תלמיד יהיה מחרוזת קראה בשמה, ועוד מחרוזת שנקראת בית. אני הולך לסגור אז הסוגריים המסולסלים שלי, ולציין כי שמו של סוג הנתונים החדש יהיה סטודנטים. במילים אחרות, באמצעות תחביר זה יש לי הכריז על סוג הנתונים חדש משלי שלא היה קיים לפני רגע, ו בתוך סוג נתונים זה הם שני נתונים שדות או חברי נתונים, אחד בשם שם, הבית התקשר לאחד, אשר שניהם הם מסוג מחרוזת. עכשיו בואו להשתמש בסוג זה בתכנית בפועל. בstructs0.c, קיבלתי באופן דומה בעצמי כבר התחלתי עם כמה קוד מוכן מראש, ואני עכשיו הולך להשתמש בנתונים אלה הקלד תלמיד, כמפורט להלן. אני הולך ראשון להכריז מערך של סטודנטים סוג, אני קוראים לתלמידי מערך - בלשון רבים - ואני תציין שגודלה יהיה שלוש, ש, הודעה מוקדמת, הוא הערך של התלמידים קבועים - בכל הבירות - כי אני כבר הכריז כאן, מוקדם יותר באותו הקובץ. בואו עכשיו לחזר על שלושה אלה תלמידים, ולבקש מהמשתמש שמותיהם ואת הבתים. עבור int אני מקבל 0, הוא שאני פחות מזה קבוע, אני + +. ועכשיו בתוך הגוף של זה עבור לולאה, אני הולך להדפיס משהו כמו שמו של התלמיד. אז אני הולך לקבל למעשה כי שמו של הסטודנט על ידי ציון תלמידים סוגרים לי. במילים אחרות אני רוצה סטודנט i-ה במערך הנקרא תלמידים, אבל עכשיו אני רוצה לקבל בשל תלמיד i-ה ש שם, ולעשות את זה, אני הולך להשתמש . מפעיל, על מנת לקבל ב בתוך תחום ספציפי של struct. אז אני מציין תלמידים סוגרים לי. שם מקבל את ערך ההחזרה של GetString (). בינתיים, אני הולך להדפיס את משהו דומה, באומרו של התלמיד בית, ועכשיו אני הולך לציין כי שדה בית התלמידים i-ה יהיה לקבל את ערך ההחזרה של שיחה נוספת לGetString (). עכשיו בואו נעשה משהו עם שלושה אלה שמות של התלמידים ובתים, משהו פשוט כמו הדפסה כל אחד בגזר דין. עבור int אני מקבל 0, שוב אני הוא פחות מ תלמידים, אני + +,% s printf "הוא ב% s. n הלוכסן ההפוך ", ועכשיו תן לי חבר הערכים של שני תחומים אלה, תלמידים סוגרים לי. שם, פסיק, תלמידים סוגרים לי. בית, קרוב פארן, פסיק. ועכשיו אני צריך לעשות עוד דבר אחד. בחלק התחתון של קובץ זה, אני צריך לשחרר את הזיכרון שהוקצה מאחורי הקלעים על ידי GetSring (), אשר כמובן קורא malloc, על מנת להקצות זיכרון למחרוזות סוגי המשתמשים. אבל לכך הוא פשוט. עבור int אני מקבל 0, הוא שאני פחות מ תלמידים, אני + +, ובתוך הגוף של זה ללולאה, אני פשוט הולך לספק לתלמידי סוגר חופשי i. שם, ולשחרר את תלמידים סוגרים לי. בית. עכשיו, אנחנו כבר השתמשנו בשלוש לולאות בצורה ברורה בתכנית זו, כשבעצם יכול פשוט השתמשתי אחד, אבל זה רק למען ההדגמה, כך ש אנו יכולים לציין בשלוש ברורים צעדים מה בדיוק אנחנו עושים. אנחנו מקבלים שם ובית ראשון לכל אחד מהתלמידים, אנחנו אז הדפסה את השם ואת הבית ל כל אחד משלושה התלמידים, ו אז אנחנו הולכים לשחרר את הזיכרון בשימוש על ידי כל אחד מהתלמידים. אבל אין ספק שאנחנו יכולים כבר לשלב את זה לאחד גדול יותר ללולאה. בואו עכשיו להציל, לקמפל, ולהפעיל את התכנית. structs לעשות 0. / structs 0, סטודנט שם, בואו נספק דוד, הוא יחיה בבית מאת'ר, שמו של התלמיד, בוא אומר לורן, היא מתגוררת בוורט בית, את שמו של התלמיד, רוב, הוא יהיה לחיות בבית קירקלנד. ואכן, דוד הוא במאת'ר, לורן הוא בוורט, ורוב הוא בקירקלנד.