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