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.