Ræðumaður 1: Við skulum skrifa forrit sem hvetja notandann um nöfn og hús þremur nemendum. Nú, til að geyma þau nöfn og hús við gátum notað, hvað, sex breytur. Þrír strengir fyrir nöfn og annað þrjú strengir fyrir húsunum, en við vitum nú þegar að við getum hreinsa upp að kóða með því að nota fylki í staðinn, til dæmis fylki af stærð 3 fyrir þrjú nöfn, og annar array stærð 3 fyrir húsunum. En það kemur í ljós að við getum hreinsa þetta upp frekar enn, og í raun að halda þeim nöfn og hús saman, þannig að nafn nemandans og hús hans eða hennar eru einhvern veginn encapsulated, svo að tala, í sömu breytu. Til að gera þetta, þó, þurfum við að lýsa eigin gögn okkar tegund, eigin tegund okkar í C, að höfundar C ekki endilega hugsa um árum. Til að gera þetta sem við getum notað leitarorð typedef, ásamt Aðrar Keyword strúktúr. Skulum taka a útlit. Inni structs.h, hef ég nú þegar fengið byrjaði á því þ.mt CS50 bókasafn. Ég ætla næst að fara að skrifa strúktúr typedef, og þá hrokkið Brace. Inni í strúktúr, ég ætla að tilgreina að nemandi skal hafa band nefndi, og annar band sem kallast hús. Ég ætla að svo loka hrokkið axlabönd mínum, og tilgreina að nafn Þessi nýja gögn gerð skal nemandi. Með öðrum orðum, í gegnum þessa setningafræði ég lýst ný gögn tegund mína eigin Það var ekki til í smá stund síðan, og inni þessum gögnum gerð eru tvær tölur sviðum eða gögn aðilar, einn nefndi, einn heitir hús, bæði sem eru af taginu String. Skulum nú nota þessa tegund í raun áætlun. Í structs0.c, hef ég álíka fengið sjálfur byrjaði þegar með nokkrum boilerplate kóða, og ég er nú fara að nota þessi gögn slá nemandinn, eins og hér segir. Ég ætla fyrst að fara að lýsa því yfir tæki af gerðinni nemandi, ég kalla array nemendur - fleirtölu - og ég ætla að tilgreina að stærð þess verður þrír, sem, tilkynning, er gildi þess að stöðug nemendur - í öllum höfuðborgum - sem ég hef lýst upp hér, Fyrr í skránni. Skulum nú kunnugt er yfir þeim þremur nemendur og hvetja notandann til nöfn þeirra og hús. fyrir int i fá 0, ég er minna en stöðug, ég + +. Og nú inni í líkama af þessu fyrir lykkja, ég ætla að prenta út eitthvað eins og nafn nemandans. Ég ætla þá að fara að í raun að fá það nafn nemandans með því að tilgreina nemendur krappi i. Með öðrum orðum ég vil i-ta nemanda í array sem heitir nemendur, en nú Ég vil fá á að I-th er nemandi nafn, og til að gera þetta, ég ætla að nota á. rekstraraðili, í því skyni að fá á a tilteknu sviði inni í strúktúr. Svo ég tilgreina nemendur krappi ég. Nafn fær skilagildi GetString (). Á meðan ætla ég að prenta út eitthvað svipað, sagði nemandans hús, og nú ætla ég að tilgreina að ég-th sviði nemendur hús skulu fá skilagildi annað símtal til GetString (). Nú skulum gera eitthvað með þessum þremur Nöfn nemenda og hús, eitthvað einfalt eins og prentun hvert út í setningu. fyrir int i fá 0, aftur I er minni en nemendur, ég + +, printf "% s er í% s. sviga n ", og nú láta mig stinga í sem gildin á þessum tveimur sviðum, nemendur krappi ég. nafn, kommu, nemendur krappi i. hús, nálægt paren, semíkommu. Og nú þarf ég að gera eitt í viðbót. Neðst á þessari skrá, ég þarf að losa minnið sem var úthlutað bak við tjöldin með GetSring (), sem Að sjálfsögðu kallar malloc, í því skyni að úthluta minni fyrir strengi notandinn slær inn. En þetta er einfalt. fyrir int i fá 0, I er minni en nemendur, ég + +, og inni í meginmál þetta fyrir lykkju, ég er einfaldlega að fara að veita ókeypis nemenda krappi i. nafn, og frjáls nemendur krappi i. hús. Nú höfum við greinilega notað þrjú fyrir lykkjur í þessari áætlun, þegar raunverulega ég hefðu bara notað einn, en þetta er bara fyrir sakir mótmælum, svo að við getum skilgreint í þremur mismunandi skref hvað nákvæmlega við erum að gera. Við erum fyrst að fá nafn og hús fyrir hvern nemenda, erum við þá prenta út nafn og hús hvert hinna þriggja nemenda, og þá erum við að fara að losa minni notuð af hverjum nemenda. En örugglega við hefði getað sameina þetta í einn stærri fyrir lykkju. Skulum nú spara, safna saman, og keyra þetta forrit. gera structs 0. / structs 0, nemandans nafn, skulum veita Davíð, þá er hann lifandi í Mather House, nafn nemanda, skulum segja Lauren, mun hún búa í Leverett Hús, nafn nemanda, Rob, verður hann búa í Kirkland House. Og reyndar, Davíð er í Mather, Lauren er í Leverett, og Rob er í Kirkland.