>> 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.