SPEAKER 1: Pojďme napsat program, který vyzve uživatele k zadání jména a domy tří studentů. Nyní pro uložení těchto jmen a domy bychom mohli použít, co šest proměnných. Tři řetězce pro názvy, a další tři struny pro domy, ale my už víme, že můžeme vyčistit že kód pomocí polí místo, Například pole velikosti 3 pro tři jména, a další řada velikost 3 pro domy. Ale ukazuje se, můžeme to vyčistit ještě dále, a vlastně udržet ty Jména a domy dohromady, aby Jméno studenta a jeho nebo její dům jsou nějak zapouzdřené, tak mluvit, do stejné proměnné. Chcete-li to provést, i když musíme přiznat náš vlastní datový typ, naše vlastní typ v jazyce C, že autoři C, ne nutně myslíte, že před lety. K tomu můžeme použít klíčové slovo typedef, spolu s jiné klíčové slovo struct. Pojďme se podívat. Uvnitř structs.h, jsem již dostali začal včetně knihovny CS50. Já příští bude psát typedef struct, a pak složená závorka. Uvnitř struct, budu určit, že student musí mít string s názvem název, a další řetězec s názvem dům. Budu pak zavřu složené závorky, a určit, že název tento nový datový typ musí být studentem. Jinými slovy, pomocí této syntaxe se mi prohlásil nový datový typ z mé vlastní že neexistovala před chvílí, a uvnitř tohoto typu dat jsou dva údaje pole nebo datové členy, jeden s názvem název, jeden volal dům, který oba jsou typu string. Pojďme se nyní používají tento typ ve skutečném programu. V structs0.c, jsem stejně dostal Sám začal již s některými často používaný kód, a já jsem teď bude tato data použít typ studenta, a to následovně. Já jsem první bude deklarovat Pole typu student, budu zavolejte studenty pole - množné číslo - a budu specifikovat, že jeho velikost bude tři, které, oznámení, je hodnota konstantní STUDENTI - ve všech hlavních městech - že jsem prohlásil tady, dříve v souboru. Pojďme se nyní iteraci těchto tří studenti, a vyzve uživatele k jejich jména a domy. pro int i dostat 0, i méně než konstantní, i + +. A teď uvnitř těla to pro smyčky, jdu vytisknout něco jako jméno studenta. Já pak bude skutečně dostat, že jméno studenta zadáním Studenti bracketing i. Jinými slovy, chci i-tého studenta na pole s názvem studenti, ale nyní Chci se dostat na to i-tého studenta jméno, a jak to udělat, budu používat . hospodářský subjekt, aby si na specifických oblastí uvnitř struct. Tak jsem zadat studenti bracketing jsem. Název dostane návratovou hodnotu GetString (). Mezitím, jdu vytisknout něco podobného, ​​řekl studenta dům, a teď budu specifikovat že i-tý studenti house pole musí získat návratovou hodnotu další volání GetString (). Nyní se pojďme něco udělat s těmito třemi Jména a domy žáků, něco jednoduchého jako tisk každý ve větě. pro int i se 0, opět jsem je nižší než studenti, i + +, printf "% s je% s. Zpětné lomítko n ", a teď mi dovolte připojit Hodnoty těchto dvou oblastech, Studenti bracketing jsem. název, čárka, Studenti bracketing i. dům, v blízkosti závorka, středník. A teď musím udělat ještě jednu věc. V dolní části tohoto souboru, musím uvolnit paměť, která byla přidělena v zákulisí podle GetSring (), která samozřejmě volání malloc, aby se alokovat paměť pro smyčce uživatel zadá. Ale to je jednoduché. pro int i dostat 0, i je menší než studenti, i + +, a uvnitř těla Tento cyklus for, jsem prostě jít na poskytovat bezplatnou studenti držák i. název, a volné studenti bracketing i. dům. Nyní jsme jasně používají tři pro smyčky v tomto programu, když jsem opravdu mohla být použita jen jedna, ale je to jen pro demonstraci příčinu, aby můžeme určit, ve třech různých kroky, co přesně děláme. Jsme první získání jména a dům pro každý ze studentů, jsme pak vytisknout název a dům pro každý ze tří studentů, a pak budeme uvolnit paměť použít každý ze studentů. Ale určitě bychom se mohli jsme spojit tento do jednoho většího cyklu for. Pojďme nyní uložit, zkompilovat, a spustit tento program. tvoří structs 0. / structs 0, studenta jméno, pojďme poskytnout Davida, bude žít v Mather dům, jméno studenta, pojďme říká Lauren, ona žije v Leverett Dům, jméno studenta, Rob, že bude žijí v Kirkland House. A skutečně, David je v Mather, Lauren je v Leverett, a Rob je v Kirkland.