2 00:00:00,000 --> 00:00:02,760 >> SPEAKER 1: Lad os skrive et program, beder brugeren om navne og 3 00:00:02,760 --> 00:00:04,700 huse af tre studerende. 4 00:00:04,700 --> 00:00:08,840 Nu, for at gemme disse navne og huse vi kunne bruge, hvad seks variabler. 5 00:00:08,840 --> 00:00:12,260 Tre strenge til navne, og en anden tre strenge til husene, 6 00:00:12,260 --> 00:00:16,560 men vi ved allerede, at vi kan rydde op at kode ved hjælp af arrays i stedet for, 7 00:00:16,560 --> 00:00:20,220 for eksempel en matrix af størrelsen 3 til tre navne, og en anden række 8 00:00:20,220 --> 00:00:22,110 str. 3 for husene. 9 00:00:22,110 --> 00:00:25,870 Men det viser sig, at vi kan rense det op endnu længere, og faktisk holde dem 10 00:00:25,870 --> 00:00:30,520 navne og huse sammen, således at en studerendes navn og hans eller hendes hus 11 00:00:30,520 --> 00:00:34,940 eller anden måde er indkapslet, så at tale, i den samme variabel. 12 00:00:34,940 --> 00:00:39,095 >> For at gøre dette, er vi nødt til at erklære vores egen datatype, vores egen type i C, 13 00:00:39,095 --> 00:00:42,660 at forfatterne af C ikke nødvendigvis tænke år siden. 14 00:00:42,660 --> 00:00:45,630 For at gøre dette kan vi bruge nøgleordet typedef, sammen med 15 00:00:45,630 --> 00:00:47,200 andet søgeord struct. 16 00:00:47,200 --> 00:00:48,160 Lad os tage et kig. 17 00:00:48,160 --> 00:00:50,650 Inde i structs.h, har jeg allerede fået startede med 18 00:00:50,650 --> 00:00:52,560 herunder CS50 biblioteket. 19 00:00:52,560 --> 00:00:57,640 Jeg næste kommer til at skrive typedef struct, og derefter en klammeparentes. 20 00:00:57,640 --> 00:01:01,370 Inde i struct, vil jeg angive, at en elev skal have en 21 00:01:01,370 --> 00:01:04,960 streng kaldet navn, og en anden streng kaldet hus. 22 00:01:04,960 --> 00:01:08,430 Jeg har tænkt mig at så lukke mine krøllede parenteser, og angive, at navnet på 23 00:01:08,430 --> 00:01:11,420 denne nye datatype skal være studerende. 24 00:01:11,420 --> 00:01:15,550 Med andre ord via denne syntaks har jeg erklæret en ny datatype min egen 25 00:01:15,550 --> 00:01:19,910 der ikke eksisterede for et øjeblik siden, og indersiden af ​​denne datatype er to data 26 00:01:19,910 --> 00:01:24,270 felter eller data medlemmer, den ene kaldet navn, en kaldet hus, som begge 27 00:01:24,270 --> 00:01:25,630 er af typen string. 28 00:01:25,630 --> 00:01:27,690 >> Lad os nu bruge denne type i en faktiske program. 29 00:01:27,690 --> 00:01:30,210 30 00:01:30,210 --> 00:01:34,090 I structs0.c, jeg har ligeledes fået selv startede allerede med nogle 31 00:01:34,090 --> 00:01:36,999 standardtekst kode, og jeg er nu kommer til at bruge disse data 32 00:01:36,999 --> 00:01:39,100 skrive student, som følger. 33 00:01:39,100 --> 00:01:42,450 Jeg først kommer til at erklære en vifte af typen student, vil jeg 34 00:01:42,450 --> 00:01:43,920 kalder array studerende - 35 00:01:43,920 --> 00:01:44,630 flertalsform - 36 00:01:44,630 --> 00:01:49,360 og jeg vil præcisere, at dens størrelse vil være tre, hvilket varsel, er værdien af 37 00:01:49,360 --> 00:01:50,880 de konstante studerende - 38 00:01:50,880 --> 00:01:51,890 i alle hovedstæder - 39 00:01:51,890 --> 00:01:54,930 at jeg har erklæret op her, tidligere i filen. 40 00:01:54,930 --> 00:01:58,280 Lad os nu gentage over disse tre studerende og bede brugeren om 41 00:01:58,280 --> 00:02:00,050 deres navne og huse. 42 00:02:00,050 --> 00:02:05,422 >> for int jeg får 0, jeg er mindre end at konstant, jeg + +. 43 00:02:05,422 --> 00:02:08,600 Og nu inde i kroppen af ​​dette for loop, jeg har tænkt mig at udskrive noget 44 00:02:08,600 --> 00:02:11,470 ligesom studerendes navn. 45 00:02:11,470 --> 00:02:14,890 Jeg derefter gå til rent faktisk at få det studerendes navn ved at angive 46 00:02:14,890 --> 00:02:17,290 studerende bracketing jeg. 47 00:02:17,290 --> 00:02:21,550 Med andre ord, jeg vil have det i'te studerende i et array kaldet studerende, men nu 48 00:02:21,550 --> 00:02:25,340 Jeg ønsker at få på det i'te elevs navn, og for at gøre dette, vil jeg bruge 49 00:02:25,340 --> 00:02:30,160 den. operatøren for at få på en specifikke område inde i struct. 50 00:02:30,160 --> 00:02:37,100 Så jeg angive eleverne bracketing jeg. Navn får returværdien af ​​getString (). 51 00:02:37,100 --> 00:02:40,310 I mellemtiden vil jeg printe ud noget lignende, siger studerende 52 00:02:40,310 --> 00:02:45,410 hus, og nu vil jeg til at angive at den i'te felt studerende hus 53 00:02:45,410 --> 00:02:49,480 skal få returværdien af et andet opkald til getString (). 54 00:02:49,480 --> 00:02:52,350 >> Lad os nu gøre noget med disse tre elevernes navne og huse, 55 00:02:52,350 --> 00:02:56,230 noget simpelt som udskrivning hver i en sætning. 56 00:02:56,230 --> 00:03:07,580 for int jeg får 0, igen jeg er mindre end studerende i + +, printf "% s er% s. 57 00:03:07,580 --> 00:03:12,600 backslash n ", og lad mig nu tilslutte værdierne af disse to områder, 58 00:03:12,600 --> 00:03:19,055 studerende bracketing jeg. navn, komma, studerende bracketing jeg. hus tæt 59 00:03:19,055 --> 00:03:21,290 paren, semikolon. 60 00:03:21,290 --> 00:03:23,020 >> Og nu har jeg brug for at gøre en ting mere. 61 00:03:23,020 --> 00:03:26,600 I bunden af ​​denne fil, jeg har brug for frigøre hukommelse, der blev tildelt 62 00:03:26,600 --> 00:03:30,290 bag kulisserne ved GetSring (), som naturligvis kræver allokere med henblik på at 63 00:03:30,290 --> 00:03:32,500 tildele hukommelse til strygerne brugeren 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, i er mindre end studerende i + +, og inde i kroppen af 66 00:03:42,610 --> 00:03:48,670 denne for-løkke, jeg simpelthen at gå til giver gratis elever beslag jeg. navn, 67 00:03:48,670 --> 00:03:52,300 og frie elever bracketing jeg. hus. 68 00:03:52,300 --> 00:03:55,620 >> Nu har vi klart anvendes tre efter sløjfer i dette program, da jeg virkelig 69 00:03:55,620 --> 00:03:58,800 kunne bare have brugt en, men det er bare for demonstration skyld, så 70 00:03:58,800 --> 00:04:02,850 Vi kan angive i tre særskilte trin hvad vi laver. 71 00:04:02,850 --> 00:04:06,120 Vi er først at få et navn og et hus for hver af de studerende, er vi så 72 00:04:06,120 --> 00:04:08,900 udskrive navn og huset for hver af de tre elever, og 73 00:04:08,900 --> 00:04:11,910 så vi kommer til at frigøre hukommelse anvendes af hver af de studerende. 74 00:04:11,910 --> 00:04:15,310 Men sikkert vi kunne har kombinere dette i en større for-løkke. 75 00:04:15,310 --> 00:04:18,650 >> Lad os nu gemme, kompilere, og køre dette program. 76 00:04:18,650 --> 00:04:26,850 gør structs 0. / structs 0, studerendes navn, lad os give David, han vil leve 77 00:04:26,850 --> 00:04:31,580 i Mather House, studerendes navn, lad os siger Lauren, hun bor i Leverett 78 00:04:31,580 --> 00:04:36,590 Hus, studerendes navn, Rob, vil han bor i Kirkland House. 79 00:04:36,590 --> 00:04:39,440 Og ja, David er 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