>> SPEAKER 1: La oss skrive et program som ber brukeren om navn og
hus av tre studenter.
Nå, for å lagre disse navnene og hus vi kunne bruke, hva, seks variabler.
Tre strenger for navnene, og en annen tre strenger for husene,
men vi vet allerede at vi kan rydde opp at koden ved hjelp av matriser i stedet,
for eksempel en matrise av størrelse 3 for tre navn, og en annen rekke
størrelse 3 for husene.
Men det viser seg at vi kan rydde opp enda lenger, og faktisk holde dem
navn og husene sammen, slik at en studentens navn og hans eller hennes hus
er liksom innkapslet, så å si, i den samme variable.
>> For å gjøre dette, men vi trenger å erklære vår egen datatype, vår egen type i C,
at forfatterne av C gjorde ikke nødvendigvis tenker på år siden.
For å gjøre dette kan vi bruke søkeordet typedef, sammen med
andre søkeord struct.
La oss ta en titt.
Innsiden av structs.h, har jeg allerede fått startet av
inkludert CS50 biblioteket.
Jeg neste kommer til å skrive typedef struct, og deretter en klammeparentes.
Innsiden av struct, kommer jeg til å angi at en student skal ha en
string kalt navn, og en annen strengen som kalles huset.
Jeg skal deretter lukker klammeparentes, og angir at navnet på
denne nye datatypen skal være student.
Med andre ord, via denne syntaksen har jeg erklærte en ny datatype av mine egne
som ikke eksisterte for et øyeblikk siden, og innsiden av denne datatypen er to data
felt eller data medlemmer, en som heter navn, en som heter hus, som begge
er av typen streng.
>> La oss nå bruke denne type i en faktisk program.
I structs0.c, har jeg på samme måte fått meg selv startet allerede med noen
standardkode, og jeg er nå kommer til å bruke disse dataene
skriver student, som følger.
Jeg først kommer til å erklære en matrise av type student, vil jeg
kaller tabell studenter -
flertall -
og jeg vil presisere at størrelsen vil være tre, som varsel, er verdien av
konstant STUDENTER -
i alle hovedsteder -
at jeg har erklært opp her, tidligere i filen.
La oss nå iterere over de tre studenter, og spør brukeren om
deres navn og hus.
>> for int jeg får 0, er jeg mindre enn at konstant, i + +.
Og nå på innsiden av kroppen til dette for loop, kommer jeg til å skrive ut noe
som studentens navn.
Jeg deretter kommer til å faktisk få det elevens navn ved å spesifisere
studenter brakett jeg.
Med andre ord jeg vil at i-te student i matrisen kalles studenter, men nå
Jeg ønsker å komme på at i-te studentens navn, og for å gjøre dette, kommer jeg til å bruke
den. Operatøren, for å få til en bestemt felt innsiden av struct.
Så jeg spesifisere studenter brakett jeg. Navn blir returverdien av GetString ().
I mellomtiden kommer jeg til å skrive ut noe lignende, sier student
huset, og nå kommer jeg til å spesifisere at i-te studenter huset feltet
skal få returverdien av annen samtale til GetString ().
>> Nå la oss gjøre noe med disse tre studentenes navn og hus,
noe enkelt som utskrift hvert ut i en setning.
for int jeg får 0, igjen jeg er mindre enn studenter, er i + +, printf "% s på% s.
backslash n ", og nå la meg koble verdiene av disse to felter,
studenter brakett jeg. navn, komma, studenter brakett jeg. huset, nær
paren, semikolon.
>> Og nå trenger jeg å gjøre en ting.
På bunnen av denne filen, trenger jeg å frigjøre minne som ble tildelt
bak kulissene etter GetSring (), som selvfølgelig kaller malloc, for å kunne
allokere minne for strengene brukeren skriver.
Men dette er enkel.
for int jeg får 0, er jeg mindre enn studenter, i + +, og inne i kroppen til
dette for loop, jeg bare kommer til å gi gratis studenter brakett jeg. navn,
og gratis studenter brakett jeg. huset.
>> Nå har vi klart brukt tre for sløyfer i dette programmet, da virkelig jeg
kunne bare ha brukt en, men dette er bare for demonstrasjon skyld, slik at
vi kan spesifisere i tre distinkte trinn hva vi gjør.
Vi er først å få et navn og et hus for hver av studentene, er vi så
skrive ut navn og huset for hver av de tre studenter, og
så vi kommer til å frigjøre minne brukes av hver av elevene.
Men sikkert vi kunne har kombinere dette inn i en større for loop.
>> La oss nå lagre, sammenstille, og kjøre dette programmet.
gjør structs 0. / structs 0, student navn, la oss gi David, vil han leve
i Mather House, studentens navn, la oss sier Lauren, vil hun leve i Leverett
Hus, studentens navn, Rob, vil han bor i Kirkland House.
Og ja, er David i Mather, Lauren er i Leverett,
og Rob er i Kirkland.