2 00:00:00,000 --> 00:00:02,760 >> HÖGTALARE 1: Låt oss skriva ett program som uppmanar användaren att namnen och 3 00:00:02,760 --> 00:00:04,700 hus av tre studenter. 4 00:00:04,700 --> 00:00:08,840 Nu, för att lagra dessa namn och hus vi skulle kunna använda, vad, sex variabler. 5 00:00:08,840 --> 00:00:12,260 Tre strängar för namn, och en annan tre strängar för husen, 6 00:00:12,260 --> 00:00:16,560 men vi vet redan att vi kan städa upp koden med hjälp av matriser istället, 7 00:00:16,560 --> 00:00:20,220 till exempel en matris med storleken 3 för tre namn, och en annan rad 8 00:00:20,220 --> 00:00:22,110 storlek 3 för husen. 9 00:00:22,110 --> 00:00:25,870 Men det visar sig att vi kan städa upp detta ännu längre, och faktiskt hålla dem 10 00:00:25,870 --> 00:00:30,520 namn och hus tillsammans, så att en studentens namn och hans eller hennes hus 11 00:00:30,520 --> 00:00:34,940 på något sätt är inkapslade, så att tala, i samma variabel. 12 00:00:34,940 --> 00:00:39,095 >> För att göra detta, dock måste vi deklarera vår egen datatyp, vår egen typ i C, 13 00:00:39,095 --> 00:00:42,660 att författarna till C inte nödvändigtvis tänker på år sedan. 14 00:00:42,660 --> 00:00:45,630 För att göra detta kan vi använda nyckelordet typedef, tillsammans med den 15 00:00:45,630 --> 00:00:47,200 andra nyckelordet struct. 16 00:00:47,200 --> 00:00:48,160 Låt oss ta en titt. 17 00:00:48,160 --> 00:00:50,650 Inuti structs.h, har jag redan kommit igång med 18 00:00:50,650 --> 00:00:52,560 inklusive CS50 biblioteket. 19 00:00:52,560 --> 00:00:57,640 Jag nästa kommer att skriva typedef struct, och sedan en klammer. 20 00:00:57,640 --> 00:01:01,370 Inne i struct, kommer jag att ange att en elev ska ha en 21 00:01:01,370 --> 00:01:04,960 sträng som heter namn, och en annan sträng som kallas hus. 22 00:01:04,960 --> 00:01:08,430 Jag ska då sluta mina klammerparenteser, och anger att namnet på 23 00:01:08,430 --> 00:01:11,420 denna nya datatyp ska vara student. 24 00:01:11,420 --> 00:01:15,550 Med andra ord, via denna syntax har jag förklarade en ny datatyp av min egen 25 00:01:15,550 --> 00:01:19,910 som inte fanns för en stund sedan, och insidan av den här datatypen är två uppgifter 26 00:01:19,910 --> 00:01:24,270 fält eller data medlemmar, en som heter namn, en som kallas hus, som båda 27 00:01:24,270 --> 00:01:25,630 är av typen sträng. 28 00:01:25,630 --> 00:01:27,690 >> Låt oss nu använda denna typ i en verklig programmet. 29 00:01:27,690 --> 00:01:30,210 30 00:01:30,210 --> 00:01:34,090 I structs0.c, har jag på liknande sätt fått jag själv redan börjat med några 31 00:01:34,090 --> 00:01:36,999 standardtext kod, och jag är nu kommer att använda dessa data 32 00:01:36,999 --> 00:01:39,100 skriver student, enligt följande. 33 00:01:39,100 --> 00:01:42,450 Jag är först kommer att förklara en matris av typ student, jag 34 00:01:42,450 --> 00:01:43,920 kallar matris studenter - 35 00:01:43,920 --> 00:01:44,630 plural - 36 00:01:44,630 --> 00:01:49,360 och jag ska ange att dess storlek kommer att vara tre, som, ett meddelande, är det värde på 37 00:01:49,360 --> 00:01:50,880 de ständiga STUDENTER - 38 00:01:50,880 --> 00:01:51,890 i alla huvudstäder - 39 00:01:51,890 --> 00:01:54,930 att jag har förklarat här uppe, tidigare i filen. 40 00:01:54,930 --> 00:01:58,280 Låt oss nu iterera över dessa tre eleverna och fråga användaren om 41 00:01:58,280 --> 00:02:00,050 deras namn och hus. 42 00:02:00,050 --> 00:02:05,422 >> för int jag får 0, är ​​jag mindre än den konstanta, i + +. 43 00:02:05,422 --> 00:02:08,600 Och nu inne i kroppen av denna för loop, kommer jag att skriva ut något 44 00:02:08,600 --> 00:02:11,470 liksom studentens namn. 45 00:02:11,470 --> 00:02:14,890 Jag sedan kommer att faktiskt få det studentens namn genom att ange 46 00:02:14,890 --> 00:02:17,290 studenter Bracket I. 47 00:02:17,290 --> 00:02:21,550 Med andra ord jag vill ha den i: te studerande i arrayen kallas studenter, men nu 48 00:02:21,550 --> 00:02:25,340 Jag vill komma på den i: te studentens namn, och för att göra detta, kommer jag att använda 49 00:02:25,340 --> 00:02:30,160 den. operatör, för att få till en specifika området insida strukt. 50 00:02:30,160 --> 00:02:37,100 Så jag anger eleverna Bracket I. Namn blir returvärdet för GetString (). 51 00:02:37,100 --> 00:02:40,310 Under tiden kommer jag att skriva ut något liknande, säger elevens 52 00:02:40,310 --> 00:02:45,410 hus, och nu ska jag ange att den i: te studenter hus fält 53 00:02:45,410 --> 00:02:49,480 skall få returvärdet av ett annat samtal till GetString (). 54 00:02:49,480 --> 00:02:52,350 >> Nu ska vi göra något med dessa tre elevernas namn och hus, 55 00:02:52,350 --> 00:02:56,230 något enkelt som utskrifter varje i en mening. 56 00:02:56,230 --> 00:03:07,580 för int jag få 0, i är mindre än en gång studenter, är i + +, printf "% s på% s. 57 00:03:07,580 --> 00:03:12,600 backslash n ", och nu vill jag koppla in värdena på dessa två områden, 58 00:03:12,600 --> 00:03:19,055 studenter Bracket I. namn, kommatecken, studenter Bracket I. hus, nära 59 00:03:19,055 --> 00:03:21,290 paren, semikolon. 60 00:03:21,290 --> 00:03:23,020 >> Och nu måste jag göra en sak till. 61 00:03:23,020 --> 00:03:26,600 Längst ner i den här filen, jag behöver frigöra det minne som tilldelades 62 00:03:26,600 --> 00:03:30,290 bakom kulisserna genom GetSring (), vilket naturligtvis samtal malloc, i syfte att 63 00:03:30,290 --> 00:03:32,500 allokera minne för strängarna användaren skriver. 64 00:03:32,500 --> 00:03:35,720 Men detta är enkel. 65 00:03:35,720 --> 00:03:42,610 för int jag får 0, i är mindre än studenter, i + +, och inuti kroppen av 66 00:03:42,610 --> 00:03:48,670 detta för slinga, jag bara tänker ge fri studenter fäste i.. namn, 67 00:03:48,670 --> 00:03:52,300 och fria studenter Bracket I. huset. 68 00:03:52,300 --> 00:03:55,620 >> Nu, vi har tydligt använt tre för slingor i detta program, när det verkligen jag 69 00:03:55,620 --> 00:03:58,800 skulle bara ha använt en, men det är bara för demonstration skull, så att 70 00:03:58,800 --> 00:04:02,850 Vi kan ange i tre distinkta steg exakt vad vi gör. 71 00:04:02,850 --> 00:04:06,120 Vi ska först få ett namn och ett hus för var och en av eleverna, vi är sedan 72 00:04:06,120 --> 00:04:08,900 skriva ut namn och huset för var och en av de tre deltagare, och 73 00:04:08,900 --> 00:04:11,910 då vi kommer att frigöra minne används av var och en av eleverna. 74 00:04:11,910 --> 00:04:15,310 Men säkert vi kunde har kombinera detta till en större för slinga. 75 00:04:15,310 --> 00:04:18,650 >> Låt oss nu spara, kompilera, och köra programmet. 76 00:04:18,650 --> 00:04:26,850 gör structs 0. / structs 0, studentens namn, låt oss ge David, han lever 77 00:04:26,850 --> 00:04:31,580 i Mather House, studentens namn, låt oss säger Lauren, hon bor i Leverett 78 00:04:31,580 --> 00:04:36,590 Hus, studentens namn, Rob, han bor i Kirkland House. 79 00:04:36,590 --> 00:04:39,440 Och faktiskt, är David i Mather, Lauren är i Rett, 80 00:04:39,440 --> 00:04:40,810 och Rob är i Kirkland. 81 00:04:40,810 --> 00:04:43,425