1 00:00:00,000 --> 00:00:07,810 2 00:00:07,810 --> 00:00:09,840 >> JASON Hirschhorn: Bine ai venit, toată lumea, la Săptămâna 6. 3 00:00:09,840 --> 00:00:14,790 Mă bucur să vă văd pe toți în viață și bine după Quiz 0, pentru că știu că 4 00:00:14,790 --> 00:00:15,810 a fost un pic cam dur. 5 00:00:15,810 --> 00:00:18,370 Dar, din fericire, voi toți a facut incredibil de bine. 6 00:00:18,370 --> 00:00:21,680 Și, astfel, care este minunat. 7 00:00:21,680 --> 00:00:25,840 Dacă sunteți în secțiunea mea, m-am dat cel mai mult de ai sprijini deja teste tale. 8 00:00:25,840 --> 00:00:28,050 >> Un cuplu de tine, mă întâlnesc după clasă. 9 00:00:28,050 --> 00:00:32,360 Și dacă ești un student extindere și nu ați primit chestionar înapoi 10 00:00:32,360 --> 00:00:35,490 totuși, TF ta este, probabil, de lucru pe ea și clasificare-l, și-l va primi înapoi 11 00:00:35,490 --> 00:00:36,490 la scurt timp. 12 00:00:36,490 --> 00:00:39,650 Astfel încât elevii mei de extensie, care sunt uitam chiar acum - sperăm trăi - 13 00:00:39,650 --> 00:00:42,880 Eu va primi chestionare de în scurt timp, de asemenea. 14 00:00:42,880 --> 00:00:45,670 >> Agenda noastră pentru ziua de azi este după cum urmează. 15 00:00:45,670 --> 00:00:50,170 În primul rând, vom trece peste unele resurse care CS50 oferă pentru tine. 16 00:00:50,170 --> 00:00:54,590 Vom trece peste Quiz 0 viitoare, și Voi răspunde la orice întrebări pe nimeni 17 00:00:54,590 --> 00:00:57,360 are despre probleme specifice. 18 00:00:57,360 --> 00:01:02,050 Și atunci, vom merge peste fișier I / O și problema stabilit 5. 19 00:01:02,050 --> 00:01:07,360 Aceste ultimele două subiecte vor lua la cea mai mare parte a secțiunii de azi. 20 00:01:07,360 --> 00:01:11,680 >> Am pus această listă în fiecare săptămână ca un memento pentru voi toți, dar de bază 21 00:01:11,680 --> 00:01:14,650 secțiune, avem doar 90 minute - ne nu sunt în măsură să acopere tot ceea ce am 22 00:01:14,650 --> 00:01:16,280 ar plăcea să acopere pentru voi. 23 00:01:16,280 --> 00:01:21,170 Dar avem o tona de resurse pentru să se bazeze pe ca vei ajunge sa cunosti 24 00:01:21,170 --> 00:01:24,000 materialul și munca prin seturi de problema ta. 25 00:01:24,000 --> 00:01:30,810 >> Un memento că am un text on-line box, creat pentru tine să completați dacă 26 00:01:30,810 --> 00:01:33,250 au nici un feedback pentru mine, atât pozitive, cât și 27 00:01:33,250 --> 00:01:35,180 constructiv, despre secțiune. 28 00:01:35,180 --> 00:01:38,600 Că URL-ul este situat chiar aici. 29 00:01:38,600 --> 00:01:43,250 Asa ca te rog, ia un moment în cazul în care aveți orice feedback-ul, dacă în timpul secțiune, 30 00:01:43,250 --> 00:01:48,030 sau după, sau după ce te uiți video on-line, să-mi dea feedback-ul dumneavoastră. 31 00:01:48,030 --> 00:01:52,100 Apreciez orice și tot de ea. 32 00:01:52,100 --> 00:01:55,730 >> Deci, am avut conversații mici cu o mulțime de meu 33 00:01:55,730 --> 00:01:59,350 elevii pe tot parcursul săptămânii - așa cum am mână teste spate, vorbind despre 34 00:01:59,350 --> 00:02:01,480 Desigur, văd cum te descurci. 35 00:02:01,480 --> 00:02:05,120 Și o temă a venit de-a lungul și peste în a vorbi despre - în 36 00:02:05,120 --> 00:02:05,660 special - 37 00:02:05,660 --> 00:02:07,710 seturi de probleme. 38 00:02:07,710 --> 00:02:13,090 Și am încapsulate ca temă pe placa chiar acum. 39 00:02:13,090 --> 00:02:16,630 >> În esență, există o diferență între cotitură în ceva care este 40 00:02:16,630 --> 00:02:19,590 făcut în mod corect și ceva că se face bine. 41 00:02:19,590 --> 00:02:22,920 Cei mai mulți oameni au făcut fantastic în termeni de corectitudine - 42 00:02:22,920 --> 00:02:25,460 5 sau 4 de pe toate psets. 43 00:02:25,460 --> 00:02:27,930 Cei mai mulți oameni devin cele tot timpul. 44 00:02:27,930 --> 00:02:31,150 >> Cu toate acestea, doar pentru că ai făcut ceva bine nu inseamna ca ai 45 00:02:31,150 --> 00:02:34,450 face ceva la fel de elegant, sau eficient, sau la fel de curat ca tine 46 00:02:34,450 --> 00:02:35,270 ar fi putut face. 47 00:02:35,270 --> 00:02:36,790 Și asta e ceea ce de proiectare - 48 00:02:36,790 --> 00:02:39,230 și într-o mai mică măsură, stil - 49 00:02:39,230 --> 00:02:40,450 axe sunt pentru. 50 00:02:40,450 --> 00:02:45,130 Deci, eu sunt tu tot impinge, precum și alte TFS sunt împingând voi, la rândul său, nu numai 51 00:02:45,130 --> 00:02:48,320 în lucruri care sunt corecte, dar transforma în lucrurile care sunt codificate bine. 52 00:02:48,320 --> 00:02:53,060 >> Nu face inutile pentru bucle, Nu recalcularea variabile dacă 53 00:02:53,060 --> 00:02:53,800 tu nu trebuie sa. 54 00:02:53,800 --> 00:02:58,520 De exemplu, privind înapoi la problema stabili 4, atunci când plasarea cărămizi pe 55 00:02:58,520 --> 00:03:03,070 ecran, fiecare rând - fiecare cărămidă într-un rând având în vedere are aceeasi coordonata y - 56 00:03:03,070 --> 00:03:04,390 coordona aceeași înălțime. 57 00:03:04,390 --> 00:03:07,930 >> Astfel încât y-și coordoneze nu au nevoie să calculează în interiorul interior 58 00:03:07,930 --> 00:03:11,070 imbricate pentru bucla pe care ați folosit probabil pentru a pune aceste cărămizi de pe ecran. 59 00:03:11,070 --> 00:03:14,030 Este nevoie doar să se calculeze în fiecare timp ai schimbat un rând, sau 60 00:03:14,030 --> 00:03:15,200 sa mutat în jos un rând. 61 00:03:15,200 --> 00:03:19,760 Deci, spun că dacă există 10 de cărămizi într-o rând, fiecare caramida poate avea aceeași 62 00:03:19,760 --> 00:03:22,260 y-coordona, și că y-și coordoneze poate fi calculată doar 63 00:03:22,260 --> 00:03:23,550 o dată pentru totdeauna de cei. 64 00:03:23,550 --> 00:03:27,810 >> Ea nu are nevoie să fie calculată 10 ori, nici nu care au nevoie de calcul 65 00:03:27,810 --> 00:03:30,220 să se întâmple în real Funcția de apel - 66 00:03:30,220 --> 00:03:33,020 noul apel funcția gracked. 67 00:03:33,020 --> 00:03:37,820 Deci, dacă a fost un pic confuz pentru tu, mai generic, lucruri care 68 00:03:37,820 --> 00:03:40,730 nu trebuie să se întâmple de fiecare dată te duci printr-o buclă FOR nu ar trebui să fie 69 00:03:40,730 --> 00:03:42,900 a pus în interiorul bucla FOR, și nu ar trebui să se întâmplă de fiecare dată când merge 70 00:03:42,900 --> 00:03:44,080 prin bucla FOR. 71 00:03:44,080 --> 00:03:49,270 >> Un alt exemplu bun design-am văzut în Săptămâna 3 de 15, ai putea ține 72 00:03:49,270 --> 00:03:50,500 track de la zero. 73 00:03:50,500 --> 00:03:53,600 Deci, atunci când vă inițializa bord, vă salva - într-o variabilă globală, poate - 74 00:03:53,600 --> 00:03:56,140 x și y-coordonata zero. 75 00:03:56,140 --> 00:03:57,520 Și apoi ori de câte ori - 76 00:03:57,520 --> 00:04:00,310 în funcția mișcare, ori de câte ori face o mutare de succes, vă actualizați 77 00:04:00,310 --> 00:04:02,040 locație de la zero. 78 00:04:02,040 --> 00:04:06,240 >> Care le-ar salva de la a fi nevoie să facă imbricate PENTRU bucle să se uite prin 79 00:04:06,240 --> 00:04:10,700 bordul de fiecare dată în funcția mișcare și găsi la zero, sau găsi tigla, 80 00:04:10,700 --> 00:04:12,460 și apoi a verifica ceea ce este lângă ea. 81 00:04:12,460 --> 00:04:16,329 În schimb, veți avea nevoie de a la zero, poti sa te uiti chiar de mai sus, mai jos, 82 00:04:16,329 --> 00:04:21,160 și la stânga și la dreapta de ea, pentru a găsi tigla pe care o căutați. 83 00:04:21,160 --> 00:04:24,970 >> Deci, în ceea ce privește programele suntem scris, ei nu sunt suficient de mari 84 00:04:24,970 --> 00:04:28,580 că unele dintre aceste decizii de proiectare sunt într-adevăr de gând să împiedice dvs. 85 00:04:28,580 --> 00:04:31,670 program sau să-l rula mai lent, sau poate chiar a alerga afară de memorie. 86 00:04:31,670 --> 00:04:35,030 Dar suntem încă impinge voi să scrie la fel de elegant și 87 00:04:35,030 --> 00:04:36,450 cod eficient posibil. 88 00:04:36,450 --> 00:04:39,910 >> Deci, dacă se termină de scris lucruri care au o mult mai mare 89 00:04:39,910 --> 00:04:44,660 domeniul de aplicare, acestea vor fi scrise cu bună proiectare în afară de a fi corect. 90 00:04:44,660 --> 00:04:46,300 Astfel încât un număr de ai a adus asta. 91 00:04:46,300 --> 00:04:48,560 Asta e ceva ce căutăm - ceva ce am de gând să continue să 92 00:04:48,560 --> 00:04:49,840 te împinge tipi pe. 93 00:04:49,840 --> 00:04:52,460 >> Dacă aveți vreodată orice întrebări cu privire la proiectare a programului dumneavoastră, nu ezitați 94 00:04:52,460 --> 00:04:56,870 pentru a ajunge la mine, și eu sunt fericit să plimbare prin programul cu tine, 95 00:04:56,870 --> 00:05:01,320 și subliniază unele din proiectare deciziile le-ați făcut, și vă va oferi unele 96 00:05:01,320 --> 00:05:06,240 sugestii cu privire la modul de a face chiar decizii de design mai bune. 97 00:05:06,240 --> 00:05:08,870 >> Așa că am de gând să se mute pe pentru a vorbi despre Quiz 0. 98 00:05:08,870 --> 00:05:11,300 Înainte de a face acest lucru, nu oricine aveți întrebări cu privire la ceea ce 99 00:05:11,300 --> 00:05:14,252 Am acoperit până acum? 100 00:05:14,252 --> 00:05:21,500 >> [Fosnet NOISE] 101 00:05:21,500 --> 00:05:22,750 >> JASON Hirschhorn: Șapte secunde. 102 00:05:22,750 --> 00:05:23,250 OK. 103 00:05:23,250 --> 00:05:24,970 Hai sa vorbim despre Quiz 0 pentru un pic. 104 00:05:24,970 --> 00:05:26,700 Cele mai multe dintre voi au Quiz dvs. 0 înapoi. 105 00:05:26,700 --> 00:05:29,820 Dacă nu, sperăm vă amintiți-l un pic. 106 00:05:29,820 --> 00:05:34,770 Dar dacă v-ați luat Quiz 0, atunci au, de asemenea, acces la PDF on-line în 107 00:05:34,770 --> 00:05:35,890 soluțiile de eșantion. 108 00:05:35,890 --> 00:05:39,480 >> Are cineva întrebări înainte de a sărim în materie săptămânii despre 109 00:05:39,480 --> 00:05:41,520 o problemă deosebită pe Quiz 0 - 110 00:05:41,520 --> 00:05:44,630 de ce răspunsul este ceea ce este? 111 00:05:44,630 --> 00:05:47,255 E cineva confuz despre ceva? 112 00:05:47,255 --> 00:05:50,230 Chiar dacă ai problema corect, dar doar ar dori-mi să explic un pic 113 00:05:50,230 --> 00:05:52,640 mai mult, eu sunt fericit să facă acest lucru acum. 114 00:05:52,640 --> 00:05:57,800 >> Deci, am cerut ca voi să vin pregătit cu unele 115 00:05:57,800 --> 00:05:59,440 gânduri despre Quiz 0. 116 00:05:59,440 --> 00:06:02,660 Deci, care ar dori să ne ducă a început cu o întrebare sau 117 00:06:02,660 --> 00:06:04,655 comment despre Quiz 0? 118 00:06:04,655 --> 00:06:07,435 119 00:06:07,435 --> 00:06:10,410 >> [Fosnet HÂRTIE] 120 00:06:10,410 --> 00:06:11,470 >> JASON Hirschhorn: Nu toată lumea a făcut perfect. 121 00:06:11,470 --> 00:06:12,720 Deci, eu știu [râde] 122 00:06:12,720 --> 00:06:15,950 trebuie să existe câteva întrebări despre Quiz 0. 123 00:06:15,950 --> 00:06:27,940 124 00:06:27,940 --> 00:06:28,590 OK. 125 00:06:28,590 --> 00:06:29,210 Da. 126 00:06:29,210 --> 00:06:29,600 Ompica. 127 00:06:29,600 --> 00:06:30,520 >> OMPICA: Number 10. 128 00:06:30,520 --> 00:06:33,560 >> JASON Hirschhorn: Number 10. 129 00:06:33,560 --> 00:06:35,400 Care unul a fost numărul 10? 130 00:06:35,400 --> 00:06:35,840 >> OMPICA: - 131 00:06:35,840 --> 00:06:36,420 >> JASON Hirschhorn: I Nu ai mai dat - 132 00:06:36,420 --> 00:06:37,670 >> OMPICA: includ - 133 00:06:37,670 --> 00:06:40,060 134 00:06:40,060 --> 00:06:42,180 >> JASON Hirschhorn: Numărul 10 a fost de opt să i - scris opt la i? 135 00:06:42,180 --> 00:06:42,980 >> OMPICA: Da. 136 00:06:42,980 --> 00:06:43,630 >> JASON Hirschhorn: OK. 137 00:06:43,630 --> 00:06:47,390 Deci, o altă întrebare ai putea avea a întrebat a fost eu spusele? 138 00:06:47,390 --> 00:06:48,630 Răspunsul este da. 139 00:06:48,630 --> 00:06:52,060 În secțiunea înainte de testul, l-am întrebat voi a codifica atât Sterling și 140 00:06:52,060 --> 00:06:52,980 opt la i. 141 00:06:52,980 --> 00:06:54,770 Ambele dintre ele sa întâmplat cu apar pe testul. 142 00:06:54,770 --> 00:06:57,510 Deci, sperăm, ați plătit atenție la acest lucru. 143 00:06:57,510 --> 00:07:02,520 >> Și dacă ați avut, atunci ar trebui probabil, face bine pe cei doi. 144 00:07:02,520 --> 00:07:06,030 Dar opt la i, nu am făcut-o de fapt codul de ea în clasă, dar a fost, din nou, 145 00:07:06,030 --> 00:07:07,500 a întrebat pe testul. 146 00:07:07,500 --> 00:07:13,270 Deci, un cuplu de lucruri pentru a lua rețineți atunci când codificare opt la i. 147 00:07:13,270 --> 00:07:17,320 Primul lucru, pe întrebarea, a fost care ai nevoie pentru a verifica dacă șirul 148 00:07:17,320 --> 00:07:20,300 a fost egal cu zero. 149 00:07:20,300 --> 00:07:28,060 >> Un cuplu de oameni au încercat să verifice mai târziu în cadrul programului, dacă s bracket am fost - 150 00:07:28,060 --> 00:07:30,940 deci un caracter specific în care string - a fost egal cu zero. 151 00:07:30,940 --> 00:07:35,600 Dar amintiți-vă, că nul este în esență - e bine să se gândească de 152 00:07:35,600 --> 00:07:39,100 nul ca un indicator de zero - un pointer la zero - 153 00:07:39,100 --> 00:07:40,920 undeva în memorie în cazul în care niciodata nu poti accesa. 154 00:07:40,920 --> 00:07:44,730 >> Deci, dacă ceva este egal cu zero, te știu că nu a fost inițializat, 155 00:07:44,730 --> 00:07:46,430 sau nu e nimic acolo. 156 00:07:46,430 --> 00:07:50,950 Deci, s este o stea char, e suport i este un char. 157 00:07:50,950 --> 00:07:57,410 Deci are sens pentru a compara s la null, dar nu s suport i la null. 158 00:07:57,410 --> 00:07:59,390 Dar, din nou - pentru ca a fost primul lucru care ar fi trebuit să facă - 159 00:07:59,390 --> 00:08:03,510 verificați pentru a vă asigura că aveți de fapt, primit un șir adevărat. 160 00:08:03,510 --> 00:08:08,020 >> Apoi, a vrut să meargă prin fiecare personaj în șir. 161 00:08:08,020 --> 00:08:12,500 Și astfel, care ar fi ca un suport s Eu, de exemplu, în cazul în care i este iterator ta. 162 00:08:12,500 --> 00:08:17,250 Și să ia acest caracter, și obține valoarea sa reală. 163 00:08:17,250 --> 00:08:21,800 L-ați stocat ca un char, dar valoarea ASCII de la zero - 164 00:08:21,800 --> 00:08:23,010 zero, ca un personaj - 165 00:08:23,010 --> 00:08:25,450 nu este de fapt întreg zero. 166 00:08:25,450 --> 00:08:28,700 Este un alt număr pe care îl puteți căuta în tabelul ASCII. 167 00:08:28,700 --> 00:08:30,790 >> Deci, un mod de a corecta pentru ca - probabil cel mai bun mod de a corecta pentru 168 00:08:30,790 --> 00:08:33,760 care - se scade din ea valoarea de caractere - 169 00:08:33,760 --> 00:08:35,140 zero, ca un personaj. 170 00:08:35,140 --> 00:08:38,490 Citat singur astfel minus, la zero, un alt citat singur. 171 00:08:38,490 --> 00:08:44,620 Care va lua orice număr aveți ca un char, și să-l egal cu 172 00:08:44,620 --> 00:08:46,720 numărul ca un întreg real. 173 00:08:46,720 --> 00:08:50,300 >> Și care este foarte similar cu abordarea o mulțime de oameni au luat în 174 00:08:50,300 --> 00:08:52,800 problema set 2, cu Cezar și Viginere - 175 00:08:52,800 --> 00:08:55,160 aceste cifre, atunci când Au fost ei de rotație. 176 00:08:55,160 --> 00:08:59,210 Deci, după ce-l au ca un număr de la zero la nouă, apoi - în funcție de 177 00:08:59,210 --> 00:09:02,750 unde se duce în numărul final - aveți nevoie pentru a se multiplica 178 00:09:02,750 --> 00:09:04,120 cu o putere de 10. 179 00:09:04,120 --> 00:09:07,340 >> Unii oameni sa mutat de la spate pentru a față, și multiplicat individul 180 00:09:07,340 --> 00:09:08,940 număr de o putere de 10. 181 00:09:08,940 --> 00:09:11,160 Unii oameni sa mutat de la față și în spate - 182 00:09:11,160 --> 00:09:14,430 și așa au cea mai mare comanda numere în primul rând - 183 00:09:14,430 --> 00:09:18,190 și s-ar salva pe cei într-o variabila contra global. 184 00:09:18,190 --> 00:09:20,880 Și apoi de fiecare dată prin FOR buclă, înmulțiți că gigant global 185 00:09:20,880 --> 00:09:25,640 contracara variabilă de 10, pentru a face spațiu pentru char următor. 186 00:09:25,640 --> 00:09:28,750 >> Astfel că a fost un pic confuz, fără mi-l scriu pe tablă. 187 00:09:28,750 --> 00:09:31,550 Dar soluția de probă este disponibil pentru tine. 188 00:09:31,550 --> 00:09:32,870 Dar acestea au fost lucrurile mari am fost în căutarea pentru. 189 00:09:32,870 --> 00:09:36,400 De asemenea, o verificare pentru a se asigura că fiecare caracter individual a fost într-adevăr o 190 00:09:36,400 --> 00:09:39,780 caracter între zero și nouă, și nu un alt personaj, ca un A, 191 00:09:39,780 --> 00:09:41,160 de exemplu. 192 00:09:41,160 --> 00:09:43,150 >> Acestea au fost lucrurile pe care le caută de la această întrebare. 193 00:09:43,150 --> 00:09:46,510 194 00:09:46,510 --> 00:09:47,980 Asta răspunde la întrebarea dvs.? 195 00:09:47,980 --> 00:09:49,320 >> OMPICA: Da. 196 00:09:49,320 --> 00:09:50,240 >> JASON Hirschhorn: OK. 197 00:09:50,240 --> 00:09:53,940 Sunt acolo orice alte întrebări despre Quiz 0? 198 00:09:53,940 --> 00:09:55,440 Ce despre compilarea? 199 00:09:55,440 --> 00:09:56,740 Toată lumea compilarea corect? 200 00:09:56,740 --> 00:09:58,370 Nu. 201 00:09:58,370 --> 00:09:58,840 Au existat o - 202 00:09:58,840 --> 00:10:01,010 [Râde] 203 00:10:01,010 --> 00:10:03,265 Orice întrebări cu privire la procesul de compilare? 204 00:10:03,265 --> 00:10:06,050 205 00:10:06,050 --> 00:10:06,966 Wow. 206 00:10:06,966 --> 00:10:11,090 >> [Fosnet HÂRTIE] 207 00:10:11,090 --> 00:10:11,520 >> JASON Hirschhorn: Da. 208 00:10:11,520 --> 00:10:11,700 Michael. 209 00:10:11,700 --> 00:10:14,140 >> MICHAEL: Este numărul 7 - aleator? 210 00:10:14,140 --> 00:10:16,500 >> JASON Hirschhorn: Numarul 7. 211 00:10:16,500 --> 00:10:20,670 Număr de 7 a fost de a obține un număr întreg aleator. 212 00:10:20,670 --> 00:10:21,110 Excelent. 213 00:10:21,110 --> 00:10:25,630 Deci ai dat un întreg o și o întreg b, și doriți o întâmplare 214 00:10:25,630 --> 00:10:28,710 număr întreg între a și b. 215 00:10:28,710 --> 00:10:31,740 Putem scrie de fapt, aceasta în bord, deoarece acesta 216 00:10:31,740 --> 00:10:33,320 a fost o linie de cod - 217 00:10:33,320 --> 00:10:34,390 O modalitate de a face acest lucru. 218 00:10:34,390 --> 00:10:37,810 >> Deci, suntem dat drand ca o Funcția am putea folosi. 219 00:10:37,810 --> 00:10:38,820 Și ce drand - 220 00:10:38,820 --> 00:10:40,290 presupunând că aceasta a fost însămânțată - 221 00:10:40,290 --> 00:10:42,316 ce drand întoarce? 222 00:10:42,316 --> 00:10:44,840 >> MICHAEL: Un flotor între 0.0 și 1.0. 223 00:10:44,840 --> 00:10:45,530 >> JASON Hirschhorn: O serie - da. 224 00:10:45,530 --> 00:10:47,910 Un număr între 0 și 1. 225 00:10:47,910 --> 00:10:51,760 Și așa ne-au b și o. 226 00:10:51,760 --> 00:10:55,480 Și apoi ne-am număr nostru aleatoriu între 0 și 1 ne-a dat de drand. 227 00:10:55,480 --> 00:11:01,480 228 00:11:01,480 --> 00:11:06,630 Unii oameni au încercat să pună b, sau b minus o, sau ceva în interiorul celor 229 00:11:06,630 --> 00:11:07,960 paranteze. 230 00:11:07,960 --> 00:11:11,210 Asta ar însemna că acestea sunt argumente pentru această funcție. 231 00:11:11,210 --> 00:11:13,450 >> drand nu ia nici un argument - ca getString nu 232 00:11:13,450 --> 00:11:14,330 nu ia nici un argument. 233 00:11:14,330 --> 00:11:16,600 Deci, este doar paren deschise, aproape paren - și care, în sine, este 234 00:11:16,600 --> 00:11:17,330 apelul funcției. 235 00:11:17,330 --> 00:11:19,770 Și care vă oferă un număr între 0 și 1. 236 00:11:19,770 --> 00:11:22,820 Desigur, avem o gamă întreagă că numerele pot fi inch 237 00:11:22,820 --> 00:11:28,470 >> Spun, în cazul în care b este de 10 și o este de 5, am într-adevăr Vreau un număr cu o gamă de 5. 238 00:11:28,470 --> 00:11:36,940 Deci, urmatorul lucru ce trebuie să facem este multiplica acest lucru prin gama b minus. 239 00:11:36,940 --> 00:11:40,380 Deci, presupunând că este înmulțit. 240 00:11:40,380 --> 00:11:42,590 Și că ne va da un număr într-un interval dat. 241 00:11:42,590 --> 00:11:46,610 Și că anumit interval fiind cel diferență între b minus o. 242 00:11:46,610 --> 00:11:50,030 >> Și, în sfârșit, că acesta va da doar de la - spune intervalul dintre b minus un 243 00:11:50,030 --> 00:11:52,520 este 5, care ne-o da număr de la 0 la 5. 244 00:11:52,520 --> 00:11:56,000 Dar în cazul în care un este, de fapt 5, avem nevoie pentru a stimula acest interval de până la în cazul în care este 245 00:11:56,000 --> 00:12:01,380 de fapt, ar trebui să fie, prin adăugarea unei. 246 00:12:01,380 --> 00:12:02,580 Astfel că devine dreptul de logică. 247 00:12:02,580 --> 00:12:03,745 Și apoi, ai avea o altă întrebare? 248 00:12:03,745 --> 00:12:04,547 >> MICHAEL: Nu. 249 00:12:04,547 --> 00:12:06,010 Mă simt foarte prost acum. 250 00:12:06,010 --> 00:12:06,405 [Râde] 251 00:12:06,405 --> 00:12:06,730 >> JASON Hirschhorn: Nu. 252 00:12:06,730 --> 00:12:08,640 Nu te simti cu adevarat prost. 253 00:12:08,640 --> 00:12:10,560 Un număr de oameni au luptat cu această întrebare. 254 00:12:10,560 --> 00:12:13,920 Și apoi, cealaltă întrebare este, drand, ai spus, vă oferă un float - 255 00:12:13,920 --> 00:12:14,940 returneaza un float. 256 00:12:14,940 --> 00:12:18,020 Dar această funcție, de fapt cerut pentru un întreg să fie returnat. 257 00:12:18,020 --> 00:12:23,700 >> Nu aveți nevoie pentru a arunca această explicit la un număr întreg, deoarece acestea 258 00:12:23,700 --> 00:12:29,090 operațiuni se va trata ca toate o float - ca un număr în virgulă mobilă. 259 00:12:29,090 --> 00:12:31,570 Ca această voință - chiar dacă acest lucru este un număr întreg, aceasta va 260 00:12:31,570 --> 00:12:32,890 fi multiplicate în mod corect. 261 00:12:32,890 --> 00:12:34,000 Toate multiplicarea va funcționa. 262 00:12:34,000 --> 00:12:35,060 Nu aveți nevoie să-l arunca aici. 263 00:12:35,060 --> 00:12:36,480 De fapt, tu nu ar trebui să arunce. 264 00:12:36,480 --> 00:12:37,310 >> Care ar fi - 265 00:12:37,310 --> 00:12:40,750 dacă v-ar arunca un număr care este între 0 și 1 - 266 00:12:40,750 --> 00:12:42,680 un număr aleator, un punct plutitor - 267 00:12:42,680 --> 00:12:47,850 atunci acesta va fi fie doar 0 sau 1, așa veți pierde toate astea precizie. 268 00:12:47,850 --> 00:12:50,120 Dar la sfârșitul anului, atunci când te vei întoarce, devine în mod automat 269 00:12:50,120 --> 00:12:51,620 trimis înapoi ca un întreg. 270 00:12:51,620 --> 00:12:56,870 Deci, nu aveți nevoie pentru a face care te turnare. 271 00:12:56,870 --> 00:13:00,810 >> Deci, aceasta a fost răspunsul la această întrebare, numărul 7. 272 00:13:00,810 --> 00:13:02,190 Orice alte întrebări cu privire la Quiz 0? 273 00:13:02,190 --> 00:13:03,300 Da, Annie. 274 00:13:03,300 --> 00:13:05,050 >> ANNIE: Când folosim recursiv - 275 00:13:05,050 --> 00:13:07,850 când folosim bucle iterative? 276 00:13:07,850 --> 00:13:10,210 >> JASON Hirschhorn: Când utilizați recursiv - cu atât mai mult, în general, 277 00:13:10,210 --> 00:13:14,110 argumente pro și contra de recursivitate față o abordare iterativ. 278 00:13:14,110 --> 00:13:17,110 Poate cineva oferi un pro sau un con? 279 00:13:17,110 --> 00:13:19,460 Te rog? 280 00:13:19,460 --> 00:13:20,140 Nu poate nimeni. 281 00:13:20,140 --> 00:13:22,526 Cine poate oferi un pro sau un con? 282 00:13:22,526 --> 00:13:26,963 >> [Fosnet HÂRTIE] 283 00:13:26,963 --> 00:13:29,730 >> STUDENT 1: recursive este mai puțin codificare - mai puțin de dactilografiere? 284 00:13:29,730 --> 00:13:33,170 >> JASON Hirschhorn: Deci, în general, recursivitate mai ales, o funcție - 285 00:13:33,170 --> 00:13:35,750 sau un algoritm ca îmbinare fel - care se pretează 286 00:13:35,750 --> 00:13:37,300 la o abordare recursiv - 287 00:13:37,300 --> 00:13:40,710 ar putea fi mai simplă de cod recursiv. 288 00:13:40,710 --> 00:13:43,940 Și doar face mai mult sens să o fac recursiv. 289 00:13:43,940 --> 00:13:46,230 Astfel că ar fi un pro la recursivitate. 290 00:13:46,230 --> 00:13:46,610 Altele? 291 00:13:46,610 --> 00:13:47,467 Da? 292 00:13:47,467 --> 00:13:49,240 >> STUDENT 2: Con de recursivitate - 293 00:13:49,240 --> 00:13:50,940 Acesta utilizează mai multă memorie. 294 00:13:50,940 --> 00:13:52,200 >> JASON Hirschhorn: Deci, exact dreapta. 295 00:13:52,200 --> 00:13:55,720 O funcție recursivă va păstra adăugarea stivă cadre de stiva. 296 00:13:55,720 --> 00:13:59,690 Deci, dacă sunteți de operare pe un lot de numere, și trebuie să numim această 297 00:13:59,690 --> 00:14:02,560 funcționează foarte mult, atunci cu siguranță va ia mai mult de memorie, în timp ce 298 00:14:02,560 --> 00:14:05,810 o abordare iterativ se va pune numai un singur stiva cadru pe stiva, deoarece 299 00:14:05,810 --> 00:14:08,420 totul se întâmplă într-o singură funcție. 300 00:14:08,420 --> 00:14:11,010 >> Orice alte argumente pro și contra? 301 00:14:11,010 --> 00:14:11,500 Da. 302 00:14:11,500 --> 00:14:12,550 >> STUDENT 3: Pro pentru recursivitate. 303 00:14:12,550 --> 00:14:15,950 Nu trebuie să determine în avans de câte ori 304 00:14:15,950 --> 00:14:17,660 cod trebuit să fie repetate. 305 00:14:17,660 --> 00:14:22,810 Puteți avea un număr predeterminat de ori pe care le au de a repeta, atunci 306 00:14:22,810 --> 00:14:26,420 recursivitate este mai bine, pentru că este nevoie de acest rezultat. 307 00:14:26,420 --> 00:14:27,780 >> JASON Hirschhorn: Eu cred că e adevărat. 308 00:14:27,780 --> 00:14:30,770 Dar cred că, în ambele cazuri, v-ar niciodată - 309 00:14:30,770 --> 00:14:33,290 v-ar lua, probabil, unele intrare de la utilizator. 310 00:14:33,290 --> 00:14:35,990 Sau această funcție ar avea unele de intrare care ar determina de câte ori se 311 00:14:35,990 --> 00:14:36,730 ar trebui să ruleze. 312 00:14:36,730 --> 00:14:39,520 Deci, în general, nu ar fi codul de greu - chiar și într-o abordare iterativ - cum 313 00:14:39,520 --> 00:14:40,940 de multe ori că bucla ar trebui să fie executați. 314 00:14:40,940 --> 00:14:46,100 315 00:14:46,100 --> 00:14:48,670 >> Ai avut un alt erai gândesc, Annie? 316 00:14:48,670 --> 00:14:49,330 OK. 317 00:14:49,330 --> 00:14:51,650 Deci, acestea sunt, probabil, cele două - 318 00:14:51,650 --> 00:14:54,370 cea mai mare pro și cea mai mare con la un recursiv față 319 00:14:54,370 --> 00:14:57,080 o abordare iterativ. 320 00:14:57,080 --> 00:14:57,690 OK. 321 00:14:57,690 --> 00:14:59,465 Orice altceva pe Quiz 0? 322 00:14:59,465 --> 00:15:08,940 323 00:15:08,940 --> 00:15:09,920 >> Să trecem mai departe. 324 00:15:09,920 --> 00:15:15,260 Fișier I / O. Există o scurtă minunat în această săptămână la dosar I / O, care, sperăm, 325 00:15:15,260 --> 00:15:19,270 ați vizionat mai multe ori, și admirat. 326 00:15:19,270 --> 00:15:22,910 O mulțime de muncă a intrat în asta, și am auzit că este incredibil de util. 327 00:15:22,910 --> 00:15:25,740 Am inclus, de asemenea, link-ul pe acest diapozitiv, în cazul în care nu au avut un 328 00:15:25,740 --> 00:15:29,160 sansa de a ma uit la ea de 10 ori. 329 00:15:29,160 --> 00:15:35,280 >> Deci, vom merge pe scurt peste pași importanți pentru deschidere și de lucru 330 00:15:35,280 --> 00:15:38,400 cu fișiere, și apoi vom se arunca cu capul într-o problemă de codificare înainte 331 00:15:38,400 --> 00:15:40,400 examinarea setul problemă. 332 00:15:40,400 --> 00:15:44,330 Deci, din nou, am de gând să pun asta pe ecran, dar am de gând să vorbesc pentru 333 00:15:44,330 --> 00:15:47,630 doar un minut despre ceea ce suntem a face aici cu fișier I/O-- 334 00:15:47,630 --> 00:15:49,090 Ce înseamnă asta? 335 00:15:49,090 --> 00:15:55,280 >> Asta înseamnă că ne putem crea noi programe, și apoi au programele noastre 336 00:15:55,280 --> 00:16:00,370 ieșire, și nu au făcut nici un impact asupra lumea din afara programului nostru. 337 00:16:00,370 --> 00:16:04,630 Dar atunci când vom începe să lucreze cu fișiere - atât citindu-le în și crearea de 338 00:16:04,630 --> 00:16:10,460 le - putem avea un anumit efect asupra lume în afara programului nostru. 339 00:16:10,460 --> 00:16:15,440 >> La fel ca în cazul în care Microsoft Word nu a fost în măsură să facă orice documente Word, apoi 340 00:16:15,440 --> 00:16:18,710 o dată Microsoft Word renuntat, toate de dvs. lucru s-ar fi plecat, și că ar fi 341 00:16:18,710 --> 00:16:19,740 într-adevăr să fie inutil. 342 00:16:19,740 --> 00:16:23,620 În cele din urmă vrem să fie în măsură să scrie programe care pot afecta 343 00:16:23,620 --> 00:16:31,350 lumea din jurul lor, atât prin luarea în intrări complexe - în termeni de fișiere și 344 00:16:31,350 --> 00:16:37,080 prin fișiere, și, de asemenea, crearea de interesant și ieșiri convingătoare - 345 00:16:37,080 --> 00:16:39,520 în ceea ce privește diferite tipuri de fișiere. 346 00:16:39,520 --> 00:16:43,730 >> Deci, de aceea încep să învăța cum să lucreze cu fișiere. 347 00:16:43,730 --> 00:16:47,080 Mai exact, ce ce facem este după cum urmează. 348 00:16:47,080 --> 00:16:47,680 Este foarte simplu. 349 00:16:47,680 --> 00:16:51,530 Există doar o pereche de pași, și ele sunt listate aici, pe acest cod. 350 00:16:51,530 --> 00:16:55,130 Așa că am de gând să treacă prin aceasta linie de cod de linie. 351 00:16:55,130 --> 00:16:57,630 >> În primul rând, veți vedea evidențiat - 352 00:16:57,630 --> 00:17:01,330 atunci când lucrați cu un fișier, indiferent de tipul de fișier este, 353 00:17:01,330 --> 00:17:02,670 aveți nevoie să-l deschidă. 354 00:17:02,670 --> 00:17:05,130 Și că este cu un apel la fopen - 355 00:17:05,130 --> 00:17:05,950 chiar aici. 356 00:17:05,950 --> 00:17:07,980 Includeți numele fișierului. 357 00:17:07,980 --> 00:17:11,930 Dacă fișierul nu este în directorul dumneavoastră, sau folderul în care acest program 358 00:17:11,930 --> 00:17:15,910 viața, atunci ai nevoie de asemenea să includă o cale de a în cazul în care acel fișier este. 359 00:17:15,910 --> 00:17:19,099 >> Vom presupune că această fișier numit "text.txt" - 360 00:17:19,099 --> 00:17:24,220 un document text simplu - este în același folder ca acest program este. 361 00:17:24,220 --> 00:17:26,859 Deci, acesta este un alt lucru de a păstra în minte - că, dacă doriți să deschideți un fișier 362 00:17:26,859 --> 00:17:30,050 în altă parte, de fapt, ai nevoie de pentru a include locația sa. 363 00:17:30,050 --> 00:17:33,520 >> În al doilea rând, se poate trece un argument pentru fopen, și asta e ceea ce vrei să faci 364 00:17:33,520 --> 00:17:34,620 cu fișierul. 365 00:17:34,620 --> 00:17:38,450 Există trei principalele argumente care ai de gând să treacă la fopen. 366 00:17:38,450 --> 00:17:40,060 Cine poate da-mi cele trei? 367 00:17:40,060 --> 00:17:44,960 368 00:17:44,960 --> 00:17:47,130 Cine poate da-mi unul dintre ei? 369 00:17:47,130 --> 00:17:48,130 Da. 370 00:17:48,130 --> 00:17:50,010 >> STUDENT 4: Numele de fișier? 371 00:17:50,010 --> 00:17:50,440 >> JASON Hirschhorn: Îmi pare rău. 372 00:17:50,440 --> 00:17:55,490 Trei principalele argumente puteți trece ca al doilea argument pentru fopen. 373 00:17:55,490 --> 00:17:57,060 Ai dreptate - numele fișierului este primul argument. 374 00:17:57,060 --> 00:18:01,620 Dar al doilea argument pentru fopen sunt în general trei siruri de caractere, și - da. 375 00:18:01,620 --> 00:18:02,210 Aleja. 376 00:18:02,210 --> 00:18:03,490 >> Aleja: A pentru adăugare. 377 00:18:03,490 --> 00:18:06,840 >> JASON Hirschhorn: A, dacă doriți să adăuga la un fișier care există deja. 378 00:18:06,840 --> 00:18:07,810 >> STUDENT 5: R pentru citire. 379 00:18:07,810 --> 00:18:09,930 >> JASON Hirschhorn: R, dacă Vreau să citesc dintr-un fișier. 380 00:18:09,930 --> 00:18:10,670 >> STUDENT 6: W pentru scriere. 381 00:18:10,670 --> 00:18:12,840 >> JASON Hirschhorn: Și w, dacă Vreau să scrie într-un fișier. 382 00:18:12,840 --> 00:18:17,570 Deci, în acest caz, ne scrii la dosar, așa că avem w. 383 00:18:17,570 --> 00:18:22,360 Îl deschideți, va trebui, de asemenea, pentru a salva fișier undeva, și că este cu 384 00:18:22,360 --> 00:18:26,000 cod pentru partea stângă a operatorul de atribuire - 385 00:18:26,000 --> 00:18:31,220 Creez un pointer la un fișier numit, în acest caz, fișier. 386 00:18:31,220 --> 00:18:36,070 >> Nu suntem de gând să vă faceți griji ceea ce aceasta toate capacele lucru FILE este. 387 00:18:36,070 --> 00:18:40,600 Este suficient să spunem, acesta este un lung flux de zero si unu. 388 00:18:40,600 --> 00:18:44,970 Și asta este modul în care vom opera aceasta și să înțelegeți. 389 00:18:44,970 --> 00:18:47,300 >> Următorul lucru pe care trebuie să facem - și acest lucru este incredibil de important - 390 00:18:47,300 --> 00:18:49,070 de fiecare dată când deschideți un fișier - 391 00:18:49,070 --> 00:18:54,250 în fapt, ori de câte ori te sun malloc, pentru exemplu, și de a lua unele de memorie și încercați 392 00:18:54,250 --> 00:18:57,980 și salvați-l într-un pointer, întotdeauna doriți să verificați pentru a vă asigura că 393 00:18:57,980 --> 00:19:00,230 Funcția nu a returnat null. 394 00:19:00,230 --> 00:19:05,230 >> Deci, în acest caz, ne sunt de verificare pentru a face sigur că suntem de fapt deschis 395 00:19:05,230 --> 00:19:10,230 dosar corect, și nu a existat nici o eroare în programul nostru. 396 00:19:10,230 --> 00:19:15,160 Apoi, odată ce ne-am verificat pentru a se asigura că avem un fișier de lucru, putem 397 00:19:15,160 --> 00:19:18,520 scrie, sau de a citi de la, sau adăuga la dosar. 398 00:19:18,520 --> 00:19:24,270 În acest caz, eu sunt pur și simplu de imprimare o linie la acest dosar. 399 00:19:24,270 --> 00:19:25,450 >> Cum știu asta? 400 00:19:25,450 --> 00:19:27,990 Ei bine, eu sunt, folosind această funcție numit fprintf. 401 00:19:27,990 --> 00:19:30,970 Toate funcțiile care le va folosi atunci când scris sau citit de la, sau 402 00:19:30,970 --> 00:19:34,950 manipularea de fișiere va fi similar cu Funcțiile le-ați văzut înainte, dar 403 00:19:34,950 --> 00:19:38,420 începe cu litera F, în picioare pentru fișier. 404 00:19:38,420 --> 00:19:43,440 Și fprintf, spre deosebire de imprimare noastră normală app, are un argument suplimentar, 405 00:19:43,440 --> 00:19:47,800 și că este dosarul în care ați doriți să imprimați această linie la. 406 00:19:47,800 --> 00:19:50,640 >> Nu am nimic de a dreptul de ohai. 407 00:19:50,640 --> 00:19:52,860 Nu am de-al treilea argument pentru printf - 408 00:19:52,860 --> 00:19:57,030 sau al doilea argument pentru printf, al treilea argument pentru fprintf, pentru că am 409 00:19:57,030 --> 00:19:59,480 nu au nici substituenți aici. 410 00:19:59,480 --> 00:20:01,070 Eu nu sunt, inclusiv orice variabile. 411 00:20:01,070 --> 00:20:06,070 Dar, din nou, fprintf si toate acestea fișier funcții care operează cu fișiere 412 00:20:06,070 --> 00:20:09,820 sunt, în general, avea nevoie de fișierul pe care ele funcționează. 413 00:20:09,820 --> 00:20:15,960 >> În cele din urmă, ultimul lucru important de face este de a închide dosarul, la fel ca 414 00:20:15,960 --> 00:20:19,530 cu - ori de câte ori ne-am malloc ceva, ne-o dorim pentru a elibera ceva, ca nu cumva să 415 00:20:19,530 --> 00:20:22,730 avea o scurgere de memorie - ne-o dorim pentru a închide dosarul nostru. 416 00:20:22,730 --> 00:20:28,180 În cazul în care acest program a ieșit fără închidere fișierul, șansele sunt nimic nu ar merge 417 00:20:28,180 --> 00:20:30,050 greșit, mai ales în cazul în care a fost un fișier mic. 418 00:20:30,050 --> 00:20:35,020 >> Dar este cu siguranță bun stil de codificare și practica de a închide întotdeauna fișierul 419 00:20:35,020 --> 00:20:38,050 atunci când ați terminat utilizarea acestuia. 420 00:20:38,050 --> 00:20:43,630 Astfel că este elementele de bază de dosar I / O. Ați văzut, probabil că înainte, sau 421 00:20:43,630 --> 00:20:45,710 privit-o în acel scurt fantastic. 422 00:20:45,710 --> 00:20:48,410 Are cineva întrebări, înainte de vom merge în unele de codificare practică 423 00:20:48,410 --> 00:20:51,800 probleme, despre fișier I / O sau pași tocmai m-am dus peste? 424 00:20:51,800 --> 00:21:00,198 425 00:21:00,198 --> 00:21:03,162 >> [Scrieți SUNETE] 426 00:21:03,162 --> 00:21:04,150 >> JASON Hirschhorn: Îți au o întrebare, Avi? 427 00:21:04,150 --> 00:21:04,660 >> AVI: Nu. 428 00:21:04,660 --> 00:21:04,740 >> JASON Hirschhorn: OK. 429 00:21:04,740 --> 00:21:06,746 Am de gând să aștepte un alt șapte secunde. 430 00:21:06,746 --> 00:21:07,590 [Râde] 431 00:21:07,590 --> 00:21:08,620 Acesta este un sfat foarte bun. 432 00:21:08,620 --> 00:21:10,750 Voi pur și simplu nu-mi place să pună întrebări. 433 00:21:10,750 --> 00:21:11,660 Asta e bine. 434 00:21:11,660 --> 00:21:12,330 OK. 435 00:21:12,330 --> 00:21:17,620 Deci, problema noastră în primul rând practică este, suntem O să duplicat funcția de 436 00:21:17,620 --> 00:21:22,330 un instrument de linie de comandă, care, probabil, folosit înainte - copie - 437 00:21:22,330 --> 00:21:23,500 instrumentul de copiere. 438 00:21:23,500 --> 00:21:28,050 Dacă tastați cp și apoi să-l dați două argumente în terminalul dumneavoastră, puteți 439 00:21:28,050 --> 00:21:28,980 copia un fișier. 440 00:21:28,980 --> 00:21:31,220 Și asta este ceea ce vom pentru a scrie chiar acum. 441 00:21:31,220 --> 00:21:35,830 >> Deci, din nou, citind de pe acest diapozitiv, mi-ar vă pentru a scrie un program care are 442 00:21:35,830 --> 00:21:38,130 două și numai două linie de comandă argumente - 443 00:21:38,130 --> 00:21:40,750 un fișier sursă și un fișier destinație - 444 00:21:40,750 --> 00:21:44,590 și copiază conținutul sursei fișier pentru fișierul destinație 445 00:21:44,590 --> 00:21:46,960 un octet la un moment dat. 446 00:21:46,960 --> 00:21:48,510 Astfel că o mulțime de a cere. 447 00:21:48,510 --> 00:21:52,200 >> Din nou, o abordare de bun pentru acest lucru este de a nu merge direct la codul C, dar 448 00:21:52,200 --> 00:21:54,280 rupe-l jos într-o pereche de pași. 449 00:21:54,280 --> 00:21:58,400 În primul rând, gândiți-vă la logica - exact ceea ce îți cer să faci - 450 00:21:58,400 --> 00:22:00,620 și să înțeleagă toate a pași pentru această problemă. 451 00:22:00,620 --> 00:22:04,410 Nu în C, doar în unele pseudocod, sau chiar un model mental de 452 00:22:04,410 --> 00:22:06,030 ceea ce se întâmplă. 453 00:22:06,030 --> 00:22:10,050 >> Apoi, odată ce ați pseudocod în jos, dau seama cum pseudocod 454 00:22:10,050 --> 00:22:14,600 hărți pe instrumente și lucrurile pe care le-ați învățat să folosească în C. 455 00:22:14,600 --> 00:22:19,070 >> Și, în cele din urmă, odată ce ai toate că împreună, puteți cod problema. 456 00:22:19,070 --> 00:22:23,370 Ia 5 la 10 minute pentru a lucreze la această problemă. 457 00:22:23,370 --> 00:22:25,800 Voi pune instrucțiunile înapoi într-o secundă. 458 00:22:25,800 --> 00:22:27,990 Și apoi vom trece peste pseudocod, și codul 459 00:22:27,990 --> 00:22:29,230 trăi ca un grup. 460 00:22:29,230 --> 00:22:31,640 >> Dacă aveți orice întrebări în timp ce sunteți lucrează la acest lucru, nu ezitați să ridice 461 00:22:31,640 --> 00:22:34,260 mâna ta, și voi veni în jurul și le răspund. 462 00:22:34,260 --> 00:22:37,020 463 00:22:37,020 --> 00:22:39,330 >> STUDENT 7: Pot să treceți o bucată de hârtie? 464 00:22:39,330 --> 00:22:41,537 >> JASON Hirschhorn: Care-i treaba? 465 00:22:41,537 --> 00:26:46,047 466 00:26:46,047 --> 00:26:48,043 >> [Scrieți SUNETE] 467 00:26:48,043 --> 00:26:48,730 >> JASON Hirschhorn: OK. 468 00:26:48,730 --> 00:26:51,710 Să trecem peste pseudocod în primul rând, și atunci eu voi da un cuplu mai mult 469 00:26:51,710 --> 00:26:52,960 minute pentru a termina codificare. 470 00:26:52,960 --> 00:26:55,540 471 00:26:55,540 --> 00:26:58,650 >> Cine ar vrea să-mi încep cu prima linie de 472 00:26:58,650 --> 00:27:00,030 pseudocod pentru această funcție? 473 00:27:00,030 --> 00:27:03,330 474 00:27:03,330 --> 00:27:05,740 >> STUDENT 8: Verificați pentru a vă asigura că s-au dat două fișiere. 475 00:27:05,740 --> 00:27:06,990 >> JASON Hirschhorn: OK. 476 00:27:06,990 --> 00:27:21,270 477 00:27:21,270 --> 00:27:22,990 Și dacă nu suntem? 478 00:27:22,990 --> 00:27:25,974 >> STUDENT 8: Mi-ar întoarce 0. 479 00:27:25,974 --> 00:27:27,872 >> JASON Hirschhorn: Ar trebui să ne întoarcem 0? 480 00:27:27,872 --> 00:27:30,182 >> STUDENT 8: Întoarceți-o - 481 00:27:30,182 --> 00:27:30,650 decupare. 482 00:27:30,650 --> 00:27:30,850 Scuze. 483 00:27:30,850 --> 00:27:31,210 >> JASON Hirschhorn: Da. 484 00:27:31,210 --> 00:27:32,710 Probabil că nu 0. 485 00:27:32,710 --> 00:27:34,680 Deoarece 0 înseamnă totul a fost bine. 486 00:27:34,680 --> 00:27:35,030 OK. 487 00:27:35,030 --> 00:27:36,730 Deci asta e prima linie de pseudocod. 488 00:27:36,730 --> 00:27:38,715 Care are de-a doua linie de pseudocod? 489 00:27:38,715 --> 00:27:40,630 >> STUDENT 9: Open ambele fișiere? 490 00:27:40,630 --> 00:27:41,880 >> JASON Hirschhorn: Deschideți ambele fișiere. 491 00:27:41,880 --> 00:27:49,970 492 00:27:49,970 --> 00:27:50,920 OK? 493 00:27:50,920 --> 00:27:52,850 >> STUDENT 10: Verificați pentru a vedea dacă fișierul este NULL? 494 00:27:52,850 --> 00:28:10,906 495 00:28:10,906 --> 00:28:12,580 >> JASON Hirschhorn: Verificați pentru a vă sigur că nici nu sunt NULL. 496 00:28:12,580 --> 00:28:15,800 Ca o paranteza - 497 00:28:15,800 --> 00:28:17,540 slash 0 - 498 00:28:17,540 --> 00:28:18,887 este ca NULL? 499 00:28:18,887 --> 00:28:20,080 >> STUDENT 11: Nu. 500 00:28:20,080 --> 00:28:21,190 >> JASON Hirschhorn: Asta nu e NULL. 501 00:28:21,190 --> 00:28:23,400 Care este numit terminator nul. 502 00:28:23,400 --> 00:28:25,580 Este de fapt scris cu un singur litru. 503 00:28:25,580 --> 00:28:28,580 Deci, verificarea ceva împotriva că - care este de fapt un personaj - 504 00:28:28,580 --> 00:28:31,710 astfel verificarea ceva împotriva care este nu la fel ca verificare pentru a vedea dacă acesta 505 00:28:31,710 --> 00:28:32,690 este egal cu NULL. 506 00:28:32,690 --> 00:28:34,100 >> Și unii oameni - 507 00:28:34,100 --> 00:28:36,040 pe teste lor și problema lor Seturi - au luat 508 00:28:36,040 --> 00:28:36,890 doi dintre cei confuz. 509 00:28:36,890 --> 00:28:38,830 Dar cele două din acestea sunt în fapt diferite. 510 00:28:38,830 --> 00:28:40,220 Unul se încheie un șir - 511 00:28:40,220 --> 00:28:43,210 unul este un pointer la 0. 512 00:28:43,210 --> 00:28:46,490 >> STUDENT 12: De ce nu te-ai verifica la asigurați-vă că fișierele nu sunt NULL 513 00:28:46,490 --> 00:28:48,670 înainte de a le deschide? 514 00:28:48,670 --> 00:28:54,772 >> JASON Hirschhorn: Deci deschis salvează ceva în acel fișier. 515 00:28:54,772 --> 00:28:57,780 Și dacă te întorci aici - 516 00:28:57,780 --> 00:28:59,520 astfel încât această linie - fopen - 517 00:28:59,520 --> 00:29:05,300 vă va oferi o adresă și magazin că adresa în fișier dacă acesta funcționează. 518 00:29:05,300 --> 00:29:07,650 În cazul în care nu funcționează, ea va stoca NULL - 519 00:29:07,650 --> 00:29:08,020 >> STUDENT 12: Oh. 520 00:29:08,020 --> 00:29:08,180 OK. 521 00:29:08,180 --> 00:29:08,500 Te-am prins. 522 00:29:08,500 --> 00:29:09,050 >> JASON Hirschhorn: În fișier. 523 00:29:09,050 --> 00:29:11,990 Deci, nu se poate verifica pentru NULL înainte de a le-ați deschis. 524 00:29:11,990 --> 00:29:13,520 NULL înseamnă ceva nu funcționeze corect. 525 00:29:13,520 --> 00:29:18,030 526 00:29:18,030 --> 00:29:18,740 OK. 527 00:29:18,740 --> 00:29:22,590 Deci, asigurați-vă că nu este? 528 00:29:22,590 --> 00:29:23,200 Sau sunt? 529 00:29:23,200 --> 00:29:23,770 Ce credem? 530 00:29:23,770 --> 00:29:24,310 Vom merge cu asta. 531 00:29:24,310 --> 00:29:24,520 >> STUDENT 13: Este. 532 00:29:24,520 --> 00:29:25,020 >> JASON Hirschhorn: Este? 533 00:29:25,020 --> 00:29:25,930 Nici nu este? 534 00:29:25,930 --> 00:29:26,350 >> STUDENT 13: Este. 535 00:29:26,350 --> 00:29:26,390 >> JASON Hirschhorn: OK. 536 00:29:26,390 --> 00:29:28,510 Se pare că avem ceva consens cu privire la acest lucru. 537 00:29:28,510 --> 00:29:30,520 Nici nu este NULL. 538 00:29:30,520 --> 00:29:32,250 OK, următoarea linie de pseudocod. 539 00:29:32,250 --> 00:29:33,600 Care nu mi-a dat o linie încă? 540 00:29:33,600 --> 00:29:37,350 541 00:29:37,350 --> 00:29:38,295 Ne va aștepta pentru tine. 542 00:29:38,295 --> 00:29:39,020 Da. 543 00:29:39,020 --> 00:29:40,895 >> STUDENT 14: Trebuie să citi de la primul fișier? 544 00:29:40,895 --> 00:29:42,290 >> JASON Hirschhorn: OK. 545 00:29:42,290 --> 00:29:46,240 >> STUDENT 14: Sau vom folosi fscanf sau ceva de genul că primul fișier? 546 00:29:46,240 --> 00:29:50,650 >> JASON Hirschhorn: Deci, vrem să citit de la primul fișier și - 547 00:29:50,650 --> 00:29:51,900 să punem asta aici. 548 00:29:51,900 --> 00:30:00,600 549 00:30:00,600 --> 00:30:01,880 Citi din fișierul sursă. 550 00:30:01,880 --> 00:30:05,370 Și atunci, ce facem după ce ne-am citi din fișierul sursă? 551 00:30:05,370 --> 00:30:06,620 Altcineva? 552 00:30:06,620 --> 00:30:09,150 553 00:30:09,150 --> 00:30:12,190 >> STUDENT 15: Scrieți în fișierul destinație? 554 00:30:12,190 --> 00:30:22,080 555 00:30:22,080 --> 00:30:25,620 >> JASON Hirschhorn: Noi scriem pentru a fișierul destinație, și - 556 00:30:25,620 --> 00:30:26,210 OK. 557 00:30:26,210 --> 00:30:30,030 Ce altceva ne lipsește? 558 00:30:30,030 --> 00:30:32,460 Cineva care nu mi-a dat o linie de cod dar - din pseudocod. 559 00:30:32,460 --> 00:30:33,510 Da. 560 00:30:33,510 --> 00:30:36,540 >> STUDENT 16: Poate puteți verifica oricând dacă nu e ceva de citit pentru, 561 00:30:36,540 --> 00:30:37,970 cum ar fi linia următoare? 562 00:30:37,970 --> 00:30:39,550 Că sunt ca următoarea linie, a se vedea dacă există. 563 00:30:39,550 --> 00:30:40,660 >> [ELECTRONIC BEEP] 564 00:30:40,660 --> 00:30:41,095 >> JASON Hirschhorn: Oops. 565 00:30:41,095 --> 00:30:43,120 Acesta este software-ul meu jurnalizarea. 566 00:30:43,120 --> 00:30:43,580 Da? 567 00:30:43,580 --> 00:30:44,960 >> STUDENT 16: Da. 568 00:30:44,960 --> 00:30:48,940 >> JASON Hirschhorn: Deci da -mi-o mai mult timp. 569 00:30:48,940 --> 00:30:51,640 >> STUDENT 16: Verificați dacă există încă o viitoare linie de la 570 00:30:51,640 --> 00:30:52,920 fișier sursă pentru a citi. 571 00:30:52,920 --> 00:30:53,500 >> JASON Hirschhorn: OK. 572 00:30:53,500 --> 00:30:56,060 Așa că nu sunteți de lectură linii - citeau bytes aici - 573 00:30:56,060 --> 00:30:57,590 dar ai dreptate. 574 00:30:57,590 --> 00:31:00,040 Vrem să citească și să scrie până nu mai sunt bytes. 575 00:31:00,040 --> 00:31:11,430 576 00:31:11,430 --> 00:31:11,735 OK. 577 00:31:11,735 --> 00:31:16,940 Și astfel încât acestea ar trebui să fie într-adevăr indentat un pic, pentru că sunt sub acolo. 578 00:31:16,940 --> 00:31:17,470 Corect? 579 00:31:17,470 --> 00:31:20,620 Până când nu mai avem de bytes, vom citi din fișierul sursă și de a scrie 580 00:31:20,620 --> 00:31:22,160 la fișierul destinație. 581 00:31:22,160 --> 00:31:24,510 >> Și atunci, ceea ce este ultimul linie de pseudocod? 582 00:31:24,510 --> 00:31:26,380 Cineva care nu a dat mi ceva încă. 583 00:31:26,380 --> 00:31:29,270 584 00:31:29,270 --> 00:31:30,260 >> STUDENT 17: Închideți fișierele? 585 00:31:30,260 --> 00:31:31,510 >> JASON Hirschhorn: Exact. 586 00:31:31,510 --> 00:31:36,370 587 00:31:36,370 --> 00:31:37,450 Închideți fișierele. 588 00:31:37,450 --> 00:31:38,400 Deci nu e pseudocod nostru. 589 00:31:38,400 --> 00:31:41,870 Am de gând să pună în pseudocod gedit, și în câteva minute am 590 00:31:41,870 --> 00:31:44,626 va codifica aceasta împreună. 591 00:31:44,626 --> 00:33:55,280 592 00:33:55,280 --> 00:33:56,000 >> OK. 593 00:33:56,000 --> 00:33:58,290 Să ne începe ca un grup. 594 00:33:58,290 --> 00:33:59,940 Nishant, am noul meu dosar. 595 00:33:59,940 --> 00:34:01,130 Tocmai am deschis asta. 596 00:34:01,130 --> 00:34:01,880 Untitled Document 1. 597 00:34:01,880 --> 00:34:05,490 Care este primul lucru pe care ar trebui să facă? 598 00:34:05,490 --> 00:34:07,040 >> Nishant: Includeți biblioteci? 599 00:34:07,040 --> 00:34:08,219 >> JASON Hirschhorn: OK. 600 00:34:08,219 --> 00:34:11,070 Ce biblioteci? 601 00:34:11,070 --> 00:34:17,570 >> Nishant: stdio.h, stdlib.h, cred? 602 00:34:17,570 --> 00:34:18,000 >> JASON Hirschhorn: OK. 603 00:34:18,000 --> 00:34:21,592 Ce este stdlib pentru? 604 00:34:21,592 --> 00:34:23,010 >> Nishant: Am uitat. 605 00:34:23,010 --> 00:34:23,219 >> JASON Hirschhorn: OK. 606 00:34:23,219 --> 00:34:24,179 Așa includ stdio. 607 00:34:24,179 --> 00:34:28,630 Ce trebuie să fac, chiar înainte Am început de codificare? 608 00:34:28,630 --> 00:34:29,710 >> Nishant: Scrieți un antet? 609 00:34:29,710 --> 00:34:31,830 >> JASON Hirschhorn: Cum Nu voi fi o culoare? 610 00:34:31,830 --> 00:34:34,060 >> [VOCI interpune] 611 00:34:34,060 --> 00:34:35,040 >> Nishant: Cum ai luat de culoare? 612 00:34:35,040 --> 00:34:38,060 >> JASON Hirschhorn: Cum Nu am culoare de codificare? 613 00:34:38,060 --> 00:34:38,570 >> Nishant: Nu știu. 614 00:34:38,570 --> 00:34:38,830 Oh. 615 00:34:38,830 --> 00:34:39,389 Salva. 616 00:34:39,389 --> 00:34:39,929 >> JASON Hirschhorn: Salvați. 617 00:34:39,929 --> 00:34:40,270 Da. 618 00:34:40,270 --> 00:34:41,760 Ar trebui să-l salvați ca. C.. 619 00:34:41,760 --> 00:34:46,239 Deci, salvați-l pe desktop ca cp.c. 620 00:34:46,239 --> 00:34:47,280 Dulce. 621 00:34:47,280 --> 00:34:51,199 Și dacă doriți să obțineți stil complet de puncte, ceea ce ar trebui să am 622 00:34:51,199 --> 00:34:53,085 includ în partea de sus? 623 00:34:53,085 --> 00:34:58,390 >> Nishant: Ai putea scrie numele dvs., numele a programului, precum și în scopul 624 00:34:58,390 --> 00:34:59,640 a programului, precum și? 625 00:34:59,640 --> 00:35:08,400 626 00:35:08,400 --> 00:35:10,040 >> JASON Hirschhorn: Arată bine. 627 00:35:10,040 --> 00:35:10,470 Excelent. 628 00:35:10,470 --> 00:35:12,940 Deci, ne-am început perfect. 629 00:35:12,940 --> 00:35:13,720 # Include - 630 00:35:13,720 --> 00:35:15,365 vom scrie, de asemenea - 631 00:35:15,365 --> 00:35:30,050 632 00:35:30,050 --> 00:35:30,870 OK. 633 00:35:30,870 --> 00:35:33,520 Deci, eu cred că eu sunt gata pentru a merge. 634 00:35:33,520 --> 00:35:38,003 Cine are prima linie de cod pentru mine - sau primele linii de cod care 635 00:35:38,003 --> 00:35:41,280 se va lua pentru a satisface primul nostru comment in pseudocod? 636 00:35:41,280 --> 00:35:41,985 Te. 637 00:35:41,985 --> 00:35:48,780 >> STUDENT 18: N-ar trebui sa fie int argc, și apoi char * argv? 638 00:35:48,780 --> 00:35:49,490 >> JASON Hirschhorn: Cred că ai dreptate. 639 00:35:49,490 --> 00:35:56,270 Să schimbați-l la int principale paren, deschise, int argc, virgulă, char * argv? 640 00:35:56,270 --> 00:35:57,150 Ca asta? 641 00:35:57,150 --> 00:35:57,410 >> STUDENT 18: Console. 642 00:35:57,410 --> 00:35:58,260 >> JASON Hirschhorn: Console. 643 00:35:58,260 --> 00:35:59,860 Deschis suport, suport aproape, aproape părinte. 644 00:35:59,860 --> 00:36:00,240 Perfect. 645 00:36:00,240 --> 00:36:02,160 Acum pot lua argumente în linia de comandă. 646 00:36:02,160 --> 00:36:02,430 OK. 647 00:36:02,430 --> 00:36:04,250 Asigurați-vă că suntem dat două fișiere. 648 00:36:04,250 --> 00:36:07,905 Poti sa-mi dai la fel de bine. 649 00:36:07,905 --> 00:36:09,180 >> STUDENT 18: Dacă argc - 650 00:36:09,180 --> 00:36:11,060 acesta nu este egal 3. 651 00:36:11,060 --> 00:36:14,360 >> JASON Hirschhorn: Dacă paren deschise argc nu egal 3? 652 00:36:14,360 --> 00:36:16,970 >> STUDENT 18: Da, vă întoarceți 1 sau nimic. 653 00:36:16,970 --> 00:36:17,460 >> JASON Hirschhorn: Îmi pare rău. 654 00:36:17,460 --> 00:36:19,120 >> STUDENT 18: Înapoi 1 sau nimic. 655 00:36:19,120 --> 00:36:20,270 >> JASON Hirschhorn: Înapoi 1. 656 00:36:20,270 --> 00:36:22,230 OK? 657 00:36:22,230 --> 00:36:22,970 Mare. 658 00:36:22,970 --> 00:36:24,290 Deschideți ambele fișiere. 659 00:36:24,290 --> 00:36:26,160 Cine mă poate ajuta deschide ambele fișiere? 660 00:36:26,160 --> 00:36:28,125 Care nu mi-a dat codul încă? 661 00:36:28,125 --> 00:36:31,510 662 00:36:31,510 --> 00:36:32,320 Kurt? 663 00:36:32,320 --> 00:36:36,145 >> KURT: Deci, toate capacele sursă F-I-L-E stele. 664 00:36:36,145 --> 00:36:39,390 665 00:36:39,390 --> 00:36:40,920 >> JASON Hirschhorn: am de gând pentru a scoate vocalele. 666 00:36:40,920 --> 00:36:41,570 Cei care sunt cool. 667 00:36:41,570 --> 00:36:42,716 E ca Tumblr. 668 00:36:42,716 --> 00:36:44,610 >> STUDENT 18: Egal fopen - 669 00:36:44,610 --> 00:36:46,612 >> JASON Hirschhorn: Egal fopen? 670 00:36:46,612 --> 00:36:49,870 >> STUDENT 18: paren deschise, argv, suport deschis. 671 00:36:49,870 --> 00:36:50,055 >> JASON Hirschhorn: Așteaptă. 672 00:36:50,055 --> 00:36:50,240 Scuze. 673 00:36:50,240 --> 00:36:51,050 Deschis paren. 674 00:36:51,050 --> 00:36:51,456 OK. 675 00:36:51,456 --> 00:36:53,080 >> STUDENT 18: Da. 676 00:36:53,080 --> 00:36:55,110 Argv sub 1. 677 00:36:55,110 --> 00:36:55,860 >> JASON Hirschhorn: Sub 1? 678 00:36:55,860 --> 00:36:56,140 >> STUDENT 18: Da. 679 00:36:56,140 --> 00:36:58,540 Argv suport deschis 1 - 680 00:36:58,540 --> 00:36:59,730 Da. 681 00:36:59,730 --> 00:37:06,470 Și apoi virgulă, iar apoi deschis dublu Citat, r, citat dublu, 682 00:37:06,470 --> 00:37:08,250 paren apropiate, punct și virgulă. 683 00:37:08,250 --> 00:37:09,450 >> JASON Hirschhorn: dulce. 684 00:37:09,450 --> 00:37:10,950 Și ce despre celălalt? 685 00:37:10,950 --> 00:37:16,030 >> STUDENT 18: Foarte asemănător, dar în schimb S-R-C, ai numi D-S-T. 686 00:37:16,030 --> 00:37:17,060 >> JASON Hirschhorn: Oo! 687 00:37:17,060 --> 00:37:17,772 Îmi place asta. 688 00:37:17,772 --> 00:37:20,010 >> STUDENT 18: Doar D-S-T. Da. 689 00:37:20,010 --> 00:37:23,057 Și apoi argv, suport deschis, 2. 690 00:37:23,057 --> 00:37:23,200 Da. 691 00:37:23,200 --> 00:37:26,720 Apoi w în loc de r. 692 00:37:26,720 --> 00:37:27,620 Da. 693 00:37:27,620 --> 00:37:29,630 >> JASON Hirschhorn: Mare. 694 00:37:29,630 --> 00:37:31,360 Câteva viitoare de linii. 695 00:37:31,360 --> 00:37:34,040 De asemenea, în cazul în care cineva are lucruri pentru a adăuga la Liniile pe care le-am făcut, nu ezitați să 696 00:37:34,040 --> 00:37:35,690 adăuga aceste, de asemenea. 697 00:37:35,690 --> 00:37:37,520 Verificați dacă nu este NULL. 698 00:37:37,520 --> 00:37:41,450 Cine poate da-mi codul trebuie să asigure că linia de pseudocod? 699 00:37:41,450 --> 00:37:44,430 700 00:37:44,430 --> 00:37:45,870 Archer. 701 00:37:45,870 --> 00:37:58,645 >> Arcaș: Dacă src egal la egal la egal NULL sau dst egal la egal la egal 702 00:37:58,645 --> 00:38:04,590 NULL, atunci te vei întoarce - 703 00:38:04,590 --> 00:38:07,130 704 00:38:07,130 --> 00:38:07,976 >> JASON Hirschhorn: Ce? 705 00:38:07,976 --> 00:38:08,890 >> Arcaș: Înapoi 2? 706 00:38:08,890 --> 00:38:09,760 >> JASON Hirschhorn: Înapoi 2. 707 00:38:09,760 --> 00:38:14,400 Deci, dacă paren deschis src egal este egal cu NULL, sau - 708 00:38:14,400 --> 00:38:15,590 indiferent că thing's - țeavă? 709 00:38:15,590 --> 00:38:16,346 Țeavă? 710 00:38:16,346 --> 00:38:17,140 Vom numi țeavă. 711 00:38:17,140 --> 00:38:22,340 Țevi, conducte, DST egal la egal la egal NULL, întoarce 2. 712 00:38:22,340 --> 00:38:23,900 OK? 713 00:38:23,900 --> 00:38:26,060 Până când nu mai avem de bytes - 714 00:38:26,060 --> 00:38:29,820 am cam sarit peste acest pas de la partea pseudocod pentru a merge la aici. 715 00:38:29,820 --> 00:38:31,970 >> Dar până nu mai avem de bytes - ceea ce sună ca? 716 00:38:31,970 --> 00:38:34,680 Ce tip de structura C - 717 00:38:34,680 --> 00:38:36,160 dar eu nu folosesc structura de cuvânt, pentru că vom începe să utilizați 718 00:38:36,160 --> 00:38:37,350 că, în alte cazuri - 719 00:38:37,350 --> 00:38:39,495 dar instrument C se pare ca? 720 00:38:39,495 --> 00:38:39,970 >> STUDENT 19: O buclă. 721 00:38:39,970 --> 00:38:40,980 >> JASON Hirschhorn: o buclă. 722 00:38:40,980 --> 00:38:43,060 Pare a fi o buclă. 723 00:38:43,060 --> 00:38:49,670 Deci, cine-mi poate da prima linie a codului bucla chiar aici? 724 00:38:49,670 --> 00:38:56,320 725 00:38:56,320 --> 00:39:01,980 De asemenea, puteți alege ce fel de buclă vrei, dacă-mi dai 726 00:39:01,980 --> 00:39:03,215 această linie de cod. 727 00:39:03,215 --> 00:39:04,150 Există trei feluri. 728 00:39:04,150 --> 00:39:06,530 Ai de a alege. 729 00:39:06,530 --> 00:39:08,080 Aș sugera una dintre cele. 730 00:39:08,080 --> 00:39:08,410 Avi. 731 00:39:08,410 --> 00:39:09,230 Pe care o vrei? 732 00:39:09,230 --> 00:39:09,960 >> AVI: FOR. 733 00:39:09,960 --> 00:39:11,460 >> JASON Hirschhorn: FOR. 734 00:39:11,460 --> 00:39:15,180 >> AVI: int i este egal cu zero. 735 00:39:15,180 --> 00:39:17,360 >> JASON Hirschhorn: OK. 736 00:39:17,360 --> 00:39:18,570 >> AVI: Această parte nu sunt sigur. 737 00:39:18,570 --> 00:39:29,080 Dar i este mai mică decât dimensiunea de sursă stele? 738 00:39:29,080 --> 00:39:31,128 Nu sunt sigur de asta. 739 00:39:31,128 --> 00:39:32,580 >> JASON Hirschhorn: OK. 740 00:39:32,580 --> 00:39:35,870 >> AVI: Pentru că vrei mărime de imagine, nu? 741 00:39:35,870 --> 00:39:41,090 >> JASON Hirschhorn: Deci acest lucru, probabil, nu se va ne da dimensiunea reală 742 00:39:41,090 --> 00:39:43,010 fișier în bytes. 743 00:39:43,010 --> 00:39:47,680 Deci, ce altceva am putea face? 744 00:39:47,680 --> 00:39:48,810 Ceea ce este un alt tip de buclă? 745 00:39:48,810 --> 00:39:50,180 Sau ar trebui să stai cu bucla FOR? 746 00:39:50,180 --> 00:39:55,350 747 00:39:55,350 --> 00:39:57,900 >> STUDENT 20: Ai putea face o buclă în timp ce? 748 00:39:57,900 --> 00:40:01,350 Și apoi, ce ai face este Asa ai - 749 00:40:01,350 --> 00:40:03,930 pentru că avem un char * pentru fișierul. 750 00:40:03,930 --> 00:40:07,950 Deci, dacă ne-am ține incrementarea că până când vom găsi caracterul NULL la 751 00:40:07,950 --> 00:40:08,500 la sfârșitul anului acesta? 752 00:40:08,500 --> 00:40:11,130 Sau nu, este că nu cum functioneaza fișiere? 753 00:40:11,130 --> 00:40:14,300 >> JASON Hirschhorn: Deci, putem păstra incrementarea char * 754 00:40:14,300 --> 00:40:16,340 până când vom găsi NULL - 755 00:40:16,340 --> 00:40:18,580 >> STUDENT 20: ține esență merge caracter cu caracter, până ne-am lovit 756 00:40:18,580 --> 00:40:21,250 sfârșitul fișierului. 757 00:40:21,250 --> 00:40:21,600 >> JASON Hirschhorn: Da. 758 00:40:21,600 --> 00:40:22,560 Deci, asta e ceea ce vrem să facem. 759 00:40:22,560 --> 00:40:24,545 Ne dorim pentru a păstra lectură, caracter de caracter, până când vom ajunge la 760 00:40:24,545 --> 00:40:25,080 sfârșitul fișierului. 761 00:40:25,080 --> 00:40:25,375 >> STUDENT 20: Da. 762 00:40:25,375 --> 00:40:25,860 Găsi - 763 00:40:25,860 --> 00:40:28,540 ceea ce este sfarsitul sau de oprire semnul la sfârșitul unui fișier text. 764 00:40:28,540 --> 00:40:28,620 >> JASON Hirschhorn: OK. 765 00:40:28,620 --> 00:40:30,140 Așa că atunci când vom ajunge la sfârșitul fișierului - cum știm noi că am ajuns 766 00:40:30,140 --> 00:40:33,200 sfârșitul unui fișier? 767 00:40:33,200 --> 00:40:34,710 Dacă sun - 768 00:40:34,710 --> 00:40:35,910 deci haideți să pas înapoi. 769 00:40:35,910 --> 00:40:37,550 Ce este o funcție? 770 00:40:37,550 --> 00:40:39,360 Să mergem la această linie aici. 771 00:40:39,360 --> 00:40:40,630 Citi din fișierul sursă. 772 00:40:40,630 --> 00:40:41,880 Cine poate da-mi că linie de cod? 773 00:40:41,880 --> 00:40:45,592 774 00:40:45,592 --> 00:40:47,590 >> STUDENT 21: fscanf? 775 00:40:47,590 --> 00:40:49,110 >> JASON Hirschhorn: fscanf. 776 00:40:49,110 --> 00:40:49,510 OK. 777 00:40:49,510 --> 00:40:52,240 Ce se întâmplă dacă vreau să citesc, foarte în mod specific, un octet? 778 00:40:52,240 --> 00:40:55,012 779 00:40:55,012 --> 00:40:56,860 >> STUDENT 21: Nu știu. 780 00:40:56,860 --> 00:40:57,110 >> JASON Hirschhorn: OK. 781 00:40:57,110 --> 00:40:59,380 Chiar mai simplu decât fscanf - ceea ce este un - 782 00:40:59,380 --> 00:41:01,890 Vreau să citesc dintr-un fișier sursă? 783 00:41:01,890 --> 00:41:03,720 Citit dintr-un fișier sursă. 784 00:41:03,720 --> 00:41:04,850 Ce este o funcție - Da. 785 00:41:04,850 --> 00:41:05,380 >> STUDENT 22: Este fread? 786 00:41:05,380 --> 00:41:06,070 >> JASON Hirschhorn: fread. 787 00:41:06,070 --> 00:41:07,550 Cred că haideți să rămânem cu care unul pentru acum. 788 00:41:07,550 --> 00:41:10,380 789 00:41:10,380 --> 00:41:13,650 Ce fel de argumente nu fread ia? 790 00:41:13,650 --> 00:41:17,410 >> STUDENT 22: Probabil că tipul de fișier, și apoi locația în dosarul? 791 00:41:17,410 --> 00:41:19,550 >> JASON Hirschhorn: Ce pot sa tip aici să dau seama ce tip de argumente 792 00:41:19,550 --> 00:41:20,950 fread ia? 793 00:41:20,950 --> 00:41:23,710 >> STUDENȚI MULTE: Man fread. 794 00:41:23,710 --> 00:41:24,740 >> JASON Hirschhorn: Man fread și fwrite. 795 00:41:24,740 --> 00:41:25,980 Se pare că stau împreună. 796 00:41:25,980 --> 00:41:29,589 Deci, fread ia cât de multe argumente? 797 00:41:29,589 --> 00:41:30,920 >> STUDENT 23: Patru. 798 00:41:30,920 --> 00:41:32,690 >> JASON Hirschhorn: Este nevoie de patru argumente. 799 00:41:32,690 --> 00:41:41,100 Este nevoie de un pointer, o dimensiune, și că lucru, ceea ce este ciudat, și unele de fișiere. 800 00:41:41,100 --> 00:41:42,000 OK? 801 00:41:42,000 --> 00:41:43,990 Să citim despre asta chiar aici. 802 00:41:43,990 --> 00:41:49,370 "Funcția fread citeste n memb elemente de date, fiecare dimensiune bytes 803 00:41:49,370 --> 00:41:53,840 lung, de la fluxul indicat de flux, stocarea lor la locul 804 00:41:53,840 --> 00:41:56,170 dat de pointer. " 805 00:41:56,170 --> 00:41:57,960 >> Deci, patru argumente. 806 00:41:57,960 --> 00:42:04,510 De ce nu doar să copiați acest lucru, și lipiți-l chiar aici. 807 00:42:04,510 --> 00:42:10,060 808 00:42:10,060 --> 00:42:10,770 OK. 809 00:42:10,770 --> 00:42:13,673 Deci, cine poate începe completarea aceste argumente pentru mine? 810 00:42:13,673 --> 00:42:15,840 Avi. 811 00:42:15,840 --> 00:42:17,720 >> AVI: Scoate vidul. 812 00:42:17,720 --> 00:42:20,530 Pune doar src. 813 00:42:20,530 --> 00:42:23,142 Scoate pointer și steaua. 814 00:42:23,142 --> 00:42:26,102 Pune-src. 815 00:42:26,102 --> 00:42:27,050 Atunci - 816 00:42:27,050 --> 00:42:28,500 >> JASON Hirschhorn: Deci, am de gând să se oprească tu acolo, pentru că e incorect. 817 00:42:28,500 --> 00:42:32,590 818 00:42:32,590 --> 00:42:34,710 Ai dreptate cu src, dar unde ar trebui să meargă src? 819 00:42:34,710 --> 00:42:35,960 >> [VOCI interpune] 820 00:42:35,960 --> 00:42:38,976 821 00:42:38,976 --> 00:42:41,610 >> JASON Hirschhorn: Aceasta ar trebui du-te pe aici. 822 00:42:41,610 --> 00:42:43,790 Asta e src - src nostru este un tip. 823 00:42:43,790 --> 00:42:44,610 Să ne uităm aici. 824 00:42:44,610 --> 00:42:49,610 Acest lucru se cere pentru un tip de fișier *, ne-am de fapt, de obicei, le văd așa. 825 00:42:49,610 --> 00:42:57,630 Deci, acest lucru se cere pentru un argument de tip de fișier * numit flux, care este src. 826 00:42:57,630 --> 00:42:58,480 OK? 827 00:42:58,480 --> 00:43:00,410 >> Ce dimensiune de lucruri fac ne-o dorim pentru a citi? 828 00:43:00,410 --> 00:43:03,340 Ți-am dat acest lucru în Descrierea problemei. 829 00:43:03,340 --> 00:43:04,370 >> STUDENT 24: Un octet la un moment dat. 830 00:43:04,370 --> 00:43:05,340 >> JASON Hirschhorn: Un byte. 831 00:43:05,340 --> 00:43:08,205 Cât de mare este un byte? 832 00:43:08,205 --> 00:43:11,642 Dimensiunea sa este în bytes, deci ce pot pune acolo? 833 00:43:11,642 --> 00:43:12,910 >> STUDENT 25: One. 834 00:43:12,910 --> 00:43:14,730 >> JASON Hirschhorn: One. 835 00:43:14,730 --> 00:43:17,020 Corect. 836 00:43:17,020 --> 00:43:19,940 Dimensiunea sa este în unitate octet, deci 1 este de 1 octet. 837 00:43:19,940 --> 00:43:22,284 Câte vreau să citesc la un moment dat. 838 00:43:22,284 --> 00:43:23,520 >> STUDENT 26: O? 839 00:43:23,520 --> 00:43:24,270 >> JASON Hirschhorn: Un lucru. 840 00:43:24,270 --> 00:43:28,540 Vreau să citesc un singur lucru de dimensiuni 1, o mușcătură la un moment dat. 841 00:43:28,540 --> 00:43:32,110 Și unde am pus-o, o dată ce am citit-o? 842 00:43:32,110 --> 00:43:35,050 843 00:43:35,050 --> 00:43:36,510 >> STUDENT 27: destinație? 844 00:43:36,510 --> 00:43:39,270 >> JASON Hirschhorn: Deci, eu nu pot pune se direct în destinație. 845 00:43:39,270 --> 00:43:40,800 >> STUDENT 28: Vei pune l într un al treilea indicator? 846 00:43:40,800 --> 00:43:41,780 >> STUDENT 27: la destinație. 847 00:43:41,780 --> 00:43:42,270 >> JASON Hirschhorn: OK. 848 00:43:42,270 --> 00:43:42,630 Da. 849 00:43:42,630 --> 00:43:46,820 >> STUDENT 29: Puteți declara ceva la acționează ca un depozit temporar mai devreme. 850 00:43:46,820 --> 00:43:47,350 >> JASON Hirschhorn: OK. 851 00:43:47,350 --> 00:43:50,080 Dă-mi asta. 852 00:43:50,080 --> 00:43:53,930 >> STUDENT 29: Un alt fișier pointer, poate? 853 00:43:53,930 --> 00:43:54,220 >> JASON Hirschhorn: OK. 854 00:43:54,220 --> 00:43:55,585 Deci, aceasta este steaua gol - 855 00:43:55,585 --> 00:43:57,750 este un tip gol stea, așa că nu trebuie să fie un pointer de fișier. 856 00:43:57,750 --> 00:44:02,520 Și dacă am citit un octet, în cazul în care ar fi un loc bun 857 00:44:02,520 --> 00:44:03,850 pentru a stoca un byte? 858 00:44:03,850 --> 00:44:04,660 >> STUDENT 29: O serie? 859 00:44:04,660 --> 00:44:05,770 >> JASON Hirschhorn: Un tablou. 860 00:44:05,770 --> 00:44:07,730 OK. 861 00:44:07,730 --> 00:44:14,040 Și ce altceva este ceva care este dimensiona doar un octet? 862 00:44:14,040 --> 00:44:16,980 863 00:44:16,980 --> 00:44:18,060 >> STUDENT 30: O char *? 864 00:44:18,060 --> 00:44:18,530 >> STUDENT 29: Da. 865 00:44:18,530 --> 00:44:19,880 >> JASON Hirschhorn: A char * nu este un octet. 866 00:44:19,880 --> 00:44:20,440 >> STUDENT 29: A char. 867 00:44:20,440 --> 00:44:21,810 >> JASON Hirschhorn: Un char este un octet. 868 00:44:21,810 --> 00:44:22,920 Corect? 869 00:44:22,920 --> 00:44:26,740 Deci, hai sa numim acest tampon este un generic Numele folosit pentru aceste lucruri pentru a stoca 870 00:44:26,740 --> 00:44:27,910 ceva temporar. 871 00:44:27,910 --> 00:44:30,880 Așa că am crea un tampon. 872 00:44:30,880 --> 00:44:31,150 Corect? 873 00:44:31,150 --> 00:44:32,990 Dar aceasta nu ia un gol *. 874 00:44:32,990 --> 00:44:38,660 Deci, poate că ai dreptate, că acesta ar trebui să fie un tampon de dimensiunea 0. 875 00:44:38,660 --> 00:44:41,070 Deci, se stochează o - 876 00:44:41,070 --> 00:44:41,280 dreapta. 877 00:44:41,280 --> 00:44:43,560 >> Pentru că acest drept aici - char tampon este un personaj, dar 878 00:44:43,560 --> 00:44:45,110 acest lucru are un gol * - 879 00:44:45,110 --> 00:44:45,870 un pointer. 880 00:44:45,870 --> 00:44:50,640 Așa că am putea face acest lucru și acum tampon este un pointer. 881 00:44:50,640 --> 00:44:53,214 Ce altceva puteam face? 882 00:44:53,214 --> 00:44:55,775 >> STUDENT 31: Pune o stea lângă char. 883 00:44:55,775 --> 00:44:58,380 >> JASON Hirschhorn: am putut au creat o char *. 884 00:44:58,380 --> 00:45:00,216 OK. 885 00:45:00,216 --> 00:45:03,131 Ceea ce e un alt lucru pe care l-ar putea face? 886 00:45:03,131 --> 00:45:04,050 Sau să mergem cu asta. 887 00:45:04,050 --> 00:45:05,740 Char * tampon, astfel încât ceea ce am pus aici? 888 00:45:05,740 --> 00:45:08,290 889 00:45:08,290 --> 00:45:09,310 >> STUDENT 31: tampon. 890 00:45:09,310 --> 00:45:10,560 >> JASON Hirschhorn: tampon. 891 00:45:10,560 --> 00:45:12,640 892 00:45:12,640 --> 00:45:14,500 Tampon este un pointer la un char. 893 00:45:14,500 --> 00:45:19,480 Și în acel loc, vom pune un octet de ceva care le-am citit. 894 00:45:19,480 --> 00:45:19,980 Da. 895 00:45:19,980 --> 00:45:20,700 Avi. 896 00:45:20,700 --> 00:45:21,230 >> AVI: Doar o întrebare rapidă. 897 00:45:21,230 --> 00:45:24,440 Vrei să malloc tampon? 898 00:45:24,440 --> 00:45:25,930 >> JASON Hirschhorn: Cine poate răspunde la această întrebare? 899 00:45:25,930 --> 00:45:30,210 >> STUDENT 32: Ei bine, nu prea punct la ceva chiar acum, așa - 900 00:45:30,210 --> 00:45:32,610 >> JASON Hirschhorn: Dar nu vrem să-l malloc? 901 00:45:32,610 --> 00:45:35,600 >> STUDENT 32: Dacă ar fi să-l facă asta un fel, cred că, da, pentru că ai nevoie 902 00:45:35,600 --> 00:45:36,990 un loc pentru el pentru a indica. 903 00:45:36,990 --> 00:45:38,350 >> JASON Hirschhorn: Nu ne-am trebuie să-l malloc? 904 00:45:38,350 --> 00:45:40,580 >> STUDENT 33: Dacă ai de gând să să-l utilizați în afara buclei. 905 00:45:40,580 --> 00:45:42,524 >> JASON Hirschhorn: Mergem la să-l utilizați în afara buclei? 906 00:45:42,524 --> 00:45:44,392 >> STUDENT 34: Da. 907 00:45:44,392 --> 00:45:44,860 >> STUDENT 35: Așteaptă. 908 00:45:44,860 --> 00:45:46,980 Nu vrem să-l declare în bucla de dincolo? 909 00:45:46,980 --> 00:45:50,100 >> JASON Hirschhorn: Deci, cred ca ne-am unele pseudo timp ce bucla aici că suntem 910 00:45:50,100 --> 00:45:51,950 încercând să dau seama, că nu am ajuns la încă. 911 00:45:51,950 --> 00:45:54,710 912 00:45:54,710 --> 00:45:56,010 Nu avem nevoie să-l malloc. 913 00:45:56,010 --> 00:45:59,310 Suntem operează în principal, este doar de gând pentru a fi folosite în interiorul acestei bucle. 914 00:45:59,310 --> 00:46:00,540 Nu trebuie să existe în afara acestei. 915 00:46:00,540 --> 00:46:02,340 >> Deci, poate fi o variabilă locală. 916 00:46:02,340 --> 00:46:03,925 Ai un pointer la o variabilă locală. 917 00:46:03,925 --> 00:46:07,984 918 00:46:07,984 --> 00:46:09,590 >> STUDENT 36: Dar nu e arătând spre nimic. 919 00:46:09,590 --> 00:46:11,540 >> JASON Hirschhorn: Nu, nu este inițializat la nimic. 920 00:46:11,540 --> 00:46:12,790 Dar nu am de gând să-l folosească, de asemenea. 921 00:46:12,790 --> 00:46:15,300 Vom pune ceva în aceasta prima dată când am folosi. 922 00:46:15,300 --> 00:46:16,580 Astfel încât se pare OK. 923 00:46:16,580 --> 00:46:17,780 Deci, nu avem nevoie de malloc aici. 924 00:46:17,780 --> 00:46:19,360 Și cred că e bine așa cum este. 925 00:46:19,360 --> 00:46:24,350 926 00:46:24,350 --> 00:46:25,790 OK. 927 00:46:25,790 --> 00:46:27,190 Avem linia fread. 928 00:46:27,190 --> 00:46:28,490 Să facem următoarea linie. 929 00:46:28,490 --> 00:46:32,984 >> Dacă vrem să scrie într-un fișier, ceea ce este o funcție bun de a folosi pentru a face asta? 930 00:46:32,984 --> 00:46:33,770 >> STUDENT 37: fwrite? 931 00:46:33,770 --> 00:46:35,140 >> STUDENT 38: fprintf? 932 00:46:35,140 --> 00:46:36,010 >> JASON Hirschhorn: fprintf este unul. 933 00:46:36,010 --> 00:46:37,260 Ceea ce este un alt unul? 934 00:46:37,260 --> 00:46:37,680 >> STUDENT 39: fwrite. 935 00:46:37,680 --> 00:46:38,510 >> JASON Hirschhorn: fwrite. 936 00:46:38,510 --> 00:46:41,250 Și pentru scopurile noastre, fwrite, pe care am văzut aici, este 937 00:46:41,250 --> 00:46:42,500 probabil cea mai buna alegere. 938 00:46:42,500 --> 00:46:51,970 939 00:46:51,970 --> 00:46:53,950 Este nevoie de patru argumente, de asemenea. 940 00:46:53,950 --> 00:46:57,570 Nishant, puteți da mi argumentele? 941 00:46:57,570 --> 00:47:00,570 >> Nishant: curs de desfășurare Primul lui să fie tampon doar. 942 00:47:00,570 --> 00:47:02,210 >> JASON Hirschhorn: OK. 943 00:47:02,210 --> 00:47:06,752 >> Nishant: al doilea anii doar de gând să fie 1. 944 00:47:06,752 --> 00:47:09,510 O treime va fi 1. 945 00:47:09,510 --> 00:47:11,470 Iar al patrulea va fi DST. 946 00:47:11,470 --> 00:47:18,010 947 00:47:18,010 --> 00:47:19,550 >> JASON Hirschhorn: Are cineva întrebări cu privire la acea linie? 948 00:47:19,550 --> 00:47:28,370 949 00:47:28,370 --> 00:47:29,130 Asta arată bine. 950 00:47:29,130 --> 00:47:29,590 OK. 951 00:47:29,590 --> 00:47:34,250 Deci, acum, se pare ca un lucru suntem lipsă - de fapt, să scrie 952 00:47:34,250 --> 00:47:35,090 aceasta ultima linie. 953 00:47:35,090 --> 00:47:36,300 Închideți fișierele. 954 00:47:36,300 --> 00:47:38,880 Care ne poate termina de scris aceste ultimele două rânduri? 955 00:47:38,880 --> 00:47:39,120 Da. 956 00:47:39,120 --> 00:47:39,850 Ne pare rău, care e numele tău? 957 00:47:39,850 --> 00:47:40,580 >> LUCY: Lucy. 958 00:47:40,580 --> 00:47:41,580 >> JASON Hirschhorn: Lucy. 959 00:47:41,580 --> 00:47:47,560 >> LUCY: src fclose și apoi destinație fclose. 960 00:47:47,560 --> 00:47:52,430 >> JASON Hirschhorn: fclose, paren deschis, src, paren apropiate, punct și virgulă. 961 00:47:52,430 --> 00:47:53,680 Și fclose - 962 00:47:53,680 --> 00:47:57,560 963 00:47:57,560 --> 00:47:58,090 da? 964 00:47:58,090 --> 00:48:01,710 >> LUCY: Open paranteze, DST și apoi punct și virgulă. 965 00:48:01,710 --> 00:48:02,520 >> JASON Hirschhorn: Mare. 966 00:48:02,520 --> 00:48:04,338 Și ce ar trebui să includă, la sfârșitul? 967 00:48:04,338 --> 00:48:05,210 >> LUCY: Reveniți 0. 968 00:48:05,210 --> 00:48:05,570 >> JASON Hirschhorn: return 0. 969 00:48:05,570 --> 00:48:06,820 Trebuie să? 970 00:48:06,820 --> 00:48:10,560 971 00:48:10,560 --> 00:48:12,590 Doar o întrebare. 972 00:48:12,590 --> 00:48:14,957 Nu trebuie să includă return 0? 973 00:48:14,957 --> 00:48:16,240 >> STUDENȚI MULTE: Nu. 974 00:48:16,240 --> 00:48:16,430 >> JASON Hirschhorn: Nu. 975 00:48:16,430 --> 00:48:18,090 Principal se face în mod automat dacă ajungi la final. 976 00:48:18,090 --> 00:48:20,580 Dar cred că e bine să includ în mod explicit. 977 00:48:20,580 --> 00:48:23,860 Mai ales atunci când vom reveni alte lucrurile pe tot parcursul programului. 978 00:48:23,860 --> 00:48:24,810 OK. 979 00:48:24,810 --> 00:48:26,230 Aceasta este ceea ce ne lipsește - 980 00:48:26,230 --> 00:48:28,520 WHILE ce? 981 00:48:28,520 --> 00:48:31,630 Cine poate gândi la ceva - 982 00:48:31,630 --> 00:48:35,240 are un sentiment de ceea ce lucruri ar putea merge acolo? 983 00:48:35,240 --> 00:48:37,350 Chiar dacă e doar în unele pseudocod ca limbă? 984 00:48:37,350 --> 00:48:41,330 >> Ceea ce suntem cu adevărat - ceea ce vrem să mergem până la? 985 00:48:41,330 --> 00:48:41,980 Da, Lucy. 986 00:48:41,980 --> 00:48:43,240 >> LUCY: sfârșitul de fișier. 987 00:48:43,240 --> 00:48:44,990 >> JASON Hirschhorn: sfârșitul de fișier. 988 00:48:44,990 --> 00:48:49,280 Deci, ce vrei să spui până la sfârșitul de fișier? 989 00:48:49,280 --> 00:48:50,955 >> LUCY: Odată ce ați atins sfârșitul fișierului, opri. 990 00:48:50,955 --> 00:48:51,240 >> JASON Hirschhorn: OK. 991 00:48:51,240 --> 00:48:53,460 Deci, odată ce vom ajunge la sfârșitul fișierului. 992 00:48:53,460 --> 00:48:56,893 Cum știm când ne-am atins sfârșitul fișierului? 993 00:48:56,893 --> 00:48:59,900 >> STUDENT 40: Cred ca tampon va fi setat la NULL. 994 00:48:59,900 --> 00:49:01,885 >> STUDENT 41: Buffer este declarată interiorul buclei. 995 00:49:01,885 --> 00:49:03,670 >> JASON Hirschhorn: Deci, credeți că tampon va fi setat la NULL. 996 00:49:03,670 --> 00:49:05,850 De ce ar tampon fi setat la NULL? 997 00:49:05,850 --> 00:49:10,420 >> STUDENT 40: Pentru că atunci când fread, sunteți încercarea de a pune 998 00:49:10,420 --> 00:49:13,528 nimic în tampon. 999 00:49:13,528 --> 00:49:13,980 >> JASON Hirschhorn: OK. 1000 00:49:13,980 --> 00:49:15,550 Deci, te gandesti fread - 1001 00:49:15,550 --> 00:49:19,000 când am ajuns la sfârșitul perioadei de fișier, ceea ce este fread de gând să faci? 1002 00:49:19,000 --> 00:49:21,230 Cred că e întrebarea trebuie să ne dăm seama. 1003 00:49:21,230 --> 00:49:21,960 Ce face fread? 1004 00:49:21,960 --> 00:49:25,640 Nu-l pune NULL in tampon, sau nu-l face altceva? 1005 00:49:25,640 --> 00:49:27,510 Cum ne putem da seama ce-l are? 1006 00:49:27,510 --> 00:49:28,190 >> STUDENT 42: Man. 1007 00:49:28,190 --> 00:49:28,810 >> JASON Hirschhorn: Man. 1008 00:49:28,810 --> 00:49:32,280 Așa că haideți să ne uităm pe aici. 1009 00:49:32,280 --> 00:49:34,000 Întoarce o valoare. 1010 00:49:34,000 --> 00:49:39,620 Pe succes, fread și fwrite returnează numărul de elemente citite sau scrise. 1011 00:49:39,620 --> 00:49:43,700 Acest număr este egal cu numărul de octeți transferate numai atunci când mărimea este 1. 1012 00:49:43,700 --> 00:49:47,780 Dacă apare o eroare, sau cele din urmă a se ajunge la fișier, valoarea returnată este un 1013 00:49:47,780 --> 00:49:51,490 numărul scurt element sau 0. 1014 00:49:51,490 --> 00:49:57,860 >> Deci, pentru scopurile noastre, în cazul în care ajunge fread la sfârșitul fișierului, și citește din 1015 00:49:57,860 --> 00:50:02,100 sfârșitul de fișier, nu a mai rămas nimic pentru a citi, ceea ce se întâmplă să se întoarcă? 1016 00:50:02,100 --> 00:50:03,290 >> STUDENT 43: Zero? 1017 00:50:03,290 --> 00:50:04,540 >> JASON Hirschhorn: Ce? 1018 00:50:04,540 --> 00:50:05,300 >> STUDENT 43: Zero? 1019 00:50:05,300 --> 00:50:05,690 >> JASON Hirschhorn: Zero. 1020 00:50:05,690 --> 00:50:06,940 Se va reveni la zero. 1021 00:50:06,940 --> 00:50:09,360 1022 00:50:09,360 --> 00:50:13,010 Deci, noi știm că fread, atunci când ne-am a ajuns la sfârșitul fișierului, se va 1023 00:50:13,010 --> 00:50:13,690 pentru a reveni la zero. 1024 00:50:13,690 --> 00:50:17,460 Cum putem folosi asta în avantajul nostru? 1025 00:50:17,460 --> 00:50:21,733 >> AVI: Puteți declara o variabila in afara buclei numita cec. 1026 00:50:21,733 --> 00:50:27,040 Dacă verificare este egal - 1027 00:50:27,040 --> 00:50:28,190 de acum - o. 1028 00:50:28,190 --> 00:50:28,920 >> JASON Hirschhorn: OK. 1029 00:50:28,920 --> 00:50:38,050 >> AVI: Și atunci puteți pune un FI declarație imediat după fread spune dacă 1030 00:50:38,050 --> 00:50:42,600 fread este zero - 1031 00:50:42,600 --> 00:50:43,850 nr. 1032 00:50:43,850 --> 00:50:46,002 1033 00:50:46,002 --> 00:50:47,252 >> JASON Hirschhorn: Cine poate ajuta Avi afară? 1034 00:50:47,252 --> 00:50:49,690 1035 00:50:49,690 --> 00:50:52,410 >> AVI: Care este valoarea returnat de fread? 1036 00:50:52,410 --> 00:50:54,060 >> JASON Hirschhorn: Noi doar a trecut peste asta. 1037 00:50:54,060 --> 00:50:55,450 >> AVI: Cum o reprezinta? 1038 00:50:55,450 --> 00:50:57,190 >> JASON Hirschhorn: Deci, se întoarce - hai uite aici - se întoarce o 1039 00:50:57,190 --> 00:50:59,340 size_t, care este în esență un număr întreg. 1040 00:50:59,340 --> 00:51:02,240 1041 00:51:02,240 --> 00:51:03,410 Deci, se întoarce un întreg. 1042 00:51:03,410 --> 00:51:05,160 Și în cazul nostru, se va returna 1 sau 0 - 1043 00:51:05,160 --> 00:51:08,760 1 în cazul în care se citesc un singur lucru - un octet, și 0 dacă am ajuns la final. 1044 00:51:08,760 --> 00:51:13,560 1045 00:51:13,560 --> 00:51:16,450 Deci, dacă fread - 1046 00:51:16,450 --> 00:51:16,855 da? 1047 00:51:16,855 --> 00:51:20,330 >> STUDENT 45: nu poți pune doar pe deplin fread (tampon, 1, 1, src) în 1048 00:51:20,330 --> 00:51:21,660 în timp ce bucla? 1049 00:51:21,660 --> 00:51:26,510 >> JASON Hirschhorn: Deci propui face acest lucru într-acolo? 1050 00:51:26,510 --> 00:51:27,600 >> [VOCI interpune] 1051 00:51:27,600 --> 00:51:29,520 >> JASON Hirschhorn: Stai. 1052 00:51:29,520 --> 00:51:30,885 Așa că debarasarea de acest lucru. 1053 00:51:30,885 --> 00:51:33,300 Deci, ce propui punerea fread în acolo? 1054 00:51:33,300 --> 00:51:35,457 Ceea ce ar trebui să ne mișcăm, de asemenea, dacă vrei să faci asta? 1055 00:51:35,457 --> 00:51:36,740 >> STUDENT 45: tampon exterior. 1056 00:51:36,740 --> 00:51:38,110 >> JASON Hirschhorn: Ar trebui De asemenea, se mute asta aici. 1057 00:51:38,110 --> 00:51:41,700 >> STUDENT 45: Dar face asta în mod constant mutați-l mai departe? 1058 00:51:41,700 --> 00:51:42,950 >> [VOCI interpune] 1059 00:51:42,950 --> 00:51:46,540 1060 00:51:46,540 --> 00:51:47,470 >> JASON Hirschhorn: OK. 1061 00:51:47,470 --> 00:51:50,570 Deci, aceasta este ceea ce a propus Okshar. 1062 00:51:50,570 --> 00:51:51,930 Noi cream tampon nostru. 1063 00:51:51,930 --> 00:51:57,020 Noi TIMP fread, apoi ne-am fwrite. 1064 00:51:57,020 --> 00:51:59,760 Gânduri pe aceasta? 1065 00:51:59,760 --> 00:52:04,050 >> STUDENT 46: Singura mea întrebare este, ar fi se executa de fapt, fread comanda? 1066 00:52:04,050 --> 00:52:06,175 >> JASON Hirschhorn: Marea întrebare. 1067 00:52:06,175 --> 00:52:11,050 Când pui un apel de funcție în interiorul unei condiții, face ca 1068 00:52:11,050 --> 00:52:12,300 Funcția de apel executa? 1069 00:52:12,300 --> 00:52:15,760 1070 00:52:15,760 --> 00:52:17,770 Am văzut exemple de acest lucru înainte. 1071 00:52:17,770 --> 00:52:24,900 1072 00:52:24,900 --> 00:52:25,660 Corect? 1073 00:52:25,660 --> 00:52:26,125 >> STUDENT 46: OK. 1074 00:52:26,125 --> 00:52:26,590 Da. 1075 00:52:26,590 --> 00:52:30,140 Așa că nu executa. 1076 00:52:30,140 --> 00:52:31,790 >> JASON Hirschhorn: Am văzut lucruri cum ar fi faptul că înainte, în cazul în care avem o 1077 00:52:31,790 --> 00:52:33,550 Funcția de apel în interiorul de o condiție. 1078 00:52:33,550 --> 00:52:35,540 Asta apel de funcție executa? 1079 00:52:35,540 --> 00:52:36,350 Da. 1080 00:52:36,350 --> 00:52:37,410 Deci, răspunsul este da. 1081 00:52:37,410 --> 00:52:41,010 Acest apel funcție va executa. 1082 00:52:41,010 --> 00:52:42,418 Dar, din nou, este ceea ce ne dorim? 1083 00:52:42,418 --> 00:52:49,250 1084 00:52:49,250 --> 00:52:52,204 >> Ceea ce este un fel, am putea da seama dacă e ceea ce ne dorim? 1085 00:52:52,204 --> 00:52:53,470 >> STUDENȚI MULTE: Rulați-l? 1086 00:52:53,470 --> 00:52:54,460 >> JASON Hirschhorn: Am putea să-l rulați. 1087 00:52:54,460 --> 00:52:57,500 Dar inainte de a face asta, am putea De asemenea, prin acest motiv. 1088 00:52:57,500 --> 00:52:57,920 În cazul în care - 1089 00:52:57,920 --> 00:53:01,920 spune ca avem un octet în nostru fișier, vom ajunge la aici, 1090 00:53:01,920 --> 00:53:02,660 vom ajunge la acest cod. 1091 00:53:02,660 --> 00:53:03,620 Aceasta va rula. 1092 00:53:03,620 --> 00:53:07,780 fread va reveni un octet și depozitați-l în tampon. 1093 00:53:07,780 --> 00:53:11,290 Și acest lucru se va evalua la 1, drept, după ce se întoarce 1. 1094 00:53:11,290 --> 00:53:12,640 >> Deci, în timp 1. 1095 00:53:12,640 --> 00:53:15,325 Asta înseamnă că codul de interior bucla WHILE va executa? 1096 00:53:15,325 --> 00:53:15,453 >> STUDENT 47: Da. 1097 00:53:15,453 --> 00:53:16,040 E adevărat. 1098 00:53:16,040 --> 00:53:16,290 >> JASON Hirschhorn: Da. 1099 00:53:16,290 --> 00:53:17,490 1 este adevărat. 1100 00:53:17,490 --> 00:53:18,240 Nu este 0. 1101 00:53:18,240 --> 00:53:20,360 Deci, codul interior aici va executa. 1102 00:53:20,360 --> 00:53:22,300 Așa că vom scrie asta. 1103 00:53:22,300 --> 00:53:25,340 Ne vom muta înapoi la acest linie, încă o dată. 1104 00:53:25,340 --> 00:53:26,850 Acum avem - 1105 00:53:26,850 --> 00:53:28,550 suntem la sfârșitul fișierului noastre. 1106 00:53:28,550 --> 00:53:30,980 Am citit de la sfârșitul de fișier nostru, pentru că am avut doar un octet în ea. 1107 00:53:30,980 --> 00:53:34,270 >> Fread întoarce 0, magazine ceva în tampon. 1108 00:53:34,270 --> 00:53:35,890 Sincer, nu știu ce se stochează în tampon. 1109 00:53:35,890 --> 00:53:38,380 Probabil ne-am putea uita în sus pentru a vedea ceea ce face. 1110 00:53:38,380 --> 00:53:40,130 Că eu sincer nu știu. 1111 00:53:40,130 --> 00:53:43,090 Noi nu știm, cui îi pasă ce se stochează în tampon? 1112 00:53:43,090 --> 00:53:44,010 Dar ea se întoarce 0. 1113 00:53:44,010 --> 00:53:45,440 Și va executa în timp ce 0? 1114 00:53:45,440 --> 00:53:49,950 1115 00:53:49,950 --> 00:53:51,180 >> TIMP 0 nu se va executa. 1116 00:53:51,180 --> 00:53:54,030 Deci, atunci ne vom muta aici. 1117 00:53:54,030 --> 00:53:58,870 Deci, haideți să trecem un spectacol de mâini în cazul în care acest lucru este codul ar trebui să ruleze, sau în cazul în care ne-am 1118 00:53:58,870 --> 00:54:00,140 ar trebui să facă schimbări în primul rând. 1119 00:54:00,140 --> 00:54:02,180 Deci, dacă credeți că - trebuie să voteze. 1120 00:54:02,180 --> 00:54:06,885 Dacă credeți că ar trebui să ruleze acest cod ca atare, vă rugăm să ridice mâna. 1121 00:54:06,885 --> 00:54:12,440 1122 00:54:12,440 --> 00:54:13,400 >> OK. 1123 00:54:13,400 --> 00:54:14,315 Există un singur - 1124 00:54:14,315 --> 00:54:17,260 ai o intrebare, preocupare? 1125 00:54:17,260 --> 00:54:18,080 Da. 1126 00:54:18,080 --> 00:54:21,240 >> STUDENT 48: După ce ne-am muta tampon în afara buclei, avem 1127 00:54:21,240 --> 00:54:22,670 trebuie să-l malloc? 1128 00:54:22,670 --> 00:54:23,310 >> JASON Hirschhorn: Marea întrebare. 1129 00:54:23,310 --> 00:54:26,670 După ce ne-am muta tampon în afara buclă, nu trebuie să-l malloc? 1130 00:54:26,670 --> 00:54:28,400 Aceasta este o întrebare domeniu. 1131 00:54:28,400 --> 00:54:32,130 Dacă vom inițializa tampon în afara din această buclă, va exista 1132 00:54:32,130 --> 00:54:33,534 interiorul buclei? 1133 00:54:33,534 --> 00:54:35,230 >> STUDENȚI MULTE: Da. 1134 00:54:35,230 --> 00:54:35,580 >> JASON Hirschhorn: Da. 1135 00:54:35,580 --> 00:54:40,100 Domeniul său de aplicare acoperă interiorul buclei, și, într-adevăr, nimic mai jos de aceasta în interiorul 1136 00:54:40,100 --> 00:54:42,460 din acest cod, inclusiv lucrurile în interiorul aici. 1137 00:54:42,460 --> 00:54:43,930 Așa că nu trebuie să-l malloc. 1138 00:54:43,930 --> 00:54:47,766 Este o variabilă locală, iar domeniul său de aplicare include încă bucla. 1139 00:54:47,766 --> 00:54:49,540 >> STUDENT 49: Nu trebuie să-l gratuit? 1140 00:54:49,540 --> 00:54:51,770 >> JASON Hirschhorn: Nu ne-am Trebuie să tampon liber? 1141 00:54:51,770 --> 00:54:53,860 >> STUDENT 49: Da, dacă noi nu facem malloc. 1142 00:54:53,860 --> 00:54:55,750 >> JASON Hirschhorn: Nu ne-am Trebuie să tampon liber? 1143 00:54:55,750 --> 00:54:57,160 Noi nu facem. 1144 00:54:57,160 --> 00:55:01,280 Din nou, aceasta este o variabilă locală, așa că nu trebuie să-l elibereze. 1145 00:55:01,280 --> 00:55:02,170 OK. 1146 00:55:02,170 --> 00:55:03,480 Să vedem ce se întâmplă. 1147 00:55:03,480 --> 00:55:17,290 1148 00:55:17,290 --> 00:55:18,220 Deci, este neinitializata. 1149 00:55:18,220 --> 00:55:20,830 Asta a fost ceea ce ceva care Marcus a propus mai devreme. 1150 00:55:20,830 --> 00:55:25,340 Deci avem această eroare tampon, variabil este neinitializata atunci când este utilizat aici. 1151 00:55:25,340 --> 00:55:26,590 >> Cum putem rezolva această problemă? 1152 00:55:26,590 --> 00:55:29,460 1153 00:55:29,460 --> 00:55:30,960 >> STUDENT 50: malloc ea? 1154 00:55:30,960 --> 00:55:31,770 >> STUDENT 51: Egal cu NULL? 1155 00:55:31,770 --> 00:55:33,000 >> STUDENT 52: Spune-tampon este egal cu NULL. 1156 00:55:33,000 --> 00:55:34,250 >> JASON Hirschhorn: OK. 1157 00:55:34,250 --> 00:55:40,040 1158 00:55:40,040 --> 00:55:40,770 Arata bine. 1159 00:55:40,770 --> 00:55:42,410 O avem acum. 1160 00:55:42,410 --> 00:55:45,630 Să creăm ceva pentru a încerca copierea. 1161 00:55:45,630 --> 00:56:08,990 1162 00:56:08,990 --> 00:56:10,490 Deci avem fișierul nostru text. 1163 00:56:10,490 --> 00:56:11,740 Cum putem rula acest program? 1164 00:56:11,740 --> 00:56:14,140 1165 00:56:14,140 --> 00:56:15,472 Da. 1166 00:56:15,472 --> 00:56:22,230 >> STUDENT 53: Puteți face dot slash cp, test.txt. 1167 00:56:22,230 --> 00:56:25,140 Și apoi puteți numi un alt fișier care se va stoca în. 1168 00:56:25,140 --> 00:56:25,510 >> JASON Hirschhorn: OK. 1169 00:56:25,510 --> 00:56:27,380 Vom numi out.txt. 1170 00:56:27,380 --> 00:56:28,630 Rece? 1171 00:56:28,630 --> 00:56:31,700 1172 00:56:31,700 --> 00:56:34,320 Vina Seg. 1173 00:56:34,320 --> 00:56:35,570 Gânduri despre eroarea SEG? 1174 00:56:35,570 --> 00:56:40,900 1175 00:56:40,900 --> 00:56:41,390 Acest lucru este mare. 1176 00:56:41,390 --> 00:56:45,040 Cum putem afla unde vina SEG este? 1177 00:56:45,040 --> 00:56:45,680 Ce? 1178 00:56:45,680 --> 00:56:45,990 >> STUDENT 54: Gdb. 1179 00:56:45,990 --> 00:56:47,240 >> JASON Hirschhorn: Gdb. 1180 00:56:47,240 --> 00:56:51,400 1181 00:56:51,400 --> 00:56:55,300 Vom rula gdb de scris gdb punct slash, numele programului nostru. 1182 00:56:55,300 --> 00:56:57,020 Nu sunt argumente în linia de comandă acolo. 1183 00:56:57,020 --> 00:56:59,570 Vom stabili o punct de control la principal. 1184 00:56:59,570 --> 00:57:02,190 Dacă vreau să încep gdb, ce să fac? 1185 00:57:02,190 --> 00:57:02,730 >> STUDENT 55: R. 1186 00:57:02,730 --> 00:57:08,910 >> JASON Hirschhorn: R. Și apoi ce? 1187 00:57:08,910 --> 00:57:09,400 >> STUDENT 55: Argumentele? 1188 00:57:09,400 --> 00:57:10,650 >> JASON Hirschhorn: Atunci argumente în linia de comandă. 1189 00:57:10,650 --> 00:57:15,890 1190 00:57:15,890 --> 00:57:17,120 Să se plimbe prin. 1191 00:57:17,120 --> 00:57:19,090 N este doar de a lua-mi linie cu linie. 1192 00:57:19,090 --> 00:57:21,450 Am de gând să merg până la I a lua vina mea segment. 1193 00:57:21,450 --> 00:57:22,700 Nu e vina mea segment. 1194 00:57:22,700 --> 00:57:24,960 1195 00:57:24,960 --> 00:57:27,875 Se pare ca fread cauzată vina mea seg. 1196 00:57:27,875 --> 00:57:30,570 1197 00:57:30,570 --> 00:57:32,770 Știu fread cauzate din vina mea SEG, pentru că a fost 1198 00:57:32,770 --> 00:57:34,950 linie ne-am executat. 1199 00:57:34,950 --> 00:57:36,530 >> Și singurul lucru care a fost întâmplă în acea linie - 1200 00:57:36,530 --> 00:57:37,520 două lucruri s-au întâmplat. 1201 00:57:37,520 --> 00:57:40,610 Fread mergea, iar apoi am fost face unele verificări WHILE. 1202 00:57:40,610 --> 00:57:44,820 Sunt dispus să pariez că în timp ce verificarea nu a fost cauza vina mea segment. 1203 00:57:44,820 --> 00:57:46,950 Cel mai probabil, a fost fread cauzând vina mea segment. 1204 00:57:46,950 --> 00:57:49,260 Văd, de asemenea, ceva aici, memcopy. 1205 00:57:49,260 --> 00:57:50,500 >> Copie de memorie. 1206 00:57:50,500 --> 00:57:53,820 Pare a fi în mișcare de memorie de la o locație la alta. 1207 00:57:53,820 --> 00:57:56,890 Pare a fi ceva ce s-ar întâmpla în fread, poate unele de memorie 1208 00:57:56,890 --> 00:57:58,910 trecerea de la aici pentru a aici. 1209 00:57:58,910 --> 00:58:01,740 1210 00:58:01,740 --> 00:58:03,860 Să mergem prin asta din nou. 1211 00:58:03,860 --> 00:58:06,900 Cum l-am început și-l rulați din nou? 1212 00:58:06,900 --> 00:58:08,092 Da. 1213 00:58:08,092 --> 00:58:15,140 >> STUDENT 56: Nu aveți nevoie pentru a pune un ampersand înainte de tampon? 1214 00:58:15,140 --> 00:58:17,800 >> JASON Hirschhorn: Deci ampersand înainte tampon mi-ar da adresa de 1215 00:58:17,800 --> 00:58:22,330 tampon, care este un char *. 1216 00:58:22,330 --> 00:58:25,250 Să ne trece prin asta de mai mult timp. 1217 00:58:25,250 --> 00:58:28,248 Cum pot rula printr-o încă o dată? 1218 00:58:28,248 --> 00:58:29,210 >> STUDENT 57: Poți doar tip alerga din nou? 1219 00:58:29,210 --> 00:58:32,050 >> JASON Hirschhorn: introduceți doar alerga din nou. 1220 00:58:32,050 --> 00:58:33,415 Deci, noi nu vom executa această linie. 1221 00:58:33,415 --> 00:58:36,250 1222 00:58:36,250 --> 00:58:39,240 Deci tampon este un pointer NULL. 1223 00:58:39,240 --> 00:58:40,490 Corecta? 1224 00:58:40,490 --> 00:58:45,870 1225 00:58:45,870 --> 00:58:47,060 Se indică spre - să vedem. 1226 00:58:47,060 --> 00:58:48,500 Dacă ne-am nostru - 1227 00:58:48,500 --> 00:58:50,430 desena o imagine rapidă a acestei. 1228 00:58:50,430 --> 00:58:53,500 Poate toata lumea vedea dacă Scriu pe aici? 1229 00:58:53,500 --> 00:59:02,890 >> Deci, în stivă, avem un local de variabilă și se numește tampon, și 1230 00:59:02,890 --> 00:59:08,230 este un pointer la un char. 1231 00:59:08,230 --> 00:59:10,325 Ce adresa e char la? 1232 00:59:10,325 --> 00:59:12,550 >> STUDENT 58: 0x0. 1233 00:59:12,550 --> 00:59:13,400 >> JASON Hirschhorn: Corect. 1234 00:59:13,400 --> 00:59:14,200 Asta e ceea ce este. 1235 00:59:14,200 --> 00:59:17,600 Aici, în interiorul tampon, este stocat 0x0. 1236 00:59:17,600 --> 00:59:20,480 Asta e ceea ce avem - configurare avem acum. 1237 00:59:20,480 --> 00:59:27,540 Deci această linie, fread, pune ceva de la sursa de unde? 1238 00:59:27,540 --> 00:59:30,560 În această casetă sau cutia asta? 1239 00:59:30,560 --> 00:59:31,060 Care cutie? 1240 00:59:31,060 --> 00:59:33,290 Cutie sau caseta din dreapta la stânga? 1241 00:59:33,290 --> 00:59:34,750 Această casetă de drept. 1242 00:59:34,750 --> 00:59:38,440 >> Rezultă indicatorul, și-l pune în aici. 1243 00:59:38,440 --> 00:59:42,620 Când ne-am încerca și memorie tactil la Localizare 0, ceea ce primim? 1244 00:59:42,620 --> 00:59:45,050 O eroare de segmentare. 1245 00:59:45,050 --> 00:59:46,550 Asta e eroarea avem chiar acum. 1246 00:59:46,550 --> 00:59:46,970 Da. 1247 00:59:46,970 --> 00:59:48,410 >> STUDENT 59: Nu ai pentru a pune tampon stea? 1248 00:59:48,410 --> 00:59:49,180 Sau nu? 1249 00:59:49,180 --> 00:59:50,050 Pentru fread? 1250 00:59:50,050 --> 00:59:51,450 >> JASON Hirschhorn: Deci fread ia un pointer. 1251 00:59:51,450 --> 00:59:54,920 1252 00:59:54,920 --> 00:59:55,900 Deci, se trece în tampon. 1253 00:59:55,900 --> 00:59:58,980 Și atunci va de-trimitere se undeva în interiorul fread. 1254 00:59:58,980 --> 01:00:00,700 Dar, din nou, am văzut, este nevoie de un pointer. 1255 01:00:00,700 --> 01:00:02,560 Nu avem nevoie să treacă o tampon stele. 1256 01:00:02,560 --> 01:00:05,350 Asta ar fi trecerea aceasta orice e aici. 1257 01:00:05,350 --> 01:00:07,980 Și care ar putea, probabil, să ne dea o eroare pentru că suntem de afiliere-o. 1258 01:00:07,980 --> 01:00:08,150 >> Corect? 1259 01:00:08,150 --> 01:00:10,690 Când ne-am de-trimitere acest indicator, atunci când vom încerca să acceseze această locație, 1260 01:00:10,690 --> 01:00:13,140 primim o eroare - vina noastră de segmentare. 1261 01:00:13,140 --> 01:00:15,800 Așa - 1262 01:00:15,800 --> 01:00:16,690 oops. 1263 01:00:16,690 --> 01:00:19,090 Vom iesi din gdb. 1264 01:00:19,090 --> 01:00:20,160 Linia noastra - 1265 01:00:20,160 --> 01:00:22,990 problema noastră - este corect aici, pe această linie. 1266 01:00:22,990 --> 01:00:26,410 Și este o problemă, deoarece din această linie. 1267 01:00:26,410 --> 01:00:31,780 >> Cum putem crea o cutie care este accesibil în fread. 1268 01:00:31,780 --> 01:00:31,980 Corect? 1269 01:00:31,980 --> 01:00:35,190 Avem nevoie de a crea o casetă care este unul octet mare, dimensiunea unui caracter. 1270 01:00:35,190 --> 01:00:38,590 Dar avem nevoie de acea cutie să fie accesibile atunci când această funcție executa. 1271 01:00:38,590 --> 01:00:39,390 Deci, în cazul în care - 1272 01:00:39,390 --> 01:00:39,640 Da. 1273 01:00:39,640 --> 01:00:40,440 Orice idei? 1274 01:00:40,440 --> 01:00:43,615 >> STUDENT 60: Doar set-l ca orice caracter aleatoriu. 1275 01:00:43,615 --> 01:00:49,150 1276 01:00:49,150 --> 01:00:51,640 Doar face egal tampon char caracterul. 1277 01:00:51,640 --> 01:00:53,795 Și apoi, când ați tampon acolo - 1278 01:00:53,795 --> 01:00:54,110 >> JASON Hirschhorn: Așteaptă. 1279 01:00:54,110 --> 01:00:55,110 Char tampon? 1280 01:00:55,110 --> 01:00:55,880 Deci, nici o stea? 1281 01:00:55,880 --> 01:00:56,390 >> STUDENT 60: Da. 1282 01:00:56,390 --> 01:00:58,560 Scoate steaua. 1283 01:00:58,560 --> 01:01:00,690 Este egal cu un caracter aleatoriu. 1284 01:01:00,690 --> 01:01:01,460 >> JASON Hirschhorn: OK. 1285 01:01:01,460 --> 01:01:02,420 Deci, da-mi unul. 1286 01:01:02,420 --> 01:01:03,170 >> STUDENT 60: Ca o sau ceva. 1287 01:01:03,170 --> 01:01:06,160 Și atunci când aveți tampon acolo, să utilizați un - 1288 01:01:06,160 --> 01:01:06,420 >> STUDENT 61: Steaua? 1289 01:01:06,420 --> 01:01:07,650 Oh, nu, ampersand. 1290 01:01:07,650 --> 01:01:09,000 >> STUDENT 60: Utilizarea ampersand. 1291 01:01:09,000 --> 01:01:09,470 >> JASON Hirschhorn: OK. 1292 01:01:09,470 --> 01:01:11,320 Și ce despre în fwrite? 1293 01:01:11,320 --> 01:01:14,150 >> STUDENT 60: Folosiți din nou ampersand. 1294 01:01:14,150 --> 01:01:14,320 >> JASON Hirschhorn: În regulă. 1295 01:01:14,320 --> 01:01:20,970 Deci, ideea ta este, vom crea un char și a pus ceva în ea, și apoi 1296 01:01:20,970 --> 01:01:22,612 scrie că char. 1297 01:01:22,612 --> 01:01:23,760 >> STUDENT 60: Da. 1298 01:01:23,760 --> 01:01:25,916 >> JASON Hirschhorn: Ce cred oamenii? 1299 01:01:25,916 --> 01:01:27,770 >> STUDENT 62: Este complicate. 1300 01:01:27,770 --> 01:01:28,460 >> JASON Hirschhorn: OK. 1301 01:01:28,460 --> 01:01:29,760 Să-l scoată. 1302 01:01:29,760 --> 01:01:35,720 Deci, de data aceasta, am de gând să atragă în acest roșu pe stiva de aici, și apoi ne-am 1303 01:01:35,720 --> 01:01:36,410 va avea - 1304 01:01:36,410 --> 01:01:36,822 ooh! 1305 01:01:36,822 --> 01:01:38,060 Scuze. 1306 01:01:38,060 --> 01:01:45,930 Deci, de data aceasta avem ceva numit tampon, și e pe stiva. 1307 01:01:45,930 --> 01:01:48,430 Corecta? 1308 01:01:48,430 --> 01:01:51,520 Și suntem salvarea într-o, inițial. 1309 01:01:51,520 --> 01:01:53,830 >> Apoi, ne-am apelul nostru de a fread. 1310 01:01:53,830 --> 01:02:01,300 Ce fread nu este este nevoie de un octet de la fișier nostru și-l pune undeva. 1311 01:02:01,300 --> 01:02:04,570 Îl pune în orice Chestia asta arătând spre. 1312 01:02:04,570 --> 01:02:09,130 Ei bine, înainte de a avea această adresă - 1313 01:02:09,130 --> 01:02:10,250 0x0. 1314 01:02:10,250 --> 01:02:13,349 Acum, ce adresa avem? 1315 01:02:13,349 --> 01:02:14,650 >> STUDENT 63: Indiferent tampon adresa este. 1316 01:02:14,650 --> 01:02:15,970 >> JASON Hirschhorn: Indiferent tampon adresa este. 1317 01:02:15,970 --> 01:02:22,370 Este, probabil, va fi ceva de genul asta. 1318 01:02:22,370 --> 01:02:26,950 Probabil, va începe cu un b și un F, și apoi au șase alte 1319 01:02:26,950 --> 01:02:27,970 cifre hexazecimale. 1320 01:02:27,970 --> 01:02:28,480 Nu contează. 1321 01:02:28,480 --> 01:02:29,470 Unele adresa. 1322 01:02:29,470 --> 01:02:31,410 Și vom trece ca adresa inch 1323 01:02:31,410 --> 01:02:34,790 >> Și am de gând să pună o nostru lucru octet la acea adresa. 1324 01:02:34,790 --> 01:02:38,470 Așa că am de gând să pună o nostru lucru octet în interiorul aici. 1325 01:02:38,470 --> 01:02:40,800 Și apoi vom scrie la ceea ce e tot înăuntru aici. 1326 01:02:40,800 --> 01:02:43,425 1327 01:02:43,425 --> 01:02:45,380 Are cineva intrebari despre asta? 1328 01:02:45,380 --> 01:02:50,990 1329 01:02:50,990 --> 01:02:54,690 Cine crede că acest cod va funcționa? 1330 01:02:54,690 --> 01:02:56,020 >> Ridicați mâna dacă credeți acest cod va funcționa. 1331 01:02:56,020 --> 01:02:57,270 Va trebui să ia o poziție. 1332 01:02:57,270 --> 01:03:00,670 1333 01:03:00,670 --> 01:03:02,500 Și cine crede că acest cod nu va funcționa? 1334 01:03:02,500 --> 01:03:04,610 Ridică mâna. 1335 01:03:04,610 --> 01:03:06,750 Toata lumea ar trebui să fie ridicând mâna lor. 1336 01:03:06,750 --> 01:03:07,670 OK. 1337 01:03:07,670 --> 01:03:09,390 Michael, unde stai? 1338 01:03:09,390 --> 01:03:10,680 >> MICHAEL: Eu nu pot decide. 1339 01:03:10,680 --> 01:03:12,070 Un fel de la mijloc. 1340 01:03:12,070 --> 01:03:12,736 >> JASON Hirschhorn: Esti în mijloc. 1341 01:03:12,736 --> 01:03:13,092 Alege una. 1342 01:03:13,092 --> 01:03:14,400 >> MICHAEL: Voi avea încredere și spun că va funcționa. 1343 01:03:14,400 --> 01:03:14,660 >> JASON Hirschhorn: OK. 1344 01:03:14,660 --> 01:03:16,047 Veți avea credință și spun că funcționează? 1345 01:03:16,047 --> 01:03:26,490 1346 01:03:26,490 --> 01:03:27,020 Ce sa întâmplat? 1347 01:03:27,020 --> 01:03:28,270 >> [VOCI interpune] 1348 01:03:28,270 --> 01:03:35,170 1349 01:03:35,170 --> 01:03:35,950 >> JASON Hirschhorn: Nu vina segment. 1350 01:03:35,950 --> 01:03:40,320 Cum putem verifica pentru a vedea dacă două lucruri sunt egale? 1351 01:03:40,320 --> 01:03:42,060 Două fișiere sunt egale. 1352 01:03:42,060 --> 01:03:43,300 >> STUDENT 64: Dif. 1353 01:03:43,300 --> 01:03:45,490 >> JASON Hirschhorn: Dif. 1354 01:03:45,490 --> 01:03:51,630 Verificări dif de diferențele dintre două fișiere, iar în cazul în care se întoarce 1355 01:03:51,630 --> 01:03:52,890 nimic, sunt identice. 1356 01:03:52,890 --> 01:03:59,030 Și dacă ne deschidem, vom obține dosarul nostru. 1357 01:03:59,030 --> 01:04:00,490 Astfel că a fost soluția corectă. 1358 01:04:00,490 --> 01:04:01,780 Să ne uităm înapoi la el o dată. 1359 01:04:01,780 --> 01:04:04,080 Noi de fapt, nici măcar nu trebuie să-l inițializa. 1360 01:04:04,080 --> 01:04:05,520 >> Aceasta ar arata, probabil, un pic mai curat, dacă nu ați pus 1361 01:04:05,520 --> 01:04:07,680 ceva aleator acolo. 1362 01:04:07,680 --> 01:04:13,070 Punctul de a fi, ai nevoie pentru a crea unele spațiu pentru a stoca ceva de la 1363 01:04:13,070 --> 01:04:15,530 fread și să ia ceva din fwrite. 1364 01:04:15,530 --> 01:04:18,400 Și chestia aia trebuia să fie un local, variabilă în stivă - te 1365 01:04:18,400 --> 01:04:19,890 ar fi putut malloc'd spațiu. 1366 01:04:19,890 --> 01:04:23,030 >> Așa că de fapt ar putea avea malloc scris aici, și 1367 01:04:23,030 --> 01:04:25,420 care ar fi lucrat. 1368 01:04:25,420 --> 01:04:28,660 Și apoi ne-ar fi fost de stocare lucrurile noastre undeva pe movila. 1369 01:04:28,660 --> 01:04:31,940 Dar acest lucru este, de fapt, probabil, soluția cea mai elegantă. 1370 01:04:31,940 --> 01:04:34,490 Doar a crea mai mult spațiu pe stivă pentru aceste lucruri să meargă. 1371 01:04:34,490 --> 01:04:37,690 1372 01:04:37,690 --> 01:04:38,990 >> Mi-ar avea alte două comentarii. 1373 01:04:38,990 --> 01:04:44,650 Dacă ar fi să luați rândul său în acest, și apoi sa inscris la acest lucru, comentariile mele 1374 01:04:44,650 --> 01:04:47,400 ar fi după cum urmează. 1375 01:04:47,400 --> 01:04:54,300 Aceste 1 e aici, la mine, uita-te cum ar fi numere de magie. 1376 01:04:54,300 --> 01:04:56,860 Acest lucru 1, din punct de vedere fread, are sens. 1377 01:04:56,860 --> 01:04:59,580 Acesta este numărul de lucruri pentru a citi sau scrie. 1378 01:04:59,580 --> 01:05:03,740 >> Dar asta de aici ar trebui să probabil să fie altceva. 1379 01:05:03,740 --> 01:05:05,180 Deci, ceea ce este o soluție? 1380 01:05:05,180 --> 01:05:06,545 >> STUDENT 65: Dimensiunea de octet. 1381 01:05:06,545 --> 01:05:10,100 1382 01:05:10,100 --> 01:05:11,080 >> JASON Hirschhorn: Cum ar fi asta? 1383 01:05:11,080 --> 01:05:13,130 >> STUDENT 65: Dimensiunea de char. 1384 01:05:13,130 --> 01:05:13,820 >> JASON Hirschhorn: Dimensiunea de char. 1385 01:05:13,820 --> 01:05:15,290 Da, octet nu este un tip. 1386 01:05:15,290 --> 01:05:16,320 Deci, dimensiunea lucrărilor char. 1387 01:05:16,320 --> 01:05:30,270 Am putea avea, în partea superioară a codul nostru, # definit ca. 1388 01:05:30,270 --> 01:05:33,410 Numit ceva BYTE și este într-adevăr un char. 1389 01:05:33,410 --> 01:05:37,675 De fapt, o abordare chiar mai bine ar fi fost aceasta - 1390 01:05:37,675 --> 01:05:39,391 uint. 1391 01:05:39,391 --> 01:05:40,780 Știe cineva ce este asta? 1392 01:05:40,780 --> 01:05:44,388 1393 01:05:44,388 --> 01:05:44,840 >> Scuze. 1394 01:05:44,840 --> 01:05:46,090 Eu nu dau inapoi. 1395 01:05:46,090 --> 01:05:51,620 1396 01:05:51,620 --> 01:05:52,200 Așteaptă, nu. 1397 01:05:52,200 --> 01:05:53,450 În ce fel se duce? 1398 01:05:53,450 --> 01:05:58,071 1399 01:05:58,071 --> 01:05:59,660 Știe cineva ce este asta? 1400 01:05:59,660 --> 01:06:00,950 Da. 1401 01:06:00,950 --> 01:06:05,650 >> STUDENT 67: Ar trebui să ajuta la standardizarea în sisteme de lucruri pe care 1402 01:06:05,650 --> 01:06:08,760 au - cum ar fi numere întregi nesemnate care au 8 bytes? 1403 01:06:08,760 --> 01:06:11,785 >> JASON Hirschhorn: Asta-i exact dreapta. 1404 01:06:11,785 --> 01:06:14,310 Pe mașini diferite, mărimea unui char - 1405 01:06:14,310 --> 01:06:15,180 Nu, de obicei, un char. 1406 01:06:15,180 --> 01:06:16,100 Caractere sunt, de obicei, un octet. 1407 01:06:16,100 --> 01:06:19,590 Dar dimensiunea alte tipuri de date sunt dimensiuni diferite pe o mașină de 32 de biți 1408 01:06:19,590 --> 01:06:21,370 comparativ cu o mașină pe 64 de biți. 1409 01:06:21,370 --> 01:06:25,180 Un uint8_t este întotdeauna 8 biți - 1410 01:06:25,180 --> 01:06:27,210 întotdeauna un octet. 1411 01:06:27,210 --> 01:06:29,580 >> Și trebuie să includă care standard de fișier header int. 1412 01:06:29,580 --> 01:06:35,040 Deci, acum, acest lucru ar fi fost, probabil, cel mai bun mod de a scrie acest cod. 1413 01:06:35,040 --> 01:06:40,160 1414 01:06:40,160 --> 01:06:41,450 Așa că am scăpa de numere de magie. 1415 01:06:41,450 --> 01:06:44,690 Și am, de asemenea, o mai logic tip de tampon. 1416 01:06:44,690 --> 01:06:49,450 Nu este doar un caracter, acesta este un octet, care este ceea ce ne asteptam sa fie. 1417 01:06:49,450 --> 01:06:53,400 >> Și aici, ne-am de fapt, a fost un pic mai robust. 1418 01:06:53,400 --> 01:06:55,190 Noi nu suntem numindu-l un char, care - 1419 01:06:55,190 --> 01:06:58,630 Poate, cine stie - poate fi un alt Dimensiunea pe mașini diferite. 1420 01:06:58,630 --> 01:07:02,025 Noi de fapt, spun acest lucru este exact un octet, mereu, indiferent de ce. 1421 01:07:02,025 --> 01:07:05,810 Și dacă ne uităm aici, vom face cp. 1422 01:07:05,810 --> 01:07:08,340 Uh-oh. 1423 01:07:08,340 --> 01:07:09,590 Ce sa întâmplat? 1424 01:07:09,590 --> 01:07:14,470 1425 01:07:14,470 --> 01:07:16,170 >> STUDENT 68: S-ar putea să fie pornit. 1426 01:07:16,170 --> 01:07:17,880 >> JASON Hirschhorn: Ce? 1427 01:07:17,880 --> 01:07:19,130 >> STUDENT 69: Este? 1428 01:07:19,130 --> 01:07:21,940 1429 01:07:21,940 --> 01:07:25,080 >> STUDENT 70: N-ai făcut definesc ca un tip. 1430 01:07:25,080 --> 01:07:28,684 >> STUDENT 71: Dar cum ar trebui fi definite în standardul. 1431 01:07:28,684 --> 01:07:29,934 >> STUDENT 72: Ce se întâmplă? 1432 01:07:29,934 --> 01:07:37,660 1433 01:07:37,660 --> 01:07:40,210 >> STUDENT 73: ar trebui să definească fi majuscule? 1434 01:07:40,210 --> 01:07:41,370 >> JASON Hirschhorn: Deci nu e # define. 1435 01:07:41,370 --> 01:07:45,490 De fapt, în acest caz, sunt va folosi typedef. 1436 01:07:45,490 --> 01:07:48,590 Pentru ca suntem o folosesc ca un tip într-o singură locație. 1437 01:07:48,590 --> 01:07:51,990 Deci, în acest caz, de fapt, vrem să typedef ca suntem imprimarea unui nou tip de 1438 01:07:51,990 --> 01:07:54,490 octet, și este, în esență, aceasta. 1439 01:07:54,490 --> 01:07:56,590 Este un pic diferit decât # define. 1440 01:07:56,590 --> 01:08:02,740 >> Și acum, codul nostru functioneaza perfect. 1441 01:08:02,740 --> 01:08:05,230 Deci, din nou, # define nevoie de ceva, înlocuiește-l peste tot 1442 01:08:05,230 --> 01:08:06,780 cu alte lucruri. 1443 01:08:06,780 --> 01:08:07,920 E doar un macro - 1444 01:08:07,920 --> 01:08:09,420 prescurtare pentru a scăpa de numere magice. 1445 01:08:09,420 --> 01:08:11,360 Dar, în acest caz, pentru că suntem folosind-o ca un tip - 1446 01:08:11,360 --> 01:08:12,180 chiar aici - 1447 01:08:12,180 --> 01:08:19,880 pentru ca aceasta să funcționeze, avem nevoie de a typedef orice byte este. 1448 01:08:19,880 --> 01:08:21,840 >> Și suntem o definire chiar aici. 1449 01:08:21,840 --> 01:08:24,750 Nu e un struct, este de fapt doar un întreg fără semn. 1450 01:08:24,750 --> 01:08:27,680 Este un octet lung. 1451 01:08:27,680 --> 01:08:31,910 Acest cod va fi disponibil on-line, și voi toți ar trebui să-l aibă chiar acum. 1452 01:08:31,910 --> 01:08:33,830 >> Deci avem - 1453 01:08:33,830 --> 01:08:34,250 perfectă - 1454 01:08:34,250 --> 01:08:41,359 13 minute la stânga pentru a merge problema pe set 5. 1455 01:08:41,359 --> 01:08:44,270 Vreau sa merg prin copy.c împreună, și apoi vom vorbi pe scurt 1456 01:08:44,270 --> 01:08:47,120 despre celelalte părți problemei stabilit. 1457 01:08:47,120 --> 01:08:48,899 Deci, lasă-mă să trag în sus copy.c. 1458 01:08:48,899 --> 01:09:03,930 1459 01:09:03,930 --> 01:09:08,810 Și lucrul rece este, de fapt, ne-am deja scris o mulțime de acest cod. 1460 01:09:08,810 --> 01:09:11,180 >> Codul am scris literalmente doar a venit de aici, când am fost 1461 01:09:11,180 --> 01:09:13,120 scris acest lucru pe cont propriu. 1462 01:09:13,120 --> 01:09:16,990 Dar acest lucru este copy.c, stă la baza pentru primele două părți ale 1463 01:09:16,990 --> 01:09:22,340 Problema stabilit pentru whodunit.c, care aveți nevoie pentru a scrie, și resize.c. 1464 01:09:22,340 --> 01:09:27,050 Recover.c, care este a treia și ultima parte a setului probleme, nu este 1465 01:09:27,050 --> 01:09:29,529 bazată pe jos de acest fișier. 1466 01:09:29,529 --> 01:09:32,200 >> Ai de gând să nevoie pentru a scrie acest fișier, vă oferim un șablon pentru care 1467 01:09:32,200 --> 01:09:34,620 fișier, dar nu are nimic de a face cu copy.c. 1468 01:09:34,620 --> 01:09:38,675 Dar, pentru că copy.c este fundamentul pentru primele două părți, vom 1469 01:09:38,675 --> 01:09:42,000 sa se plimbe prin ea acum, astfel încât să aibă un bun simt de ceea ce face. 1470 01:09:42,000 --> 01:09:43,640 >> Și comentariile dea o parte din ea departe. 1471 01:09:43,640 --> 01:09:45,120 Am scris deja o parte din aceasta. 1472 01:09:45,120 --> 01:09:49,220 În primul rând, suntem asigurandu avem trei argumente. 1473 01:09:49,220 --> 01:09:50,560 Apoi, ne amintim numele fișierului. 1474 01:09:50,560 --> 01:09:52,960 Așa că am sărit acest pas, atunci când ne-am codat lucru nostru - 1475 01:09:52,960 --> 01:09:54,700 când cp nostru. 1476 01:09:54,700 --> 01:09:56,750 Dar aici, ei fac un pic mai curat. 1477 01:09:56,750 --> 01:09:59,350 >> Sunt de verificare pentru a vă asigura ambele fișiere sunt bune, în 1478 01:09:59,350 --> 01:10:00,450 plus de a le deschide. 1479 01:10:00,450 --> 01:10:04,760 Am scris tot acest cod doar acum, așa că eu sunt nu de gând să locuiască pe acest cod. 1480 01:10:04,760 --> 01:10:09,670 Următorul este unele chestii, care este specific pentru tipurile de fișiere suntem folosind, care 1481 01:10:09,670 --> 01:10:12,240 sunt fișiere bitmap. 1482 01:10:12,240 --> 01:10:15,660 Fișiere bitmap au unele metadate asociate cu acestea. 1483 01:10:15,660 --> 01:10:20,190 >> Deci, primul cuplu de bytes să vă spun despre fișierul. 1484 01:10:20,190 --> 01:10:23,460 Ele nu sunt culorile pixelul în care imaginea. 1485 01:10:23,460 --> 01:10:25,120 Ei să vă spun despre fișierul. 1486 01:10:25,120 --> 01:10:28,220 Și dacă ai citit prin setul de probleme, vei avea mult mai multe informații 1487 01:10:28,220 --> 01:10:33,100 pe ce tipuri de structuri de metadate sunt incluse cu bitmap. 1488 01:10:33,100 --> 01:10:39,350 >> Dar de aceea avem această primă set de - acest cod aici. 1489 01:10:39,350 --> 01:10:42,490 Citim metadatele - 1490 01:10:42,490 --> 01:10:45,800 două bucăți de metadate - fișierul antet și antetul info. 1491 01:10:45,800 --> 01:10:51,030 Și noi suntem de verificare unele părți din acesta pentru a asigurați-vă că este un adevărat fișier bitmap 1492 01:10:51,030 --> 01:10:52,420 înainte de a continua. 1493 01:10:52,420 --> 01:10:55,470 >> Și din nou, acestea sunt detalii noi nu au nevoie pentru a merge în acum. 1494 01:10:55,470 --> 01:10:57,720 Dacă ați citit prin setul de probleme, veți înțelege aceste. 1495 01:10:57,720 --> 01:11:01,370 Pe scurt, acestea sunt doar că, acesta este un fișier bitmap, și 1496 01:11:01,370 --> 01:11:02,810 confirmând faptul că. 1497 01:11:02,810 --> 01:11:05,180 >> Apoi, suntem scris cele la fișierul afară. 1498 01:11:05,180 --> 01:11:05,660 Vedem că aici. 1499 01:11:05,660 --> 01:11:06,910 Vă scriem pentru indicatorul afară. 1500 01:11:06,910 --> 01:11:09,260 1501 01:11:09,260 --> 01:11:11,320 Apoi, vom determina umplutură. 1502 01:11:11,320 --> 01:11:15,240 Din nou, așa cum este particularitate cu un fișier bitmap, unele linii includ 1503 01:11:15,240 --> 01:11:16,840 padding la final. 1504 01:11:16,840 --> 01:11:19,000 Și dacă ai citit prin setul de probleme, veți afla mai multe despre umplutură. 1505 01:11:19,000 --> 01:11:22,330 Aceasta este formula pentru a găsi padding. 1506 01:11:22,330 --> 01:11:23,610 >> Important să ne amintim - 1507 01:11:23,610 --> 01:11:29,720 atunci când modificați dimensiunea unui bitmap fișier, schimbările de umplutură. 1508 01:11:29,720 --> 01:11:31,970 Când modificați dimensiunea unei fișier, schimbările de umplutură. 1509 01:11:31,970 --> 01:11:34,310 Acesta nu va fi mai mare de 3 - 1510 01:11:34,310 --> 01:11:36,510 va fi 0 la 3, inclusiv. 1511 01:11:36,510 --> 01:11:38,930 Dar atunci când modificați dimensiunea de ceva, schimbările de umplutură. 1512 01:11:38,930 --> 01:11:47,100 >> Dacă am doar un singur pixel în acel rând, am nevoie de trei bytes de umplutură, pentru că 1513 01:11:47,100 --> 01:11:51,190 fiecare rând trebuie să fie multipli de patru bytes lung într-un fișier de tip bitmap. 1514 01:11:51,190 --> 01:11:56,120 Dar dacă am dubla, pentru a merge de la un pixel la doi pixeli, fiecare dintre acestea, 1515 01:11:56,120 --> 01:11:59,510 să spunem, este un octet, atunci am nevoie doi bytes de umplutură pentru a face 1516 01:11:59,510 --> 01:12:00,970 care egal cu patru. 1517 01:12:00,970 --> 01:12:04,200 >> Așa că atunci când am schimba dimensiunea de ceva, Am nevoie pentru a schimba valoarea 1518 01:12:04,200 --> 01:12:06,551 de umplutură am. 1519 01:12:06,551 --> 01:12:08,100 Asta face sens pentru toată lumea? 1520 01:12:08,100 --> 01:12:12,020 1521 01:12:12,020 --> 01:12:18,720 Apoi, vom repeta pe fiecare rând, sau prin toate rândurile. 1522 01:12:18,720 --> 01:12:21,400 Și apoi ne-am repeta prin fiecare coloană în fiecare rând. 1523 01:12:21,400 --> 01:12:25,330 Vom trata acest lucru ca bitmap o grilă, așa cum ne-am tratat 1524 01:12:25,330 --> 01:12:26,490 bord, în 15. 1525 01:12:26,490 --> 01:12:29,200 >> Ca am tratat cărămizi, atunci când le-am imprimat pe ecran. 1526 01:12:29,200 --> 01:12:31,350 O grilă de rânduri și coloane. 1527 01:12:31,350 --> 01:12:32,350 Atunci - am văzut asta. 1528 01:12:32,350 --> 01:12:33,840 Noi de fapt, doar codificat acest lucru. 1529 01:12:33,840 --> 01:12:35,780 Am creat unele de stocare temporară. 1530 01:12:35,780 --> 01:12:38,710 Am citit acolo, și apoi am scrie. 1531 01:12:38,710 --> 01:12:42,680 Acest lucru este exact ceea ce am făcut. 1532 01:12:42,680 --> 01:12:46,760 >> Apoi, pentru că i-am spus fiecare linie se termină în niște umplutură, am 1533 01:12:46,760 --> 01:12:48,260 săriți peste care padding - 1534 01:12:48,260 --> 01:12:51,000 vechi padding. 1535 01:12:51,000 --> 01:12:52,630 Și apoi ne-am adauga înapoi. 1536 01:12:52,630 --> 01:12:55,140 În acest caz, vom crea același fișier exact. 1537 01:12:55,140 --> 01:12:56,180 Noi doar o copiere. 1538 01:12:56,180 --> 01:12:57,700 Deci, această linie este un fel de prostie. 1539 01:12:57,700 --> 01:12:59,660 Am putea literalmente doar pune umplutura inch 1540 01:12:59,660 --> 01:13:04,290 >> Dar dacă vă schimbați dimensiunea fișierului, vrei încă această linie? 1541 01:13:04,290 --> 01:13:08,510 1542 01:13:08,510 --> 01:13:11,560 Deci, dacă am schimba dimensiunea unui fișier, Nu vrem să săriți 1543 01:13:11,560 --> 01:13:12,810 peste padding vechi? 1544 01:13:12,810 --> 01:13:15,170 1545 01:13:15,170 --> 01:13:15,970 >> STUDENT 74: Da. 1546 01:13:15,970 --> 01:13:17,090 >> JASON Hirschhorn: Deci ce facem. 1547 01:13:17,090 --> 01:13:19,290 Pentru ca acest lucru, din nou, oferte cu fișierul sursă. 1548 01:13:19,290 --> 01:13:21,570 Noi nu le pasă de padding din fișierul sursă. 1549 01:13:21,570 --> 01:13:23,410 Vrem să mergem la linia următoare. 1550 01:13:23,410 --> 01:13:28,850 Dar noi nu, pur și simplu pune înapoi suma vechi de umplutură. 1551 01:13:28,850 --> 01:13:31,540 Avem nevoie de a pune înapoi noua sumă de umplutură. 1552 01:13:31,540 --> 01:13:35,810 >> Deci, atunci când vom schimba dimensiunea unui fișier, noi încă mai doresc să săriți peste 1553 01:13:35,810 --> 01:13:38,270 padding în fișierul vechi - ceea ce suntem de lectură de la. 1554 01:13:38,270 --> 01:13:40,370 Dar ceea ce suntem scris, ne vom la nevoie pentru a pune înapoi unele diferite 1555 01:13:40,370 --> 01:13:41,890 număr de umplutură care ne-am stabilit. 1556 01:13:41,890 --> 01:13:42,780 Da. 1557 01:13:42,780 --> 01:13:44,550 >> STUDENT 75: Ordinea de cei doi Liniile nu contează, nu? 1558 01:13:44,550 --> 01:13:46,160 Pentru că te descurci fișiere diferite. 1559 01:13:46,160 --> 01:13:46,620 >> JASON Hirschhorn: Exact. 1560 01:13:46,620 --> 01:13:48,220 Ordinea acestor două linii nu conteaza. 1561 01:13:48,220 --> 01:13:49,790 Vom scrie această linie. 1562 01:13:49,790 --> 01:13:51,430 Acest lucru este aici pentru fișierul suntem scris. 1563 01:13:51,430 --> 01:13:54,370 Asta e important, așa că am obține dreptul de suma de umplutură. 1564 01:13:54,370 --> 01:13:57,560 Acest lucru are de a face cu fișierul în. 1565 01:13:57,560 --> 01:13:58,560 Vrem să săriți peste dreapta peste umplutură. 1566 01:13:58,560 --> 01:13:59,470 >> Noi nu vrem să citească - 1567 01:13:59,470 --> 01:14:01,500 dacă citim un octet la un moment dat, ne-am nu-mi pasă de aceste bytes de umplere. 1568 01:14:01,500 --> 01:14:04,070 Vrem pentru a trece la următoarea linie. 1569 01:14:04,070 --> 01:14:11,800 În cele din urmă la fel ca Lucy a dat pentru noi, am închide fișierele și a reveni 0. 1570 01:14:11,800 --> 01:14:13,890 Deci, aceasta este copy.c. 1571 01:14:13,890 --> 01:14:17,850 Și de fapt ne-am scris - am petrecut cea mai mare parte secțiunea scris acest lucru, în esență. 1572 01:14:17,850 --> 01:14:18,740 >> Tu ai făcut asta. 1573 01:14:18,740 --> 01:14:22,440 Deci, sperăm că aveți un bun simț de ce se întâmplă aici. 1574 01:14:22,440 --> 01:14:25,890 Diferența mare, sincer, este doar această primă parte care se ocupă cu 1575 01:14:25,890 --> 01:14:29,970 particularități ale fișierelor bitmap. 1576 01:14:29,970 --> 01:14:33,570 Așa că am ca urmatorul meu de diapozitive, Ce trebuie să facem? 1577 01:14:33,570 --> 01:14:35,510 Ei bine, hai să ne gândim roman sau film polițist. 1578 01:14:35,510 --> 01:14:38,080 >> Și pentru cineva care a citit prin problema stabilit, ceea ce facem noi 1579 01:14:38,080 --> 01:14:41,410 trebuie să faceți în roman sau film polițist? 1580 01:14:41,410 --> 01:14:42,080 Pur și simplu. 1581 01:14:42,080 --> 01:14:42,460 Aleja. 1582 01:14:42,460 --> 01:14:48,570 >> Aleja: Poți scoate partea fiecărui pixel care denotă roșu. 1583 01:14:48,570 --> 01:14:49,730 Și apoi - 1584 01:14:49,730 --> 01:14:50,730 un fel de? 1585 01:14:50,730 --> 01:14:51,860 >> JASON Hirschhorn: OK. 1586 01:14:51,860 --> 01:14:54,460 Astfel încât să ia din partea fiecărui pixeli, care denotă roșu. 1587 01:14:54,460 --> 01:14:57,234 Asta-i aproape, dar nu toate de ea. 1588 01:14:57,234 --> 01:14:59,780 >> STUDENT 76: Ei bine, nu e moduri diferite de a face acest lucru. 1589 01:14:59,780 --> 01:14:59,870 >> JASON Hirschhorn: OK. 1590 01:14:59,870 --> 01:15:03,070 Dă-mi un fel. 1591 01:15:03,070 --> 01:15:08,240 >> STUDENT 76: Scoate toate roșu, și apoi sublinia albastru și verde. 1592 01:15:08,240 --> 01:15:10,010 >> JASON Hirschhorn: OK. 1593 01:15:10,010 --> 01:15:11,830 Deci, având în vedere aceste două moduri - 1594 01:15:11,830 --> 01:15:15,210 se pare ca și cum am da un pixel, se are un nivel de roșu, albastru și verde. 1595 01:15:15,210 --> 01:15:19,350 Vrem să schimbăm nivelurile relative ale roșu, albastru și verde, în funcție de 1596 01:15:19,350 --> 01:15:20,740 pe acel pixel. 1597 01:15:20,740 --> 01:15:28,380 În cazul în care în acest cod ar trebui să ne schimbăm relativă roșu, albastru și verde 1598 01:15:28,380 --> 01:15:29,720 niveluri de un pixel. 1599 01:15:29,720 --> 01:15:30,600 După ce l-am citit - 1600 01:15:30,600 --> 01:15:32,520 inainte de a le scrie? 1601 01:15:32,520 --> 01:15:34,564 Dă-mi numărul liniei. 1602 01:15:34,564 --> 01:15:35,950 >> STUDENȚI MULTE: 83. 1603 01:15:35,950 --> 01:15:37,320 >> JASON Hirschhorn: 83. 1604 01:15:37,320 --> 01:15:38,570 Deci, chiar aici. 1605 01:15:38,570 --> 01:15:40,830 1606 01:15:40,830 --> 01:15:45,710 De roman sau film polițist, codul de care aveți nevoie pentru a scriere ar trebui să meargă bine acolo. 1607 01:15:45,710 --> 01:15:47,640 Și asta e singura codul aveți nevoie pentru a scrie. 1608 01:15:47,640 --> 01:15:51,520 Pentru că, așa cum am auzit, tot ce trebuie să faceți este să schimbați aceste albastru relativă, 1609 01:15:51,520 --> 01:15:54,420 nivelurile de roșu și verde din fiecare pixel. 1610 01:15:54,420 --> 01:15:58,250 >> Ai citit-o în, și acum ești O să-l scrie. 1611 01:15:58,250 --> 01:16:03,100 Cum pot obține - dacă am avea acest lucru numita triplu, chiar aici, și este de 1612 01:16:03,100 --> 01:16:04,570 tip RGBTRIPLE - 1613 01:16:04,570 --> 01:16:08,650 bine, dacă ne-am uitat în bmp.h, ceea ce este RGBTRIPLE? 1614 01:16:08,650 --> 01:16:11,450 1615 01:16:11,450 --> 01:16:12,700 >> STUDENT 77: Este un struct. 1616 01:16:12,700 --> 01:16:17,440 1617 01:16:17,440 --> 01:16:18,900 >> JASON Hirschhorn: RGBTRIPLE este o struct. 1618 01:16:18,900 --> 01:16:22,330 Vedem că chiar aici. 1619 01:16:22,330 --> 01:16:26,600 Și așa, dacă am vrut să accesul, să zicem, nivel roșu de struct, cum fac eu 1620 01:16:26,600 --> 01:16:30,005 accesa nivelul roșu de acest struct? 1621 01:16:30,005 --> 01:16:37,280 >> [CLASA murmure] 1622 01:16:37,280 --> 01:16:38,530 >> STUDENT 78: RGBTRIPLE.rgbtred? 1623 01:16:38,530 --> 01:16:47,250 1624 01:16:47,250 --> 01:16:48,856 >> JASON Hirschhorn: Este corect? 1625 01:16:48,856 --> 01:16:53,040 >> STUDENT 79: Ar trebui să fie triplu punct, în loc de RGBTRIPLE dot? 1626 01:16:53,040 --> 01:16:54,120 >> JASON Hirschhorn: Triple. 1627 01:16:54,120 --> 01:16:56,700 Triplă este variabila locală, așa aici, nu exista nici indicii aici. 1628 01:16:56,700 --> 01:16:58,400 Deci, vom folosi doar notația punct. 1629 01:16:58,400 --> 01:17:00,480 Acest lucru va da-mi nivelul de roșu. 1630 01:17:00,480 --> 01:17:06,180 Dacă vreau să-l schimbe, doar am stabilit l egal cu ceva diferit. 1631 01:17:06,180 --> 01:17:13,190 Deci, din nou, aceasta linie de cod de acces această variabilă în interiorul acestui struct, și 1632 01:17:13,190 --> 01:17:15,070 putem stabili la ceva nou. 1633 01:17:15,070 --> 01:17:20,040 >> Astfel de roman sau film polițist, din nou, acest lucru este, în esență, ceea ce trebuie să facem. 1634 01:17:20,040 --> 01:17:21,170 Foarte simplu. 1635 01:17:21,170 --> 01:17:25,020 Doar schimba unele niveluri relative, și acest lucru este în cazul în care codul merge. 1636 01:17:25,020 --> 01:17:27,720 Redimensionarea, pe de altă parte, este un pic mai complicată. 1637 01:17:27,720 --> 01:17:30,900 De fapt, redimensionare este, probabil, mai delicate parte din această problemă set. 1638 01:17:30,900 --> 01:17:32,720 Avem trei minute pentru a merge peste el. 1639 01:17:32,720 --> 01:17:34,910 >> Dar, din nou, am scris deja cele mai multe din acest cod, așa că am 1640 01:17:34,910 --> 01:17:36,500 ar trebui să fie destul de familiar. 1641 01:17:36,500 --> 01:17:40,750 Care sunt unele lucruri pe care vrem să le facem în redimensiona, dacă ați citit pe 1642 01:17:40,750 --> 01:17:43,470 set problemă? 1643 01:17:43,470 --> 01:17:45,290 Dacă le dai la mine, ne-am poate vorbi despre ele. 1644 01:17:45,290 --> 01:17:47,340 Care sunt unele lucruri pe care vrem să facem? 1645 01:17:47,340 --> 01:17:47,970 >> STUDENT 80: vertical - 1646 01:17:47,970 --> 01:17:52,360 deci va trebui să-l redimensiona orizontal, dar vertical redimensiona, de asemenea? 1647 01:17:52,360 --> 01:17:58,475 >> JASON Hirschhorn: Deci, dacă suntem dat un pixel, și vrem să-l redimensiona cu un 1648 01:17:58,475 --> 01:18:03,460 factor de doi, acum trebuie să fie redimensionată orizontal și redimensionate 1649 01:18:03,460 --> 01:18:05,220 vertical. 1650 01:18:05,220 --> 01:18:06,640 Asta face sens? 1651 01:18:06,640 --> 01:18:07,060 Da. 1652 01:18:07,060 --> 01:18:09,300 Așa că, probabil, cea mai mare provocare. 1653 01:18:09,300 --> 01:18:10,430 Și vom vorbi despre asta într-o secundă. 1654 01:18:10,430 --> 01:18:11,065 Da. 1655 01:18:11,065 --> 01:18:15,270 >> STUDENT 81: Modul în care m-am gândit de ea sa ai nevoie de imprimare-l - 1656 01:18:15,270 --> 01:18:15,490 >> JASON Hirschhorn: Așteaptă. 1657 01:18:15,490 --> 01:18:17,580 Nu ne spune ce-ai făcut. 1658 01:18:17,580 --> 01:18:20,620 Vom vorbi în logica. 1659 01:18:20,620 --> 01:18:21,870 >> STUDENT 81: OK. 1660 01:18:21,870 --> 01:18:25,090 1661 01:18:25,090 --> 01:18:27,410 Care a fost problema? 1662 01:18:27,410 --> 01:18:28,892 >> JASON Hirschhorn: Tu doar a ridicat mâna. 1663 01:18:28,892 --> 01:18:31,600 Nu a fost nici o îndoială. 1664 01:18:31,600 --> 01:18:32,520 Lasă-mă să-l prezinte. 1665 01:18:32,520 --> 01:18:34,560 Lasă-mă să discutăm asta pe scurt. 1666 01:18:34,560 --> 01:18:38,400 Deci, am un pixel, vrem să reproduce-l, atât orizontal, cât și 1667 01:18:38,400 --> 01:18:39,360 vertical. 1668 01:18:39,360 --> 01:18:48,920 Deci, în mod ideal, ceea ce facem noi aici este, ne-am citit în pixel noastră, l-am scrie 1669 01:18:48,920 --> 01:18:51,690 cu toate acestea de multe ori. 1670 01:18:51,690 --> 01:18:54,720 >> Dar apoi ne-am truc aici, pentru că apoi ne-o dorim pentru a trece la 1671 01:18:54,720 --> 01:18:57,660 linia următoare și scrie-l la la începutul liniei următoare. 1672 01:18:57,660 --> 01:19:02,960 Deci, dacă vrem să reproducă atât orizontal și vertical, ceea ce este 1673 01:19:02,960 --> 01:19:05,050 o modalitate buna de a face acest lucru - 1674 01:19:05,050 --> 01:19:06,780 unul bun, deși pentru a face asta? 1675 01:19:06,780 --> 01:19:11,950 Așa că nu trebuie să caute în mod constant în jurul fișier nostru pentru a plasa lucrurile. 1676 01:19:11,950 --> 01:19:14,360 >> Această întrebare nu ar putea avea sens, dar cred că o 1677 01:19:14,360 --> 01:19:15,800 răspundă la o va ajuta. 1678 01:19:15,800 --> 01:19:17,210 >> STUDENT 82: Creeaza un array? 1679 01:19:17,210 --> 01:19:20,090 >> JASON Hirschhorn: Deci, să ne gândim de fiecare fișier ca un rând. 1680 01:19:20,090 --> 01:19:22,550 Să ne gândim în termeni de rânduri. 1681 01:19:22,550 --> 01:19:26,670 Dacă avem prima noastră linie de mic noastră imagine, putem face acel rând 1682 01:19:26,670 --> 01:19:30,640 într-un rând mare de la o imagine mare, și apoi reproduce acel rând toate acestea, 1683 01:19:30,640 --> 01:19:34,250 de multe ori de care are nevoie pentru a fi reproduse, mai degrabă decât a merge pixel cu pixel, 1684 01:19:34,250 --> 01:19:37,260 care devine confuz atunci când de-a face cu fișiere. 1685 01:19:37,260 --> 01:19:38,730 >> Pentru că dacă am avea - 1686 01:19:38,730 --> 01:19:41,260 Sunt în criză de spațiu. 1687 01:19:41,260 --> 01:19:46,490 În cazul în care acest lucru este fișier noastră, și avem ca un pixel acolo, și vrem să-l puneți 1688 01:19:46,490 --> 01:19:49,840 chiar acolo, mai avem unele lucruri care au nevoie pentru a merge acolo atunci când suntem 1689 01:19:49,840 --> 01:19:51,450 scris și crearea de noi nostru dosar - 1690 01:19:51,450 --> 01:19:53,250 fișier nostru care este de două ori mai mare. 1691 01:19:53,250 --> 01:19:56,820 >> Dar e foarte greu cu funcții de fișiere pentru a sări în jurul valorii de la noi linii de 1692 01:19:56,820 --> 01:20:00,260 cum ar fi faptul că, și apoi du-te înapoi aici și a pus lucrurile acolo. 1693 01:20:00,260 --> 01:20:04,500 Este aproape imposibil de a face ceva cum ar fi faptul că, în cazul în care are sens. 1694 01:20:04,500 --> 01:20:10,180 Deci, dacă ne gândim în termeni de rânduri, putem ia rândul nostru, și apoi pune-l - 1695 01:20:10,180 --> 01:20:11,720 replica rânduri pe verticală. 1696 01:20:11,720 --> 01:20:15,860 >> Și asta este modul în care avem de a face cu redimensionare vertical nu orizontal. 1697 01:20:15,860 --> 01:20:18,810 Că a fost un fel de rapid, și un pic confuz. 1698 01:20:18,810 --> 01:20:22,375 Din păcate, timpul nostru este sus. 1699 01:20:22,375 --> 01:20:27,340 Eu voi sta afară pentru cei dintre voi de aici care au întrebări cu privire la 1700 01:20:27,340 --> 01:20:30,500 set de probleme, inclusiv recupera. 1701 01:20:30,500 --> 01:20:32,320 >> Deci, haideți să amâne pentru moment. 1702 01:20:32,320 --> 01:20:34,480 Și din nou, dacă aveți întrebări, putem discuta afară. 1703 01:20:34,480 --> 01:20:38,294