2 00:00:00,000 --> 00:00:02,760 >> SPEAKER 1: Să scrie un program care solicită utilizatorului pentru numele și 3 00:00:02,760 --> 00:00:04,700 case de trei elevi. 4 00:00:04,700 --> 00:00:08,840 Acum, pentru a stoca aceste nume și case am putea folosi, ceea ce, șase variabile. 5 00:00:08,840 --> 00:00:12,260 Trei siruri de caractere pentru numele, și un alt trei șiruri de case, 6 00:00:12,260 --> 00:00:16,560 dar știm deja că ne putem curăța acest cod, prin utilizarea matrice în schimb, 7 00:00:16,560 --> 00:00:20,220 de exemplu, o serie de dimensiune 3 pentru trei nume, și o altă serie de 8 00:00:20,220 --> 00:00:22,110 Dimensiunea 3 pentru case. 9 00:00:22,110 --> 00:00:25,870 Dar se pare că ne putem curăța asta mai mult încă, și de fapt, să păstreze pe cei 10 00:00:25,870 --> 00:00:30,520 nume și case împreună, astfel încât o Numele elevului și casa lui sau a ei 11 00:00:30,520 --> 00:00:34,940 sunt într-un fel încapsulate, așa să vorbesc, în aceeași variabilă. 12 00:00:34,940 --> 00:00:39,095 >> Pentru a face acest lucru, deși, trebuie să declare tip noastra de date proprie, propriul nostru tip în C, 13 00:00:39,095 --> 00:00:42,660 că autorii C nu conduce, cred că de ani în urmă. 14 00:00:42,660 --> 00:00:45,630 Pentru a face acest lucru, putem folosi cuvântul cheie typedef, împreună cu 15 00:00:45,630 --> 00:00:47,200 struct alte cuvinte cheie. 16 00:00:47,200 --> 00:00:48,160 Să aruncăm o privire. 17 00:00:48,160 --> 00:00:50,650 In interiorul structs.h, am deja ajuns început de 18 00:00:50,650 --> 00:00:52,560 inclusiv biblioteca CS50. 19 00:00:52,560 --> 00:00:57,640 Am lângă o să tip struct typedef, și apoi o acoladă. 20 00:00:57,640 --> 00:01:01,370 În interiorul de struct, am de gând să specifică faptul că un student trebuie să aibă o 21 00:01:01,370 --> 00:01:04,960 string numit nume, și un alt șir numit casă. 22 00:01:04,960 --> 00:01:08,430 Mă duc apoi pentru a închide bretele mele buclat, și precizează că numele de 23 00:01:08,430 --> 00:01:11,420 acest nou tip de date trebuie să fie elev. 24 00:01:11,420 --> 00:01:15,550 Cu alte cuvinte, prin această sintaxă avea eu a declarat un nou tip de date de propria mea 25 00:01:15,550 --> 00:01:19,910 că nu a existat un moment în urmă, și în interiorul acestui tip de date sunt două date 26 00:01:19,910 --> 00:01:24,270 câmpuri sau membrii de date, unul numit nume, unul numit casă, ambele fiind 27 00:01:24,270 --> 00:01:25,630 sunt de tip șir. 28 00:01:25,630 --> 00:01:27,690 >> Să folosim acum acest tip de într-un program real. 29 00:01:27,690 --> 00:01:30,210 30 00:01:30,210 --> 00:01:34,090 În structs0.c, am ajuns la fel de am început deja cu unele 31 00:01:34,090 --> 00:01:36,999 cod șabloane, iar eu sunt acum de gând să utilizeze aceste date 32 00:01:36,999 --> 00:01:39,100 tip de student, după cum urmează. 33 00:01:39,100 --> 00:01:42,450 Am în primul rând să declare un matrice de elev tip, voi 34 00:01:42,450 --> 00:01:43,920 apel elevii matrice - 35 00:01:43,920 --> 00:01:44,630 plural - 36 00:01:44,630 --> 00:01:49,360 și voi preciza că dimensiunea acesteia va fi trei, care, aviz, este valoarea de 37 00:01:49,360 --> 00:01:50,880 Studenții constante - 38 00:01:50,880 --> 00:01:51,890 în toate capitalele - 39 00:01:51,890 --> 00:01:54,930 pe care le-am declarat aici, mai devreme în fișierul. 40 00:01:54,930 --> 00:01:58,280 Hai acum repeta pe cele trei studenți, și cere utilizatorului pentru 41 00:01:58,280 --> 00:02:00,050 numele și casele lor. 42 00:02:00,050 --> 00:02:05,422 >> pentru int i obține 0, i este mai puțin decât că constanta, i + +. 43 00:02:05,422 --> 00:02:08,600 Și acum în interiorul corpului de acest lucru pentru buclă, am de gând să imprima ceva 44 00:02:08,600 --> 00:02:11,470 cum ar fi numele studentului. 45 00:02:11,470 --> 00:02:14,890 Am apoi mergi la a lua de fapt, că Numele elevului cu precizarea 46 00:02:14,890 --> 00:02:17,290 studenții bracketing i. 47 00:02:17,290 --> 00:02:21,550 Cu alte cuvinte, vreau studentului i-lea în matrice numit studenți, dar acum 48 00:02:21,550 --> 00:02:25,340 Vreau să ajung la faptul că i-lea student numele, și pentru a face acest lucru, am de gând să utilizeze 49 00:02:25,340 --> 00:02:30,160 . Operatorul, în scopul de a ajunge la un în interiorul specific domeniu a struct. 50 00:02:30,160 --> 00:02:37,100 Așa că am specifica studenți bracketing i. Nume devine valoarea de returnare a getString (). 51 00:02:37,100 --> 00:02:40,310 Între timp, am de gând să imprima ceva asemănător, spune student 52 00:02:40,310 --> 00:02:45,410 casa, iar acum am de gând să se precizeze că domeniul casă studenți i-lea 53 00:02:45,410 --> 00:02:49,480 se obține valoarea de returnare a un alt apel la getString (). 54 00:02:49,480 --> 00:02:52,350 >> Acum, hai sa facem ceva cu aceste trei numele și casele studenților, 55 00:02:52,350 --> 00:02:56,230 ceva simplu cum ar fi imprimare fiecare într-o propoziție. 56 00:02:56,230 --> 00:03:07,580 pentru int i se 0, din nou, i este mai mică de studenți, i + +, printf "% s este% s. 57 00:03:07,580 --> 00:03:12,600 backslash n ", și acum lasă-mă să conectați valorile din aceste două domenii, 58 00:03:12,600 --> 00:03:19,055 studenții bracketing i. nume, virgulă, studenții bracketing i. casă, aproape 59 00:03:19,055 --> 00:03:21,290 paren, punct și virgulă. 60 00:03:21,290 --> 00:03:23,020 >> Și acum am nevoie pentru a face un singur lucru. 61 00:03:23,020 --> 00:03:26,600 În partea de jos a acestui fișier, trebuie să elibera memorie care au fost alocate 62 00:03:26,600 --> 00:03:30,290 în spatele scenei de GetSring (), care invită desigur malloc, în scopul de a 63 00:03:30,290 --> 00:03:32,500 aloca memorie pentru siruri de caractere tipurile de utilizatori. 64 00:03:32,500 --> 00:03:35,720 Dar acest lucru sa este simplu. 65 00:03:35,720 --> 00:03:42,610 pentru int i obține 0, i este mai mică de studenți, i + +, iar în interiorul corpului 66 00:03:42,610 --> 00:03:48,670 acest lucru pentru bucla, am pur și simplu să oferă gratuit studenților suport i. nume, 67 00:03:48,670 --> 00:03:52,300 și studenții gratuite bracketing i.. casă. 68 00:03:52,300 --> 00:03:55,620 >> Acum, ne-am folosit în mod clar pentru trei bucle în acest program, atunci când într-adevăr am 69 00:03:55,620 --> 00:03:58,800 poate doar au folosit-o, dar acest lucru este doar de dragul demonstrație, astfel încât 70 00:03:58,800 --> 00:04:02,850 putem preciza în trei distincte pașii exact ceea ce facem. 71 00:04:02,850 --> 00:04:06,120 Primim în primul rând un nume și o casă pentru fiecare dintre elevi, suntem apoi 72 00:04:06,120 --> 00:04:08,900 imprimarea numele și casa de fiecare dintre cei trei elevi, iar 73 00:04:08,900 --> 00:04:11,910 apoi vom elibera memoria utilizate de către fiecare dintre elevi. 74 00:04:11,910 --> 00:04:15,310 Dar cu siguranță am fi putut combina aceasta într-una mai mare pentru buclă. 75 00:04:15,310 --> 00:04:18,650 >> Să acum salva, compila, și a alerga acest program. 76 00:04:18,650 --> 00:04:26,850 fac structs 0. / structs 0, student nume, să ofere David, el va trăi 77 00:04:26,850 --> 00:04:31,580 în Mather House, nume elev, să spune Lauren, ea va trăi în Leverett 78 00:04:31,580 --> 00:04:36,590 Casa, numele elevului, Rob, el voi trăiesc în Kirkland House. 79 00:04:36,590 --> 00:04:39,440 Și într-adevăr, David este în Mather, Lauren este în Leverett, 80 00:04:39,440 --> 00:04:40,810 și Rob este în Kirkland. 81 00:04:40,810 --> 00:04:43,425