>> SPEAKER 1: Ni skribi programon kiu stimulanta la uzanto por la nomoj kaj
domoj de tri studentoj.
Nun, por gardi tiujn nomojn kaj domoj ni povus uzi, kion, ses variabloj.
Tri kordoj por la nomoj, kaj alia tri kordojn por la domoj,
sed ni jam scias ke ni povas purigi ke kodo uzante arrays anstataŭe,
ekzemple tabelo de amplekso 3 por la tri nomoj, kaj alia tabelo de
grandeco 3 por la domoj.
Sed ĝi rezultas ni povas purigi ĉi supren pliaj ankoraŭ, kaj efektive observu tiujn
nomoj kaj domoj kune, tiel ke studenta nomo kaj lia aŭ ŝia domo
estas iel encapsulada, por tiel paroli, en la sama variablo.
>> Por fari tion, kvankam, ni bezonas por deklari nian propran datumtipo, nia propra tipo en C,
ke la aŭtoroj de C ne nepre pensi jarojn.
Por fari tion ni povas uzi la ŝlosilvorto typedef, kune kun la
alia ŝlosilvorto struct.
Ni rigardu.
Interne de structs.h, mi havas jam alveninta komenciĝis per
inkludante la CS50 biblioteko.
Mi sekvanta tuj tajpi typedef struct, kaj tiam krispa streĉa.
Interne de la struct, mi tuj specifi ke studento devas havi
ŝnuro nomita nomon, kaj la alian kordo nomata domo.
Mi tuj poste fermi miajn krispa krampoj, kaj specifi ke la nomo de
tiu nova datumtipo farigxos studento.
En aliaj vortoj, tra tiu sintakso mi deklarita nova datumtipo de mia propra
ke ne ekzistis antaŭ momento, kaj ene de tiu datumtipo estas du datumoj
kampoj aŭ datumoj membroj, oni nomis nomon, oni nomis domo, ambaŭ el kiuj
estas el tipo String.
>> Ni nun uzas tiun tipon en reala programo.
En structs0.c, mi simile alveninta mem komenciĝis jam kun iuj
boilerplate kodo, kaj mi estas nun tuj uzi ĉi datumoj
tajpi studento, kiel sekvas.
Mi unue tuj deklaru tabelo de tipo studento, mi
alvoki la tabelo studentoj -
pluralo -
kaj mi specifi ke ĝia grandeco estos tri, kiuj, avizo, estas la valoro de
la konstanta Lernantoj -
en ĉiuj ĉefurboj -
ke mi deklaris supren tien, pli frue en la dosiero.
Ni nun persisti super tiuj tri studentoj, kaj instigas la uzanton por
iliaj nomoj kaj domoj.
>> por int i get 0, i estas malpli ol tiu konstanto, i + +.
Kaj nun interne de la korpo de ĉi por buklo, mi tuj presi ion
kiel studenta nomo.
Mi tiam tuj reale atingi tiun studenta nomo de preciziganta
studentoj heligas i.
En aliaj vortoj mi volas la i-a student en la tabelo nomata studentoj, sed nun
Mi deziras ricevi en tiu i-a studenta nomon, kaj fari tion, mi tuj uzos
La. operatoro, la celo akiri ĉe specifa kampo ene de la struct.
Do mi specifi studentoj heligas i. Nomo gets la reveno valoro de GetString ().
Dume, mi tuj presi io simila, dirante studento
domo, kaj nun mi iras al precizigi ke la i-a lernantoj domo kampo
ricevos la reveno valoro de alia alvoko al GetString ().
>> Nun ni faru ion kun tiuj tri studentoj 'nomoj kaj domoj,
iu simpla kiel impreso ĉiun el en frazo.
por int i get 0, cetere mi estas malpli ol studentoj, i + +, printf "% s estas en% s.
backslash n ", kaj nun lasu min konekti la valoroj de tiuj du kampoj,
studentoj heligas i. nomo, komo, studentoj heligas i. domo, proksime
paren, punktokomo.
>> Kaj nun mi bezonas fari alia afero.
Ĉe la malsupro de tiu dosiero, mi bezonas liberigi la memoron kiu estis asignitaj
malantaux la scenoj de GetSring (), kiu kompreneble nomas malloc, celo
rezervi memoron por la kordoj la uzanto tajpas.
Sed tio al estas simpla.
por int i get 0, i estas malpli ol studentoj, i + +, kaj interne de la korpo de
ĉi por buklo, mi simple tuj provizi liberan studentoj krampo i. nomo,
kaj libera studentoj heligas i. domo.
>> Nun, ni klare uzis tri por masxojn en tiu programo, kiam vere mi
Povus esti simple uzi unu, sed tio estas nur por pruvo de sake, por ke
ni povas specifi en tri distingaj paŝas kio ekzakte ni faras.
Ni unue prenanta nomon kaj regxan domon por ĉiu el la lernantoj, ni do
presi ekstermi la nomon kaj la domon por ĉiu el la tri studentojn, kaj
tiam ni tuj liberigi la memoron uzata de ĉiu de la lernantoj.
Sed certe ni povus jam kombini tiun en unu pli granda por buklo.
>> Ni nun savu, kompili, kaj kuri ĉi programo.
fari structs 0. / structs 0, studento nomumi, ni provizas al David, li devos vivi
en Mather Domo, studenta nomo, ni diru Lauren, ŝi devos vivi en Leverett
Domo, studenta nomo, Rob, li tuj vivi en Kirkland Domo.
Kaj efektive David estas en Mather, Lauren estas en Leverett,
kaj Rob estas en Kirkland.