>> 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.