>> ลำโพง 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,
และร็อบอยู่ในเคิร์กแลนด์