2 00:00:00,000 --> 00:00:02,760 >> SPEAKER 1: La oss skrive et program som ber brukeren om navn og 3 00:00:02,760 --> 00:00:04,700 hus av tre studenter. 4 00:00:04,700 --> 00:00:08,840 Nå, for å lagre disse navnene og hus vi kunne bruke, hva, seks variabler. 5 00:00:08,840 --> 00:00:12,260 Tre strenger for navnene, og en annen tre strenger for husene, 6 00:00:12,260 --> 00:00:16,560 men vi vet allerede at vi kan rydde opp at koden ved hjelp av matriser i stedet, 7 00:00:16,560 --> 00:00:20,220 for eksempel en matrise av størrelse 3 for tre navn, og en annen rekke 8 00:00:20,220 --> 00:00:22,110 størrelse 3 for husene. 9 00:00:22,110 --> 00:00:25,870 Men det viser seg at vi kan rydde opp enda lenger, og faktisk holde dem 10 00:00:25,870 --> 00:00:30,520 navn og husene sammen, slik at en studentens navn og hans eller hennes hus 11 00:00:30,520 --> 00:00:34,940 er liksom innkapslet, så å si, i den samme variable. 12 00:00:34,940 --> 00:00:39,095 >> For å gjøre dette, men vi trenger å erklære vår egen datatype, vår egen type i C, 13 00:00:39,095 --> 00:00:42,660 at forfatterne av C gjorde ikke nødvendigvis tenker på år siden. 14 00:00:42,660 --> 00:00:45,630 For å gjøre dette kan vi bruke søkeordet typedef, sammen med 15 00:00:45,630 --> 00:00:47,200 andre søkeord struct. 16 00:00:47,200 --> 00:00:48,160 La oss ta en titt. 17 00:00:48,160 --> 00:00:50,650 Innsiden av structs.h, har jeg allerede fått startet av 18 00:00:50,650 --> 00:00:52,560 inkludert CS50 biblioteket. 19 00:00:52,560 --> 00:00:57,640 Jeg neste kommer til å skrive typedef struct, og deretter en klammeparentes. 20 00:00:57,640 --> 00:01:01,370 Innsiden av struct, kommer jeg til å angi at en student skal ha en 21 00:01:01,370 --> 00:01:04,960 string kalt navn, og en annen strengen som kalles huset. 22 00:01:04,960 --> 00:01:08,430 Jeg skal deretter lukker klammeparentes, og angir at navnet på 23 00:01:08,430 --> 00:01:11,420 denne nye datatypen skal være student. 24 00:01:11,420 --> 00:01:15,550 Med andre ord, via denne syntaksen har jeg erklærte en ny datatype av mine egne 25 00:01:15,550 --> 00:01:19,910 som ikke eksisterte for et øyeblikk siden, og innsiden av denne datatypen er to data 26 00:01:19,910 --> 00:01:24,270 felt eller data medlemmer, en som heter navn, en som heter hus, som begge 27 00:01:24,270 --> 00:01:25,630 er av typen streng. 28 00:01:25,630 --> 00:01:27,690 >> La oss nå bruke denne type i en faktisk program. 29 00:01:27,690 --> 00:01:30,210 30 00:01:30,210 --> 00:01:34,090 I structs0.c, har jeg på samme måte fått meg selv startet allerede med noen 31 00:01:34,090 --> 00:01:36,999 standardkode, og jeg er nå kommer til å bruke disse dataene 32 00:01:36,999 --> 00:01:39,100 skriver student, som følger. 33 00:01:39,100 --> 00:01:42,450 Jeg først kommer til å erklære en matrise av type student, vil jeg 34 00:01:42,450 --> 00:01:43,920 kaller tabell studenter - 35 00:01:43,920 --> 00:01:44,630 flertall - 36 00:01:44,630 --> 00:01:49,360 og jeg vil presisere at størrelsen vil være tre, som varsel, er verdien av 37 00:01:49,360 --> 00:01:50,880 konstant STUDENTER - 38 00:01:50,880 --> 00:01:51,890 i alle hovedsteder - 39 00:01:51,890 --> 00:01:54,930 at jeg har erklært opp her, tidligere i filen. 40 00:01:54,930 --> 00:01:58,280 La oss nå iterere over de tre studenter, og spør brukeren om 41 00:01:58,280 --> 00:02:00,050 deres navn og hus. 42 00:02:00,050 --> 00:02:05,422 >> for int jeg får 0, er jeg mindre enn at konstant, i + +. 43 00:02:05,422 --> 00:02:08,600 Og nå på innsiden av kroppen til dette for loop, kommer jeg til å skrive ut noe 44 00:02:08,600 --> 00:02:11,470 som studentens navn. 45 00:02:11,470 --> 00:02:14,890 Jeg deretter kommer til å faktisk få det elevens navn ved å spesifisere 46 00:02:14,890 --> 00:02:17,290 studenter brakett jeg. 47 00:02:17,290 --> 00:02:21,550 Med andre ord jeg vil at i-te student i matrisen kalles studenter, men nå 48 00:02:21,550 --> 00:02:25,340 Jeg ønsker å komme på at i-te studentens navn, og for å gjøre dette, kommer jeg til å bruke 49 00:02:25,340 --> 00:02:30,160 den. Operatøren, for å få til en bestemt felt innsiden av struct. 50 00:02:30,160 --> 00:02:37,100 Så jeg spesifisere studenter brakett jeg. Navn blir returverdien av GetString (). 51 00:02:37,100 --> 00:02:40,310 I mellomtiden kommer jeg til å skrive ut noe lignende, sier student 52 00:02:40,310 --> 00:02:45,410 huset, og nå kommer jeg til å spesifisere at i-te studenter huset feltet 53 00:02:45,410 --> 00:02:49,480 skal få returverdien av annen samtale til GetString (). 54 00:02:49,480 --> 00:02:52,350 >> Nå la oss gjøre noe med disse tre studentenes navn og hus, 55 00:02:52,350 --> 00:02:56,230 noe enkelt som utskrift hvert ut i en setning. 56 00:02:56,230 --> 00:03:07,580 for int jeg får 0, igjen jeg er mindre enn studenter, er i + +, printf "% s på% s. 57 00:03:07,580 --> 00:03:12,600 backslash n ", og nå la meg koble verdiene av disse to felter, 58 00:03:12,600 --> 00:03:19,055 studenter brakett jeg. navn, komma, studenter brakett jeg. huset, nær 59 00:03:19,055 --> 00:03:21,290 paren, semikolon. 60 00:03:21,290 --> 00:03:23,020 >> Og nå trenger jeg å gjøre en ting. 61 00:03:23,020 --> 00:03:26,600 På bunnen av denne filen, trenger jeg å frigjøre minne som ble tildelt 62 00:03:26,600 --> 00:03:30,290 bak kulissene etter GetSring (), som selvfølgelig kaller malloc, for å kunne 63 00:03:30,290 --> 00:03:32,500 allokere minne for strengene brukeren skriver. 64 00:03:32,500 --> 00:03:35,720 Men dette er enkel. 65 00:03:35,720 --> 00:03:42,610 for int jeg får 0, er jeg mindre enn studenter, i + +, og inne i kroppen til 66 00:03:42,610 --> 00:03:48,670 dette for loop, jeg bare kommer til å gi gratis studenter brakett jeg. navn, 67 00:03:48,670 --> 00:03:52,300 og gratis studenter brakett jeg. huset. 68 00:03:52,300 --> 00:03:55,620 >> Nå har vi klart brukt tre for sløyfer i dette programmet, da virkelig jeg 69 00:03:55,620 --> 00:03:58,800 kunne bare ha brukt en, men dette er bare for demonstrasjon skyld, slik at 70 00:03:58,800 --> 00:04:02,850 vi kan spesifisere i tre distinkte trinn hva vi gjør. 71 00:04:02,850 --> 00:04:06,120 Vi er først å få et navn og et hus for hver av studentene, er vi så 72 00:04:06,120 --> 00:04:08,900 skrive ut navn og huset for hver av de tre studenter, og 73 00:04:08,900 --> 00:04:11,910 så vi kommer til å frigjøre minne brukes av hver av elevene. 74 00:04:11,910 --> 00:04:15,310 Men sikkert vi kunne har kombinere dette inn i en større for loop. 75 00:04:15,310 --> 00:04:18,650 >> La oss nå lagre, sammenstille, og kjøre dette programmet. 76 00:04:18,650 --> 00:04:26,850 gjør structs 0. / structs 0, student navn, la oss gi David, vil han leve 77 00:04:26,850 --> 00:04:31,580 i Mather House, studentens navn, la oss sier Lauren, vil hun leve i Leverett 78 00:04:31,580 --> 00:04:36,590 Hus, studentens navn, Rob, vil han bor i Kirkland House. 79 00:04:36,590 --> 00:04:39,440 Og ja, er David i Mather, Lauren er i Leverett, 80 00:04:39,440 --> 00:04:40,810 og Rob er i Kirkland. 81 00:04:40,810 --> 00:04:43,425