ลำโพง 1: ลองเขียนโปรแกรมที่ แจ้งให้ผู้ใช้ชื่อและ บ้านสามนักเรียน ขณะนี้การจัดเก็บรายชื่อเหล่านั้นและบ้าน เราสามารถใช้สิ่งที่ตัวแปรหก สามสายสำหรับชื่อและอีก สามสายสำหรับบ้านที่ แต่เรารู้อยู่แล้วว่าเราสามารถทำความสะอาด รหัสว่าด้วยการใช้อาร์เรย์แทน เช่นอาร์เรย์ขนาด 3 สามชื่อและอาเรย์ของอื่น ขนาด 3 สำหรับบ้าน แต่มันจะเปิดออกเราสามารถทำความสะอาดนี้ขึ้น ต่อไปยังและจริงให้ผู้ที่ ชื่อและที่บ้านด้วยกันเพื่อให้ ชื่อนักเรียนและบ้านของเขาหรือเธอ จะห่อหุ้มอย่างใดจึงจะ พูดเป็นตัวแปรเดียวกัน การทำเช่นนี้ แต่เราต้องการที่จะประกาศ ชนิดข้อมูลของเราเองชนิดของเราเองใน C ว่าผู้เขียนของ C ก็ไม่จำเป็นต้อง คิดว่าปีที่ผ่านมา การทำเช่นนี้เราสามารถใช้คำหลัก typedef พร้อมกับ struct คำหลักอื่น ๆ ลองมาดู ภายใน structs.h เราได้แล้ว อากาศที่เริ่มโดย รวมทั้งห้องสมุด CS50 ฉันต่อไปจะพิมพ์ typedef struct, แล้ววงเล็บปีกกา ภายในของ struct ที่ฉันจะ ระบุว่านักเรียนจะต้องมี สตริงเรียกชื่อและอื่น ๆ สตริงที่เรียกว่าบ้าน ฉันกำลังจะไปแล้วปิดวงเล็บปีกกาของฉัน และระบุว่าชื่อของ ชนิดข้อมูลใหม่นี้จะเป็นนักเรียน ในคำอื่น ๆ ผ่านทางรูปแบบนี้มีฉัน ประกาศให้เป็นชนิดข้อมูลใหม่ของตัวเอง ที่ไม่อยู่ในขณะที่ผ่านมาและ ภายในของชนิดข้อมูลนี้มีสองข้อมูล เขตข้อมูลหรือข้อมูลที่เป็นสมาชิกคนหนึ่งที่เรียกว่าชื่อ บ้านที่เรียกว่าอย่างใดอย่างหนึ่งซึ่งทั้งสองอย่าง เป็นประเภทของสตริง ตอนนี้ขอใช้ชนิดนี้ ในโปรแกรมที่เกิดขึ้นจริง ใน structs0.c ผมเคยเหมือนกัน ตัวเองเริ่มต้นแล้วกับบาง รหัสสำเร็จรูปและฉันตอนนี้ จะใช้ข้อมูลนี้ ประเภทนักศึกษาดังต่อไปนี้ ฉันจะเป็นครั้งแรกที่จะประกาศ อาร์เรย์ของประเภทนักเรียนฉันจะ เรียกนักเรียนอาร์เรย์ - พหูพจน์ - และฉันจะระบุว่าขนาดของมันจะเป็น สามซึ่งแจ้งให้ทราบล่วงหน้าเป็นค่าของ นักเรียนคงที่ - ในเมืองหลวงทั้งหมด - ที่ผมเคยประกาศขึ้นที่นี่ ก่อนหน้านี้ในแฟ้ม ตอนนี้ขอย้ำกว่าทั้งสาม นักเรียนและแจ้งให้ผู้ใช้สำหรับ ชื่อและที่บ้านของพวกเขา เพื่อ int ฉันได้รับ 0, i น้อย กว่าคงที่ i + + และตอนนี้ในของร่างนี้สำหรับ ห่วงฉันจะพิมพ์ออกมาบางสิ่งบางอย่าง เช่นชื่อของนักเรียน แล้วฉันจะได้รับจริงว่า โดยระบุชื่อของนักเรียน นักเรียนวงเล็บฉัน ในคำอื่น ๆ ที่ฉันต้องการของนักเรียนลำดับที่ i ในอาร์เรย์เรียกว่านักเรียน แต่ตอนนี้ ฉันต้องการที่จะได้รับที่ที่ฉัน th-ของนักเรียน ชื่อและการทำเช่นนี้ฉันจะใช้ ผู้ประกอบการเพื่อให้ได้รับที่ เขตข้อมูลที่เฉพาะเจาะจงภายในของ struct ดังนั้นผมจึงระบุนักเรียนวงเล็บผมชื่อ. ได้รับค่าตอบแทนของ GetString () ในขณะที่ฉันกำลังจะพิมพ์ออกมา สิ่งที่คล้ายกันว่านักเรียน บ้านและตอนนี้ฉันกำลังจะไประบุ ที่สนามบ้านนักเรียน i th- จะได้รับค่าตอบแทนของ โทร GetString อื่น () ตอนนี้ขอทำอะไรกับทั้งสาม ชื่อของนักเรียนและบ้าน สิ่งที่ง่ายเช่นการพิมพ์ ออกมาในแต่ละประโยค เพื่อ int ฉันได้รับ 0, อีกครั้งฉันมีค่าน้อยกว่า นักเรียน i + +, printf "% s ใน% s เครื่องหมาย n "และตอนนี้ให้ฉันเสียบ ค่าของคนสองเขตข้อมูล นักเรียนวงเล็บผมชื่อจุลภาค. นักเรียนวงเล็บ i. บ้านใกล้ วงเล็บเครื่องหมายอัฒภาค และตอนนี้ฉันต้องทำอีกสิ่งหนึ่ง ที่ด้านล่างของไฟล์นี้, ฉันต้องการที่จะ หน่วยความจำที่ได้รับการจัดสรร เบื้องหลังโดย GetSring () ซึ่ง แน่นอนโทร malloc เพื่อ จัดสรรหน่วยความจำสำหรับสตริง ประเภทผู้ใช้ แต่นี้เป็นเรื่องง่าย เพื่อ int ฉันได้รับ 0, i น้อยกว่า นักเรียน i + + และภายในร่างกายของ สำหรับวงนี้ผมก็จะไป ให้ฟรีวงเล็บชื่อนักเรียน i. และนักเรียนฟรียึดบ้านฉัน. ตอนนี้ที่เราได้นำมาใช้อย่างชัดเจนสามห่วง ในโปรแกรมนี้เมื่อฉันจริงๆ จะได้ใช้เพียงหนึ่ง แต่นี้เป็น เพียงเพื่อประโยชน์ของการสาธิตเพื่อให้ เราสามารถระบุได้ในสามที่แตกต่าง ขั้นตอนที่ว่าสิ่งที่เรากำลังทำ เรากำลังเป็นครั้งแรกที่ได้รับชื่อและที่บ้าน สำหรับแต่ละคนเรานั้น พิมพ์ออกชื่อและที่บ้าน แต่ละแห่งที่สามนักเรียนและ แล้วเรากำลังจะฟรีหน่วยความจำ ที่ใช้โดยแต่ละของนักเรียน แต่แน่นอนว่าเราจะได้รวมนี้ เป็นหนึ่งที่ใหญ่กว่าสำหรับวง ตอนนี้ขอบันทึกรวบรวม และเรียกใช้โปรแกรมนี้ ทำให้ structs 0. / structs 0, นักเรียน ชื่อขอให้เดวิดเขาจะมีชีวิตอยู่ ในท้องบ้านชื่อของนักเรียนให้ ลอเรนบอกว่าเธอจะอาศัยอยู่ใน Leverett บ้านชื่อนักเรียนร็อบเขาจะ อาศัยอยู่ในบ้านเคิร์กแลนด์ และแน่นอนเดวิดอยู่ในท้อง ลอเรนที่อยู่ใน Leverett, และร็อบอยู่ในเคิร์กแลนด์