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.