>> HÖGTALARE 1: Låt oss skriva ett program som uppmanar användaren att namnen och
hus av tre studenter.
Nu, för att lagra dessa namn och hus vi skulle kunna använda, vad, sex variabler.
Tre strängar för namn, och en annan tre strängar för husen,
men vi vet redan att vi kan städa upp koden med hjälp av matriser istället,
till exempel en matris med storleken 3 för tre namn, och en annan rad
storlek 3 för husen.
Men det visar sig att vi kan städa upp detta ännu längre, och faktiskt hålla dem
namn och hus tillsammans, så att en studentens namn och hans eller hennes hus
på något sätt är inkapslade, så att tala, i samma variabel.
>> För att göra detta, dock måste vi deklarera vår egen datatyp, vår egen typ i C,
att författarna till C inte nödvändigtvis tänker på år sedan.
För att göra detta kan vi använda nyckelordet typedef, tillsammans med den
andra nyckelordet struct.
Låt oss ta en titt.
Inuti structs.h, har jag redan kommit igång med
inklusive CS50 biblioteket.
Jag nästa kommer att skriva typedef struct, och sedan en klammer.
Inne i struct, kommer jag att ange att en elev ska ha en
sträng som heter namn, och en annan sträng som kallas hus.
Jag ska då sluta mina klammerparenteser, och anger att namnet på
denna nya datatyp ska vara student.
Med andra ord, via denna syntax har jag förklarade en ny datatyp av min egen
som inte fanns för en stund sedan, och insidan av den här datatypen är två uppgifter
fält eller data medlemmar, en som heter namn, en som kallas hus, som båda
är av typen sträng.
>> Låt oss nu använda denna typ i en verklig programmet.
I structs0.c, har jag på liknande sätt fått jag själv redan börjat med några
standardtext kod, och jag är nu kommer att använda dessa data
skriver student, enligt följande.
Jag är först kommer att förklara en matris av typ student, jag
kallar matris studenter -
plural -
och jag ska ange att dess storlek kommer att vara tre, som, ett meddelande, är det värde på
de ständiga STUDENTER -
i alla huvudstäder -
att jag har förklarat här uppe, tidigare i filen.
Låt oss nu iterera över dessa tre eleverna och fråga användaren om
deras namn och hus.
>> för int jag får 0, är ​​jag mindre än den konstanta, i + +.
Och nu inne i kroppen av denna för loop, kommer jag att skriva ut något
liksom studentens namn.
Jag sedan kommer att faktiskt få det studentens namn genom att ange
studenter Bracket I.
Med andra ord jag vill ha den i: te studerande i arrayen kallas studenter, men nu
Jag vill komma på den i: te studentens namn, och för att göra detta, kommer jag att använda
den. operatör, för att få till en specifika området insida strukt.
Så jag anger eleverna Bracket I. Namn blir returvärdet för GetString ().
Under tiden kommer jag att skriva ut något liknande, säger elevens
hus, och nu ska jag ange att den i: te studenter hus fält
skall få returvärdet av ett annat samtal till GetString ().
>> Nu ska vi göra något med dessa tre elevernas namn och hus,
något enkelt som utskrifter varje i en mening.
för int jag få 0, i är mindre än en gång studenter, är i + +, printf "% s på% s.
backslash n ", och nu vill jag koppla in värdena på dessa två områden,
studenter Bracket I. namn, kommatecken, studenter Bracket I. hus, nära
paren, semikolon.
>> Och nu måste jag göra en sak till.
Längst ner i den här filen, jag behöver frigöra det minne som tilldelades
bakom kulisserna genom GetSring (), vilket naturligtvis samtal malloc, i syfte att
allokera minne för strängarna användaren skriver.
Men detta är enkel.
för int jag får 0, i är mindre än studenter, i + +, och inuti kroppen av
detta för slinga, jag bara tänker ge fri studenter fäste i.. namn,
och fria studenter Bracket I. huset.
>> Nu, vi har tydligt använt tre för slingor i detta program, när det verkligen jag
skulle bara ha använt en, men det är bara för demonstration skull, så att
Vi kan ange i tre distinkta steg exakt vad vi gör.
Vi ska först få ett namn och ett hus för var och en av eleverna, vi är sedan
skriva ut namn och huset för var och en av de tre deltagare, och
då vi kommer att frigöra minne används av var och en av eleverna.
Men säkert vi kunde har kombinera detta till en större för slinga.
>> Låt oss nu spara, kompilera, och köra programmet.
gör structs 0. / structs 0, studentens namn, låt oss ge David, han lever
i Mather House, studentens namn, låt oss säger Lauren, hon bor i Leverett
Hus, studentens namn, Rob, han bor i Kirkland House.
Och faktiskt, är David i Mather, Lauren är i Rett,
och Rob är i Kirkland.