2 00:00:00,000 --> 00:00:02,760 >> SPEAKER 1: Pojďme napsat program, který vyzve uživatele k zadání jména a 3 00:00:02,760 --> 00:00:04,700 domy tří studentů. 4 00:00:04,700 --> 00:00:08,840 Nyní pro uložení těchto jmen a domy bychom mohli použít, co šest proměnných. 5 00:00:08,840 --> 00:00:12,260 Tři řetězce pro názvy, a další tři struny pro domy, 6 00:00:12,260 --> 00:00:16,560 ale my už víme, že můžeme vyčistit že kód pomocí polí místo, 7 00:00:16,560 --> 00:00:20,220 Například pole velikosti 3 pro tři jména, a další řada 8 00:00:20,220 --> 00:00:22,110 velikost 3 pro domy. 9 00:00:22,110 --> 00:00:25,870 Ale ukazuje se, můžeme to vyčistit ještě dále, a vlastně udržet ty 10 00:00:25,870 --> 00:00:30,520 Jména a domy dohromady, aby Jméno studenta a jeho nebo její dům 11 00:00:30,520 --> 00:00:34,940 jsou nějak zapouzdřené, tak mluvit, do stejné proměnné. 12 00:00:34,940 --> 00:00:39,095 >> Chcete-li to provést, i když musíme přiznat náš vlastní datový typ, naše vlastní typ v jazyce C, 13 00:00:39,095 --> 00:00:42,660 že autoři C, ne nutně myslíte, že před lety. 14 00:00:42,660 --> 00:00:45,630 K tomu můžeme použít klíčové slovo typedef, spolu s 15 00:00:45,630 --> 00:00:47,200 jiné klíčové slovo struct. 16 00:00:47,200 --> 00:00:48,160 Pojďme se podívat. 17 00:00:48,160 --> 00:00:50,650 Uvnitř structs.h, jsem již dostali začal 18 00:00:50,650 --> 00:00:52,560 včetně knihovny CS50. 19 00:00:52,560 --> 00:00:57,640 Já příští bude psát typedef struct, a pak složená závorka. 20 00:00:57,640 --> 00:01:01,370 Uvnitř struct, budu určit, že student musí mít 21 00:01:01,370 --> 00:01:04,960 string s názvem název, a další řetězec s názvem dům. 22 00:01:04,960 --> 00:01:08,430 Budu pak zavřu složené závorky, a určit, že název 23 00:01:08,430 --> 00:01:11,420 tento nový datový typ musí být studentem. 24 00:01:11,420 --> 00:01:15,550 Jinými slovy, pomocí této syntaxe se mi prohlásil nový datový typ z mé vlastní 25 00:01:15,550 --> 00:01:19,910 že neexistovala před chvílí, a uvnitř tohoto typu dat jsou dva údaje 26 00:01:19,910 --> 00:01:24,270 pole nebo datové členy, jeden s názvem název, jeden volal dům, který oba 27 00:01:24,270 --> 00:01:25,630 jsou typu string. 28 00:01:25,630 --> 00:01:27,690 >> Pojďme se nyní používají tento typ ve skutečném programu. 29 00:01:27,690 --> 00:01:30,210 30 00:01:30,210 --> 00:01:34,090 V structs0.c, jsem stejně dostal Sám začal již s některými 31 00:01:34,090 --> 00:01:36,999 často používaný kód, a já jsem teď bude tato data použít 32 00:01:36,999 --> 00:01:39,100 typ studenta, a to následovně. 33 00:01:39,100 --> 00:01:42,450 Já jsem první bude deklarovat Pole typu student, budu 34 00:01:42,450 --> 00:01:43,920 zavolejte studenty pole - 35 00:01:43,920 --> 00:01:44,630 množné číslo - 36 00:01:44,630 --> 00:01:49,360 a budu specifikovat, že jeho velikost bude tři, které, oznámení, je hodnota 37 00:01:49,360 --> 00:01:50,880 konstantní STUDENTI - 38 00:01:50,880 --> 00:01:51,890 ve všech hlavních městech - 39 00:01:51,890 --> 00:01:54,930 že jsem prohlásil tady, dříve v souboru. 40 00:01:54,930 --> 00:01:58,280 Pojďme se nyní iteraci těchto tří studenti, a vyzve uživatele k 41 00:01:58,280 --> 00:02:00,050 jejich jména a domy. 42 00:02:00,050 --> 00:02:05,422 >> pro int i dostat 0, i méně než konstantní, i + +. 43 00:02:05,422 --> 00:02:08,600 A teď uvnitř těla to pro smyčky, jdu vytisknout něco 44 00:02:08,600 --> 00:02:11,470 jako jméno studenta. 45 00:02:11,470 --> 00:02:14,890 Já pak bude skutečně dostat, že jméno studenta zadáním 46 00:02:14,890 --> 00:02:17,290 Studenti bracketing i. 47 00:02:17,290 --> 00:02:21,550 Jinými slovy, chci i-tého studenta na pole s názvem studenti, ale nyní 48 00:02:21,550 --> 00:02:25,340 Chci se dostat na to i-tého studenta jméno, a jak to udělat, budu používat 49 00:02:25,340 --> 00:02:30,160 . hospodářský subjekt, aby si na specifických oblastí uvnitř struct. 50 00:02:30,160 --> 00:02:37,100 Tak jsem zadat studenti bracketing jsem. Název dostane návratovou hodnotu GetString (). 51 00:02:37,100 --> 00:02:40,310 Mezitím, jdu vytisknout něco podobného, ​​řekl studenta 52 00:02:40,310 --> 00:02:45,410 dům, a teď budu specifikovat že i-tý studenti house pole 53 00:02:45,410 --> 00:02:49,480 musí získat návratovou hodnotu další volání GetString (). 54 00:02:49,480 --> 00:02:52,350 >> Nyní se pojďme něco udělat s těmito třemi Jména a domy žáků, 55 00:02:52,350 --> 00:02:56,230 něco jednoduchého jako tisk každý ve větě. 56 00:02:56,230 --> 00:03:07,580 pro int i se 0, opět jsem je nižší než studenti, i + +, printf "% s je% s. 57 00:03:07,580 --> 00:03:12,600 Zpětné lomítko n ", a teď mi dovolte připojit Hodnoty těchto dvou oblastech, 58 00:03:12,600 --> 00:03:19,055 Studenti bracketing jsem. název, čárka, Studenti bracketing i. dům, v blízkosti 59 00:03:19,055 --> 00:03:21,290 závorka, středník. 60 00:03:21,290 --> 00:03:23,020 >> A teď musím udělat ještě jednu věc. 61 00:03:23,020 --> 00:03:26,600 V dolní části tohoto souboru, musím uvolnit paměť, která byla přidělena 62 00:03:26,600 --> 00:03:30,290 v zákulisí podle GetSring (), která samozřejmě volání malloc, aby se 63 00:03:30,290 --> 00:03:32,500 alokovat paměť pro smyčce uživatel zadá. 64 00:03:32,500 --> 00:03:35,720 Ale to je jednoduché. 65 00:03:35,720 --> 00:03:42,610 pro int i dostat 0, i je menší než studenti, i + +, a uvnitř těla 66 00:03:42,610 --> 00:03:48,670 Tento cyklus for, jsem prostě jít na poskytovat bezplatnou studenti držák i. název, 67 00:03:48,670 --> 00:03:52,300 a volné studenti bracketing i. dům. 68 00:03:52,300 --> 00:03:55,620 >> Nyní jsme jasně používají tři pro smyčky v tomto programu, když jsem opravdu 69 00:03:55,620 --> 00:03:58,800 mohla být použita jen jedna, ale je to jen pro demonstraci příčinu, aby 70 00:03:58,800 --> 00:04:02,850 můžeme určit, ve třech různých kroky, co přesně děláme. 71 00:04:02,850 --> 00:04:06,120 Jsme první získání jména a dům pro každý ze studentů, jsme pak 72 00:04:06,120 --> 00:04:08,900 vytisknout název a dům pro každý ze tří studentů, a 73 00:04:08,900 --> 00:04:11,910 pak budeme uvolnit paměť použít každý ze studentů. 74 00:04:11,910 --> 00:04:15,310 Ale určitě bychom se mohli jsme spojit tento do jednoho většího cyklu for. 75 00:04:15,310 --> 00:04:18,650 >> Pojďme nyní uložit, zkompilovat, a spustit tento program. 76 00:04:18,650 --> 00:04:26,850 tvoří structs 0. / structs 0, studenta jméno, pojďme poskytnout Davida, bude žít 77 00:04:26,850 --> 00:04:31,580 v Mather dům, jméno studenta, pojďme říká Lauren, ona žije v Leverett 78 00:04:31,580 --> 00:04:36,590 Dům, jméno studenta, Rob, že bude žijí v Kirkland House. 79 00:04:36,590 --> 00:04:39,440 A skutečně, David je v Mather, Lauren je v Leverett, 80 00:04:39,440 --> 00:04:40,810 a Rob je v Kirkland. 81 00:04:40,810 --> 00:04:43,425