SPEAKER 1: Oletame, kirjutada programm, mis küsib kasutajalt nime ja maja kolm õpilast. Nüüd salvestada need nimed ja majad saaksime kasutada, mida kuus muutujaid. Kolm stringid nimed ja muu kolm stringid majad, aga me juba teame, et saame koristada et koodi abil massiivid asemel, näiteks massiivi suurus 3 kolm nime, ja teine ​​rida suurus 3 maja. Aga selgub, saame puhastada see üles veelgi enam, ja tegelikult hoiavad nimed ja majad koos, nii et õpilase nimi ja tema maja on kuidagi kapseldunud nii et rääkida, samasse muutuja. Et seda teha, kuigi peame kuulutama oma andmete liiki, meie oma liigi C, et autorid C ei pruugi mõtle aastat tagasi. Selleks saame kasutada märksõna typedef koos muu märksõna struktuure. Võtame vaata. Toas structs.h, ma olen juba saanud alustatud sealhulgas CS50 raamatukogu. Ma järgmine läheb kirjuta typedef struktuure, ja siis lokkis traksidega. Toas struct, ma lähen täpsustada, et õpilane peab olema string nimega nimi, ja teine string nimega maja. Ma lähen siis sulen lokkis traksid, ning täpsustada, et nime see uus andmetüüp peab olema õpilane. Teisisõnu, selle kaudu süntaks on I kuulutatud uus andmetüüp minu enda et ei ole olemas hetk tagasi, ja sees see andmetüüp on kaks andmeid valdkondades või andmed, mille üks liikmetest nimetatakse nimi, üks nn maja, mis mõlemad tüübiks string. Olgem nüüd kasutada seda tüüpi aastal tegelik programm. In structs0.c olen samamoodi saanud ise algas juba mõned stereotüüp kood, ja ma olen nüüd kavatse kasutada seda andmete kirjuta õpilane järgmiselt. Ma esimest kavatse kuulutada massiivi tüüp üliõpilane, ma tulen kutsuvad massiivi õpilased - mitmuses - ja ma täpsustada, et selle suurus saab olema kolm, mis teate, on väärtus pidev õpilased - kõigis pealinnades - et ma olen kuulutanud, siia varem toimikusse. Olgem nüüd Käi need kolm õpilastele ja kiire kasutaja jaoks nende nimed ja maju. jaoks int i saada 0, i on vähem kui pidev, i + +. Ja nüüd sees ihu selle eest loop, ma lähen välja trükkida midagi nagu õpilase nimi. Ma siis lähen tegelikult saada, et õpilase nimi, määrates õpilased ümbritsevad i. Teisisõnu tahan i-nda üliõpilane massiivi nimetatakse õpilased, kuid nüüd Ma tahan saada seda i-nda õpilase Nime, ja et seda teha, ma lähen kasutada . operaatoriga, et saada on konkreetse valdkonna sees struktuure. Nii ma täpsustama õpilased ümbritsevad i. Nime saab tagastatav väärtus getString (). Vahepeal ma lähen välja printida midagi sarnast, öeldes õpilase maja, ja nüüd ma lähen täpsustada et i-nda õpilast maja valdkonnas ei saada tagastatav väärtus teise kõne getString (). Nüüd teeme midagi nende kolme õpilaste nimed ja majad, midagi lihtsat nagu trükkimine iga läbi lause. jaoks int i saada 0, jälle i on väiksem kui õpilased, i + +, printf "% s on% s. kurakriips n "ja nüüd andke mulle pistik väärtused need kaks valdkonda, õpilased ümbritsevad i. nime, koma õpilased ümbritsevad i. majas lähedal paren, semikoolon. Ja nüüd ma pean tegema veel üks asi. Allosas see fail, ma pean vaba mälu, mis oli eraldatud kulisside taga, mida GetSring (), mis Loomulikult nõuab malloc, et mälu eraldada stringid kasutaja tüübid. Aga see on lihtne. jaoks int i saada 0, i on väiksem kui õpilased, i + +, ja kehas Selle jaoks loop, ma lihtsalt läheb tasuta õpilast sulg i. nime, ja vaba õpilased ümbritsevad i. majas. Nüüd oleme selgelt kasutada kolm silmuseid Selles programmis, siis tegelikult ma võinud lihtsalt kasutatav, vaid see on lihtsalt demonstreerimiseks pärast, et saame määrata kolm erinevat samme, mida täpselt me ​​teeme. Me kõigepealt saada nimi ja maja iga õpilast, me oleme siis väljatrükk nimi ja maja Iga kolme õpilast ja siis me lähme vaba mälu kasutatakse iga õpilast. Aga kindlasti me saanuks ühendamine üheks suuremaks silmus. Olgem nüüd salvestada, koostada, ja käivitada see programm. teha structs 0 /. structs 0, õpilase Nime, olgem anda David, ta elab aastal Ema House, õpilase nimi, olgem öelda Lauren, ta saab elada Leverett House, õpilase nimi, Rob, temast elada Kirkland House. Ja tõepoolest, David on Mather, Lauren on Leverett, ja Rob on Kirkland.