1 00:00:00,000 --> 00:00:07,810 2 00:00:07,810 --> 00:00:09,840 >> JASON Hirschhorn: Benvingut, tothom, fins a la setmana 6. 3 00:00:09,840 --> 00:00:14,790 Estic content de veure'ls a tots vius i ben després Qüestionari 0, perquè sé que 4 00:00:14,790 --> 00:00:15,810 era una mica aspre. 5 00:00:15,810 --> 00:00:18,370 Però, per sort, gràcies a tots va fer increïblement bé. 6 00:00:18,370 --> 00:00:21,680 I el que és meravellós. 7 00:00:21,680 --> 00:00:25,840 Si estàs en la meva secció, li he donat més de fer una còpia dels seus exàmens ja. 8 00:00:25,840 --> 00:00:28,050 >> Un parell de vostès, em vaig a trobar amb després de la classe. 9 00:00:28,050 --> 00:00:32,360 I si vostè és un estudiant de l'extensió i la no ha rebut el seu concurs de nou 10 00:00:32,360 --> 00:00:35,490 però, el TF està probablement treballant en això i classificació, i el recuperarà 11 00:00:35,490 --> 00:00:36,490 a la brevetat. 12 00:00:36,490 --> 00:00:39,650 Així que els meus estudiants d'extensió que són veient ara mateix - en viu amb sort - 13 00:00:39,650 --> 00:00:42,880 Vaig a aconseguir els seus qüestionaris poc així. 14 00:00:42,880 --> 00:00:45,670 >> La nostra agenda per avui és el següent. 15 00:00:45,670 --> 00:00:50,170 En primer lloc, anem a repassar alguns recursos que CS50 proporciona. 16 00:00:50,170 --> 00:00:54,590 Anem a repassar Qüestionari 0 següent, i Vaig a respondre a qualsevol pregunta que ningú 17 00:00:54,590 --> 00:00:57,360 té al voltant de problemes concrets. 18 00:00:57,360 --> 00:01:02,050 I després, anirem més de / S d'arxius i problemes 5. 19 00:01:02,050 --> 00:01:07,360 Aquests dos últims temes es duran a el gruix de la secció actual. 20 00:01:07,360 --> 00:01:11,680 >> Poso aquesta llista cada setmana com un recordatori a tots vostès, però de nucli 21 00:01:11,680 --> 00:01:14,650 secció, només tenim 90 minuts - que no són capaços de cobrir tot el que jo 22 00:01:14,650 --> 00:01:16,280 li encantaria cobrir per a vostès. 23 00:01:16,280 --> 00:01:21,170 Però tenim un munt de recursos per dibuixar sobre com s'arriba a saber 24 00:01:21,170 --> 00:01:24,000 el material i el treball a través de el seu problema es posa. 25 00:01:24,000 --> 00:01:30,810 >> Un recordatori que tinc en línia un text quadre, creat per tu per omplir si 26 00:01:30,810 --> 00:01:33,250 tenir cap reacció per a mi, tant positius com 27 00:01:33,250 --> 00:01:35,180 constructiva, sobre la secció. 28 00:01:35,180 --> 00:01:38,600 Aquesta URL es troba aquí baix. 29 00:01:38,600 --> 00:01:43,250 Així que si us plau, prengui un moment si vostè té qualsevol retroalimentació, ja sigui durant la secció, 30 00:01:43,250 --> 00:01:48,030 o després, o després de veure el vídeo en línia, per donar-me la seva reacció. 31 00:01:48,030 --> 00:01:52,100 Realment estima tots i cada un d'ells. 32 00:01:52,100 --> 00:01:55,730 >> Així que he estat tenint converses petites amb una gran part del meu 33 00:01:55,730 --> 00:01:59,350 estudiants durant tota la setmana - el lliuro proves d'esquena, parlant de la 34 00:01:59,350 --> 00:02:01,480 Per descomptat, en veure com ho està fent. 35 00:02:01,480 --> 00:02:05,120 I un tema ha sorgit una i més de parlar de - a 36 00:02:05,120 --> 00:02:05,660 en particular - 37 00:02:05,660 --> 00:02:07,710 butlletins de problemes. 38 00:02:07,710 --> 00:02:13,090 I he encapsulat aquest tema en el tauler en aquest moment. 39 00:02:13,090 --> 00:02:16,630 >> En essència, hi ha una diferència entre l'encesa en una cosa que és 40 00:02:16,630 --> 00:02:19,590 es fa correctament i una mica el que es fa bé. 41 00:02:19,590 --> 00:02:22,920 La majoria de la gent ha estat fent fantàstic en termes de correcció - 42 00:02:22,920 --> 00:02:25,460 De 5 o 4 sobre tots els conjunts de processadors. 43 00:02:25,460 --> 00:02:27,930 La majoria de la gent s'està aquells tot el temps. 44 00:02:27,930 --> 00:02:31,150 >> No obstant això, només perquè vostè ha fet alguna cosa bé no vol dir que has 45 00:02:31,150 --> 00:02:34,450 fet una cosa tan elegant, o de manera eficient, o la forma més neta que 46 00:02:34,450 --> 00:02:35,270 podria haver fet. 47 00:02:35,270 --> 00:02:36,790 I això és el que el disseny - 48 00:02:36,790 --> 00:02:39,230 i, en menor grau, l'estil - 49 00:02:39,230 --> 00:02:40,450 eixos són per. 50 00:02:40,450 --> 00:02:45,130 Així que tots vostès estic pressionant, i altres FF estan empenyent vostès, no només al seu torn 51 00:02:45,130 --> 00:02:48,320 en el que és correcte, però alhora en les coses que són codificades també. 52 00:02:48,320 --> 00:02:53,060 >> Si no ho fa innecessari que els bucles, No tornar a calcular les variables si 53 00:02:53,060 --> 00:02:53,800 vostè no ha de fer-ho. 54 00:02:53,800 --> 00:02:58,520 Per exemple, mirant de nou a conjunt de problemes 4, quan la col · locació dels maons a la 55 00:02:58,520 --> 00:03:03,070 pantalla, cada fila - tots els maons en una fila donada té la mateixa coordenada i - 56 00:03:03,070 --> 00:03:04,390 la mateixa altura de coordenades. 57 00:03:04,390 --> 00:03:07,930 >> De manera que la coordenada i no necessitaven es calcularà a l'interior de l'interior 58 00:03:07,930 --> 00:03:11,070 niat bucle FOR que probablement va utilitzar posar els maons a la pantalla. 59 00:03:11,070 --> 00:03:14,030 Només cal calcular cada vegada que va encendre una fila, o 60 00:03:14,030 --> 00:03:15,200 mogut cap avall una fila. 61 00:03:15,200 --> 00:03:19,760 Així que dir que si hi ha 10 maons en una fila, cada maó pot tenir el mateix 62 00:03:19,760 --> 00:03:22,260 coordenada, i que la coordenada només es pot calcular 63 00:03:22,260 --> 00:03:23,550 un cop per a tots aquells. 64 00:03:23,550 --> 00:03:27,810 >> No necessita ser calculat 10 temps, ni tampoc aquesta necessitat càlcul 65 00:03:27,810 --> 00:03:30,220 a ocórrer en l'actual funció de trucada - 66 00:03:30,220 --> 00:03:33,020 la nova crida a la funció gracked. 67 00:03:33,020 --> 00:03:37,820 Així que si això va ser una mica confús per vostè, més genèricament, les coses que 68 00:03:37,820 --> 00:03:40,730 no cal que passi cada vegada vas a través d'un llaç per no haurien de ser 69 00:03:40,730 --> 00:03:42,900 posar dins del bucle FOR, i no ha succeir cada vegada que vagi 70 00:03:42,900 --> 00:03:44,080 a través del bucle FOR. 71 00:03:44,080 --> 00:03:49,270 >> Un altre bon exemple de disseny que vam veure en la setmana 3 per 15, vostè podria mantenir 72 00:03:49,270 --> 00:03:50,500 pista del zero. 73 00:03:50,500 --> 00:03:53,600 Així que al inicialitzar el tauler, save - en una variable global, potser - 74 00:03:53,600 --> 00:03:56,140 la x i coordenada i del zero. 75 00:03:56,140 --> 00:03:57,520 I llavors cada vegada que - 76 00:03:57,520 --> 00:04:00,310 en la seva funció de moviment, cada vegada que facis un moviment encertat, s'actualitza la 77 00:04:00,310 --> 00:04:02,040 ubicació de la zero. 78 00:04:02,040 --> 00:04:06,240 >> Això li estalviarà haver de fer bucles for niats per mirar a través de la 79 00:04:06,240 --> 00:04:10,700 abordar cada vegada que en la seva funció de desplaçament i trobar el zero, o trobar la rajola, 80 00:04:10,700 --> 00:04:12,460 a continuació, comproveu el que hi ha al costat. 81 00:04:12,460 --> 00:04:16,329 En el seu lloc, vostè té la ubicació de la zero, vostè pot simplement mirar amunt, avall, 82 00:04:16,329 --> 00:04:21,160 i a l'esquerra i dreta de la mateixa, per trobar la rajola que estava buscant. 83 00:04:21,160 --> 00:04:24,970 >> Així que en termes dels programes que estem escriptura, mai no són prou grans 84 00:04:24,970 --> 00:04:28,580 que algunes d'aquestes decisions de disseny són realment va a obstaculitzar la seva 85 00:04:28,580 --> 00:04:31,670 programa o fer que s'executi més lentament, o potser es quedi sense memòria. 86 00:04:31,670 --> 00:04:35,030 Però seguim empenyent vostès escriure tan elegant i 87 00:04:35,030 --> 00:04:36,450 codi eficient possible. 88 00:04:36,450 --> 00:04:39,910 >> Així que si vostè acaba d'escriure les coses que tenen una significativament major 89 00:04:39,910 --> 00:04:44,660 àmbit d'aplicació, que s'escriurà amb bona dissenyar a més de ser correcta. 90 00:04:44,660 --> 00:04:46,300 Així que alguns de vosaltres té portat això. 91 00:04:46,300 --> 00:04:48,560 Això és una cosa que estem buscant - cosa que seguirem 92 00:04:48,560 --> 00:04:49,840 empènyer nois a. 93 00:04:49,840 --> 00:04:52,460 >> Si alguna vegada té alguna pregunta sobre la disseny del seu programa, no dubti en 94 00:04:52,460 --> 00:04:56,870 per arribar a mi, i estic feliç de caminar a través del seu programa amb vostè, 95 00:04:56,870 --> 00:05:01,320 i assenyalar alguns dels dissenys decisions que va prendre, i li donarà una mica de 96 00:05:01,320 --> 00:05:06,240 suggeriments sobre com fer que fins i tot millors decisions de disseny. 97 00:05:06,240 --> 00:05:08,870 >> Així que seguirem endavant a parlar de Prova 0. 98 00:05:08,870 --> 00:05:11,300 Abans de fer això, algú té alguna pregunta sobre el que 99 00:05:11,300 --> 00:05:14,252 He cobert fins ara? 100 00:05:14,252 --> 00:05:21,500 >> [Cruixit] 101 00:05:21,500 --> 00:05:22,750 >> JASON Hirschhorn: Set segons. 102 00:05:22,750 --> 00:05:23,250 D'acord. 103 00:05:23,250 --> 00:05:24,970 Anem a parlar de Prova 0 per una mica. 104 00:05:24,970 --> 00:05:26,700 La majoria de vostès tenen el seu concurs esquena de 0. 105 00:05:26,700 --> 00:05:29,820 Si no ho fa, és d'esperar recordes una mica. 106 00:05:29,820 --> 00:05:34,770 Però si vostè ha pres Qüestionari 0, llavors També tindrà accés al PDF en línia a 107 00:05:34,770 --> 00:05:35,890 les solucions de mostra. 108 00:05:35,890 --> 00:05:39,480 >> Algú té alguna pregunta abans de ens vam llançar en el material de la setmana sobre 109 00:05:39,480 --> 00:05:41,520 un problema particular en el concurs 0 - 110 00:05:41,520 --> 00:05:44,630 ¿Per què la resposta és el que és? 111 00:05:44,630 --> 00:05:47,255 Hi ha algú confós sobre alguna cosa? 112 00:05:47,255 --> 00:05:50,230 Fins i tot si vostè té el problema de la dreta, però simplement li agradaria que li expliqui una mica 113 00:05:50,230 --> 00:05:52,640 més, estic feliç de fer-ho ara. 114 00:05:52,640 --> 00:05:57,800 >> Així que li he demanat a vostès per vingui preparat amb una mica de 115 00:05:57,800 --> 00:05:59,440 pensaments sobre el concurs 0. 116 00:05:59,440 --> 00:06:02,660 Llavors, qui li agradaria que ens començar amb una pregunta 117 00:06:02,660 --> 00:06:04,655 comentar sobre el concurs 0? 118 00:06:04,655 --> 00:06:07,435 119 00:06:07,435 --> 00:06:10,410 >> [Cruixit PAPER] 120 00:06:10,410 --> 00:06:11,470 >> JASON Hirschhorn: No tothom fer perfectament. 121 00:06:11,470 --> 00:06:12,720 Així que sé [riu] 122 00:06:12,720 --> 00:06:15,950 ha d'haver algunes preguntes Qüestionari sobre 0. 123 00:06:15,950 --> 00:06:27,940 124 00:06:27,940 --> 00:06:28,590 D'acord. 125 00:06:28,590 --> 00:06:29,210 Sí 126 00:06:29,210 --> 00:06:29,600 Ompica. 127 00:06:29,600 --> 00:06:30,520 >> OMPICA: Nombre 10. 128 00:06:30,520 --> 00:06:33,560 >> JASON Hirschhorn: Nombre 10. 129 00:06:33,560 --> 00:06:35,400 Quin era el número 10? 130 00:06:35,400 --> 00:06:35,840 >> OMPICA: The - 131 00:06:35,840 --> 00:06:36,420 >> JASON Hirschhorn: I haven't - 132 00:06:36,420 --> 00:06:37,670 >> OMPICA: include - 133 00:06:37,670 --> 00:06:40,060 134 00:06:40,060 --> 00:06:42,180 >> JASON Hirschhorn: Nombre 10 era de vuit per i - i escriure vuit a? 135 00:06:42,180 --> 00:06:42,980 >> OMPICA: Si. 136 00:06:42,980 --> 00:06:43,630 >> JASON Hirschhorn: OK. 137 00:06:43,630 --> 00:06:47,390 Així que una altra pregunta que podria tenir preguntar va ser premonitori sóc? 138 00:06:47,390 --> 00:06:48,630 La resposta és sí. 139 00:06:48,630 --> 00:06:52,060 A la secció abans de la prova, li vaig preguntar vostès per codificar tant Sterling i 140 00:06:52,060 --> 00:06:52,980 vuit a i. 141 00:06:52,980 --> 00:06:54,770 Tots dos es va passar a aparèixer en el qüestionari. 142 00:06:54,770 --> 00:06:57,510 Així que espero, que va pagar atenció a això. 143 00:06:57,510 --> 00:07:02,520 >> I si ho haguessis fet, llavors vostè hauria de probablement fet bé en els dos. 144 00:07:02,520 --> 00:07:06,030 Però vuit a i, en realitat no ens Codi a classe, però va ser, de nou, 145 00:07:06,030 --> 00:07:07,500 preguntar en el qüestionari. 146 00:07:07,500 --> 00:07:13,270 Així que un parell de coses a tenir assenyalar en codificar vuit a i. 147 00:07:13,270 --> 00:07:17,320 El primer, per la pregunta, era que vostè necessita per comprovar si la cadena 148 00:07:17,320 --> 00:07:20,300 era igual a nul. 149 00:07:20,300 --> 00:07:28,060 >> Un parell de persones van tractar de comprovar més endavant al programa si s abraçadora i era - 150 00:07:28,060 --> 00:07:30,940 de manera que un caràcter específic en què string - era igual a nul. 151 00:07:30,940 --> 00:07:35,600 Però recordeu, que és essencialment nul - És bo pensar en 152 00:07:35,600 --> 00:07:39,100 null com un punter zero - un punter a zero - 153 00:07:39,100 --> 00:07:40,920 en algun lloc de la memòria on mai es pot tenir accés. 154 00:07:40,920 --> 00:07:44,730 >> Així que si alguna cosa és igual a null, sabem que no s'ha inicialitzat, 155 00:07:44,730 --> 00:07:46,430 o no hi ha res allà. 156 00:07:46,430 --> 00:07:50,950 Així que s és un estel char, s suport d'i és un char. 157 00:07:50,950 --> 00:07:57,410 Així que té sentit comparar sa null, però no s abraçadora i en null. 158 00:07:57,410 --> 00:07:59,390 Però una vegada més - així que això va ser el primer que que se suposava que fer - 159 00:07:59,390 --> 00:08:03,510 assegureu-vos que vostè realment té una cadena real. 160 00:08:03,510 --> 00:08:08,020 >> A continuació, et volia anar a través d' cada caràcter de la cadena. 161 00:08:08,020 --> 00:08:12,500 I així, això seria com un suport de s I, per exemple, si i és l'iterador. 162 00:08:12,500 --> 00:08:17,250 I donar aquest caràcter, i obtenir el seu valor real. 163 00:08:17,250 --> 00:08:21,800 Vostè ho té emmagatzemat com un char, però el valor ASCII per al zero - 164 00:08:21,800 --> 00:08:23,010 zero com un personatge - 165 00:08:23,010 --> 00:08:25,450 no és en realitat el nombre enter zero. 166 00:08:25,450 --> 00:08:28,700 És algun altre número que pugui mirar cap amunt a la taula ASCII. 167 00:08:28,700 --> 00:08:30,790 >> Així que una manera de corregir perquè - probablement la millor manera per corregir 168 00:08:30,790 --> 00:08:33,760 que - es resta d'ell el valor del caràcter - 169 00:08:33,760 --> 00:08:35,140 zero com un caràcter. 170 00:08:35,140 --> 00:08:38,490 Cometa simple Així que menys, zero altra cometa simple. 171 00:08:38,490 --> 00:08:44,620 Això portarà el número que té com char, i fer-ho igual a 172 00:08:44,620 --> 00:08:46,720 el nombre com un nombre enter real. 173 00:08:46,720 --> 00:08:50,300 >> I que és molt similar a l'enfocament molta gent va prendre al 174 00:08:50,300 --> 00:08:52,800 problema conjunt 2, amb César i Viginere - 175 00:08:52,800 --> 00:08:55,160 aquestes xifres, quan es ells van ser rotant. 176 00:08:55,160 --> 00:08:59,210 Així que després que ho tens com un número de l' zero a nou, a continuació, - depenent 177 00:08:59,210 --> 00:09:02,750 a on va en el nombre final - que necessita per multiplicar 178 00:09:02,750 --> 00:09:04,120 per una potència de 10. 179 00:09:04,120 --> 00:09:07,340 >> Algunes persones es van traslladar de nou a la front, i multiplicat l'individu 180 00:09:07,340 --> 00:09:08,940 nombre per una potència de 10. 181 00:09:08,940 --> 00:09:11,160 Algunes persones es van traslladar de el front cap enrere - 182 00:09:11,160 --> 00:09:14,430 i així es va endur el més alt ordenar nombres primer - 183 00:09:14,430 --> 00:09:18,190 i salvaria els d'un variable de comptador global. 184 00:09:18,190 --> 00:09:20,880 I llavors cada vegada que a través de la DE llaç, multipliqui aquest gegant mundial 185 00:09:20,880 --> 00:09:25,640 contrarestar variable 10, per fer espai per al següent caràcter. 186 00:09:25,640 --> 00:09:28,750 >> Així que va ser una mica confús i sense jo escrivint a la pissarra. 187 00:09:28,750 --> 00:09:31,550 Però la solució de la mostra està disponible per a vostè. 188 00:09:31,550 --> 00:09:32,870 Però aquestes eren les coses grans que estàvem buscant. 189 00:09:32,870 --> 00:09:36,400 També una comprovació per assegurar-se que cada caràcter individual era de fet un 190 00:09:36,400 --> 00:09:39,780 caràcter entre zero i nou anys, i no algun altre personatge, igual que una A, 191 00:09:39,780 --> 00:09:41,160 per exemple. 192 00:09:41,160 --> 00:09:43,150 >> Aquestes eren les coses que estàvem buscant en aquesta pregunta. 193 00:09:43,150 --> 00:09:46,510 194 00:09:46,510 --> 00:09:47,980 Respon això a la seva pregunta? 195 00:09:47,980 --> 00:09:49,320 >> OMPICA: Si. 196 00:09:49,320 --> 00:09:50,240 >> JASON Hirschhorn: OK. 197 00:09:50,240 --> 00:09:53,940 Hi ha altres preguntes Qüestionari sobre 0? 198 00:09:53,940 --> 00:09:55,440 Què passa amb la compilació? 199 00:09:55,440 --> 00:09:56,740 Tothom la compilació correcta? 200 00:09:56,740 --> 00:09:58,370 No 201 00:09:58,370 --> 00:09:58,840 Hi havia un - 202 00:09:58,840 --> 00:10:01,010 [Rialles] 203 00:10:01,010 --> 00:10:03,265 Una pregunta sobre l' procés de compilació? 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 >> [Cruixit PAPER] 207 00:10:11,090 --> 00:10:11,520 >> JASON Hirschhorn: Si. 208 00:10:11,520 --> 00:10:11,700 Michael. 209 00:10:11,700 --> 00:10:14,140 >> MICHAEL: És el número 7 - a l'atzar? 210 00:10:14,140 --> 00:10:16,500 >> JASON Hirschhorn: Nombre 7. 211 00:10:16,500 --> 00:10:20,670 Número 7 era obtenir un nombre enter aleatori. 212 00:10:20,670 --> 00:10:21,110 Excel · lent. 213 00:10:21,110 --> 00:10:25,630 Així que et donen un nombre enter a i un b sencer, i vols un atzar 214 00:10:25,630 --> 00:10:28,710 nombre enter entre a i b. 215 00:10:28,710 --> 00:10:31,740 De fet, podem escriure aquest en el tauler, perquè aquest 216 00:10:31,740 --> 00:10:33,320 Era una línia de codi - 217 00:10:33,320 --> 00:10:34,390 una manera de fer-ho. 218 00:10:34,390 --> 00:10:37,810 >> Així que se'ns dóna com un Drand funció que podria utilitzar. 219 00:10:37,810 --> 00:10:38,820 I què fa Drand - 220 00:10:38,820 --> 00:10:40,290 suposant que ha estat cap de sèrie - 221 00:10:40,290 --> 00:10:42,316 el que no Drand tornar? 222 00:10:42,316 --> 00:10:44,840 >> MICHAEL: Un flotador entre 0,0 i 1,0. 223 00:10:44,840 --> 00:10:45,530 >> JASON Hirschhorn: Varis - si. 224 00:10:45,530 --> 00:10:47,910 Un nombre entre 0 i 1. 225 00:10:47,910 --> 00:10:51,760 I així hem B i A. 226 00:10:51,760 --> 00:10:55,480 I després tenim el nostre nombre aleatori entre 0 i 1 que ens ha donat Drand. 227 00:10:55,480 --> 00:11:01,480 228 00:11:01,480 --> 00:11:06,630 Algunes persones van intentar posar b, o b menys a, o alguna cosa dins dels 229 00:11:06,630 --> 00:11:07,960 parèntesi. 230 00:11:07,960 --> 00:11:11,210 Això significaria que són arguments d'aquesta funció. 231 00:11:11,210 --> 00:11:13,450 >> Drand no pren cap argument - com getString fa 232 00:11:13,450 --> 00:11:14,330 No prengui cap argument. 233 00:11:14,330 --> 00:11:16,600 Així que és només parin obertes, prop Parin - i que, en si, és 234 00:11:16,600 --> 00:11:17,330 la crida de funció. 235 00:11:17,330 --> 00:11:19,770 I això li dóna un nombre entre 0 i 1. 236 00:11:19,770 --> 00:11:22,820 Per descomptat, tenim tota una gamma que els nombres poden estar dins 237 00:11:22,820 --> 00:11:28,470 >> Diguem, si b és 10 i és 5, que realment vull un nombre amb un rang de 5. 238 00:11:28,470 --> 00:11:36,940 Així que el següent que hem de fer és multipliqui això pel rang b, menys un. 239 00:11:36,940 --> 00:11:40,380 Així que suposant que això multiplicat. 240 00:11:40,380 --> 00:11:42,590 I això ens donarà un nombre dins d'un rang donat. 241 00:11:42,590 --> 00:11:46,610 I aquest rang seleccionat de ser el diferència entre B menys un. 242 00:11:46,610 --> 00:11:50,030 >> I, finalment, que només vaig a donar des de - dir el rang entre b, almenys una 243 00:11:50,030 --> 00:11:52,520 és 5, això ens dóna una nombre de 0 a 5. 244 00:11:52,520 --> 00:11:56,000 Però si a és en realitat 5, hem d'impulsar aquest rang fins a on és 245 00:11:56,000 --> 00:12:01,380 en realitat suposa que, mitjançant l'addició d'una. 246 00:12:01,380 --> 00:12:02,580 Així que té la dreta de la lògica. 247 00:12:02,580 --> 00:12:03,745 I llavors, ¿tindria una altra pregunta? 248 00:12:03,745 --> 00:12:04,547 >> MICHAEL: No 249 00:12:04,547 --> 00:12:06,010 Em sento molt ximple en aquests moments. 250 00:12:06,010 --> 00:12:06,405 [Rialles] 251 00:12:06,405 --> 00:12:06,730 >> JASON Hirschhorn: No 252 00:12:06,730 --> 00:12:08,640 No es senti realment ximple. 253 00:12:08,640 --> 00:12:10,560 Un nombre de persones que va lluitar amb aquesta pregunta. 254 00:12:10,560 --> 00:12:13,920 I després, l'altra pregunta és, Drand, vostè ha dit, li dóna un flotador - 255 00:12:13,920 --> 00:12:14,940 retorna un float. 256 00:12:14,940 --> 00:12:18,020 Però aquesta funció realment va demanar per a un sencer sigui retornat. 257 00:12:18,020 --> 00:12:23,700 >> No ha de jugar aquesta carta de manera explícita a un nombre sencer, perquè aquests 258 00:12:23,700 --> 00:12:29,090 operacions es tracten com un tot surar - com un nombre de punt flotant. 259 00:12:29,090 --> 00:12:31,570 T'agrada aquesta voluntat - fins i tot si això és un nombre enter, aquesta voluntat 260 00:12:31,570 --> 00:12:32,890 s'ha de multiplicar correctament. 261 00:12:32,890 --> 00:12:34,000 Tota la multiplicació funcionarà. 262 00:12:34,000 --> 00:12:35,060 No cal per llançar aquí. 263 00:12:35,060 --> 00:12:36,480 De fet, vostè no ha de llançar. 264 00:12:36,480 --> 00:12:37,310 >> Això ho faria - 265 00:12:37,310 --> 00:12:40,750 si vol emetre un nombre això és entre 0 i 1 - 266 00:12:40,750 --> 00:12:42,680 un nombre a l'atzar, un punt flotant - 267 00:12:42,680 --> 00:12:47,850 llavors o bé ser només 0 o 1, de manera si no es perden tots els que la precisió. 268 00:12:47,850 --> 00:12:50,120 Però al final, quan torni, es posa automàticament 269 00:12:50,120 --> 00:12:51,620 enviar com un sencer. 270 00:12:51,620 --> 00:12:56,870 Així que vostè no ha de fer que tirant a tu mateix. 271 00:12:56,870 --> 00:13:00,810 >> Així que aquesta era la resposta a què es tracti, el número 7. 272 00:13:00,810 --> 00:13:02,190 Alguna altra pregunta sobre Qüestionari 0? 273 00:13:02,190 --> 00:13:03,300 Sí, Annie. 274 00:13:03,300 --> 00:13:05,050 >> ANNIE: Quan fem servir recursiu - 275 00:13:05,050 --> 00:13:07,850 quan fem servir bucles iteratius? 276 00:13:07,850 --> 00:13:10,210 >> JASON Hirschhorn: Quan vostè utilitza recursiu - de manera més general, la 277 00:13:10,210 --> 00:13:14,110 pros i els contres de la recursivitat front un enfocament iteratiu. 278 00:13:14,110 --> 00:13:17,110 Algú pot oferir un professional o una estafa? 279 00:13:17,110 --> 00:13:19,460 Per favor? 280 00:13:19,460 --> 00:13:20,140 No pot ningú. 281 00:13:20,140 --> 00:13:22,526 Qui pot oferir un professional o una estafa? 282 00:13:22,526 --> 00:13:26,963 >> [Cruixit PAPER] 283 00:13:26,963 --> 00:13:29,730 >> ESTUDIANT 1: recursiva és menys codificació - teclejar menys? 284 00:13:29,730 --> 00:13:33,170 >> JASON Hirschhorn: Així que en general, recursivitat especialment, una funció - 285 00:13:33,170 --> 00:13:35,750 o un algoritme com a fusió tipus - que es presta 286 00:13:35,750 --> 00:13:37,300 a un enfocament recursiu - 287 00:13:37,300 --> 00:13:40,710 podria ser més senzill per codificar de forma recursiva. 288 00:13:40,710 --> 00:13:43,940 I així més sentit fer-ho de forma recursiva. 289 00:13:43,940 --> 00:13:46,230 Així que seria un professional de la recursivitat. 290 00:13:46,230 --> 00:13:46,610 Altres? 291 00:13:46,610 --> 00:13:47,467 Sí? 292 00:13:47,467 --> 00:13:49,240 >> Estudiant 2: Amb per la recursivitat - 293 00:13:49,240 --> 00:13:50,940 Utilitza més memòria. 294 00:13:50,940 --> 00:13:52,200 >> JASON Hirschhorn: Llavors, la dreta. 295 00:13:52,200 --> 00:13:55,720 Una funció recursiva mantindrà afegint marcs de pila a la pila. 296 00:13:55,720 --> 00:13:59,690 Així que si vostè està treballant en un munt de nombres, i han de trucar a aquest 297 00:13:59,690 --> 00:14:02,560 funcionar molt, evidentment ocupen més memòria, mentre que 298 00:14:02,560 --> 00:14:05,810 un enfocament iteratiu posarà només un marc de pila a la pila, perquè 299 00:14:05,810 --> 00:14:08,420 tot passa dins d'una funció. 300 00:14:08,420 --> 00:14:11,010 >> Qualsevol altre pros i els contres? 301 00:14:11,010 --> 00:14:11,500 Sí 302 00:14:11,500 --> 00:14:12,550 >> ESTUDIANT 3: Pros de la recursivitat. 303 00:14:12,550 --> 00:14:15,950 No ha de determinar en avançar en el nombre de vegades que el 304 00:14:15,950 --> 00:14:17,660 codi havia de ser repetit. 305 00:14:17,660 --> 00:14:22,810 Vostè pot tenir un nombre predeterminat de vegades que vostè ha de repetir, llavors 306 00:14:22,810 --> 00:14:26,420 recursivitat és millor, perquè que es necessita aquest resultat. 307 00:14:26,420 --> 00:14:27,780 >> JASON Hirschhorn: Crec que això és cert. 308 00:14:27,780 --> 00:14:30,770 Però crec que en ambdós casos ho faria mai - 309 00:14:30,770 --> 00:14:33,290 vostè probablement obtenir alguna entrada de l'usuari. 310 00:14:33,290 --> 00:14:35,990 O aquesta funció tindria alguna entrada que determinaria el nombre de vegades que 311 00:14:35,990 --> 00:14:36,730 ha d'executar. 312 00:14:36,730 --> 00:14:39,520 Així que en general, no ho faries codificar - fins i tot en un enfocament iteratiu - how 313 00:14:39,520 --> 00:14:40,940 moltes vegades que bucle hauria de córrer. 314 00:14:40,940 --> 00:14:46,100 315 00:14:46,100 --> 00:14:48,670 >> Vas tenir una altra eres pensant, Annie? 316 00:14:48,670 --> 00:14:49,330 D'acord. 317 00:14:49,330 --> 00:14:51,650 Així que aquests són probablement els dos - 318 00:14:51,650 --> 00:14:54,370 el major pro i el major Amb per a una recursiva front 319 00:14:54,370 --> 00:14:57,080 un enfocament iteratiu. 320 00:14:57,080 --> 00:14:57,690 D'acord. 321 00:14:57,690 --> 00:14:59,465 Una mica més sobre Qüestionari 0? 322 00:14:59,465 --> 00:15:08,940 323 00:15:08,940 --> 00:15:09,920 >> Anem a passar. 324 00:15:09,920 --> 00:15:15,260 File I / O. Hi ha un meravellós curt aquesta setmana a l'arxiu d'E / S que s'espera 325 00:15:15,260 --> 00:15:19,270 vostè ha vist múltiples vegades, i admirat. 326 00:15:19,270 --> 00:15:22,910 Una gran quantitat de treball va ser en això, i no tinc sentit és increïblement servicial. 327 00:15:22,910 --> 00:15:25,740 També vaig incloure l'enllaç en aquesta diapositiva, en cas que vostè no ha tingut un 328 00:15:25,740 --> 00:15:29,160 oportunitat de veure-ho 10 vegades. 329 00:15:29,160 --> 00:15:35,280 >> Per tant, anem a repassar breument la principals passos per obrir i treballar 330 00:15:35,280 --> 00:15:38,400 amb els arxius i, a continuació anem a submergir-se en un problema de codificació abans de 331 00:15:38,400 --> 00:15:40,400 examinant el conjunt de problemes. 332 00:15:40,400 --> 00:15:44,330 Així que de nou, em vaig a posar això en la pantalla, però jo vaig a parlar de 333 00:15:44,330 --> 00:15:47,630 només un minut sobre el que estem fa aquí amb l'arxiu I/O-- 334 00:15:47,630 --> 00:15:49,090 Què significa això? 335 00:15:49,090 --> 00:15:55,280 >> Això significa que podem crear la nostra programes i, a continuació, tenir els nostres programes 336 00:15:55,280 --> 00:16:00,370 sortida, i no han fet cap impacte en el món exterior del nostre programa. 337 00:16:00,370 --> 00:16:04,630 Però quan vam començar a treballar amb arxius - tant la seva lectura i la creació de 338 00:16:04,630 --> 00:16:10,460 ells - podem tenir algun efecte sobre la món exterior del nostre programa. 339 00:16:10,460 --> 00:16:15,440 >> Igual que si Microsoft Word no va poder perquè tots els documents de Word, a continuació, 340 00:16:15,440 --> 00:16:18,710 una vegada que Microsoft Word deixar de fumar, la totalitat del seu treball s'ha anat, i seria 341 00:16:18,710 --> 00:16:19,740 realment inútil. 342 00:16:19,740 --> 00:16:23,620 Nosaltres, en última instància volem ser capaços de escriure programes que poden afectar la 343 00:16:23,620 --> 00:16:31,350 món que els envolta, tant mitjançant l'adopció de entrades complexes - en termes d'arxius i 344 00:16:31,350 --> 00:16:37,080 a través d'arxius, i també la creació interessant i sortides de pes - 345 00:16:37,080 --> 00:16:39,520 pel que fa als diferents tipus d'arxius. 346 00:16:39,520 --> 00:16:43,730 >> Així que és per això que estem començant a aprendre a treballar amb els arxius. 347 00:16:43,730 --> 00:16:47,080 Més específicament, què el que fem és la següent. 348 00:16:47,080 --> 00:16:47,680 És molt simple. 349 00:16:47,680 --> 00:16:51,530 Només hi ha un parell de passos, i que s'enumeren aquí en aquest codi. 350 00:16:51,530 --> 00:16:55,130 Així que anem a anar a través d' aquest codi línia per línia. 351 00:16:55,130 --> 00:16:57,630 >> En primer lloc, es veu ressaltat - 352 00:16:57,630 --> 00:17:01,330 quan es treballa amb un arxiu, independentment del tipus de fitxer es tracta, 353 00:17:01,330 --> 00:17:02,670 vostè necessita per obrir-lo. 354 00:17:02,670 --> 00:17:05,130 I és que amb una crida a fopen - 355 00:17:05,130 --> 00:17:05,950 aquí mateix. 356 00:17:05,950 --> 00:17:07,980 Inclogui el nom de l'arxiu. 357 00:17:07,980 --> 00:17:11,930 Si l'arxiu no està en el directori, o la carpeta on aquest programa 358 00:17:11,930 --> 00:17:15,910 vida, llavors també han d'incloure una ruta en la qual arxiu és. 359 00:17:15,910 --> 00:17:19,099 >> Anem a suposar que aquesta arxiu anomenat "text.txt" - 360 00:17:19,099 --> 00:17:24,220 un document de text simple - es troba a la mateixa carpeta que aquest programa és. 361 00:17:24,220 --> 00:17:26,859 Així que aquesta és una altra cosa a tenir en ment - que si voleu obrir un arxiu 362 00:17:26,859 --> 00:17:30,050 en un altre lloc, que realment necessita per incloure la seva ubicació. 363 00:17:30,050 --> 00:17:33,520 >> En segon lloc, vostè pot passar un argument a fopen, i això és el que vols fer 364 00:17:33,520 --> 00:17:34,620 amb l'arxiu. 365 00:17:34,620 --> 00:17:38,450 Hi ha tres arguments principals que vostè passarà a fopen. 366 00:17:38,450 --> 00:17:40,060 Qui em pot donar els tres? 367 00:17:40,060 --> 00:17:44,960 368 00:17:44,960 --> 00:17:47,130 Qui em pot donar un d'ells? 369 00:17:47,130 --> 00:17:48,130 Sí 370 00:17:48,130 --> 00:17:50,010 >> Estudiant 4: El nom de l'arxiu? 371 00:17:50,010 --> 00:17:50,440 >> JASON Hirschhorn: Ho sento. 372 00:17:50,440 --> 00:17:55,490 Tres arguments principals que es poden passar com a segon argument a fopen. 373 00:17:55,490 --> 00:17:57,060 Tens raó - el nom del fitxer és el primer argument. 374 00:17:57,060 --> 00:18:01,620 Però el segon argument a fopen són generalment tres cordes, i - si. 375 00:18:01,620 --> 00:18:02,210 S'allunya. 376 00:18:02,210 --> 00:18:03,490 >> ALLUNYA: A per annexats. 377 00:18:03,490 --> 00:18:06,840 >> JASON Hirschhorn: A, si vols annexar a un arxiu que ja existeix. 378 00:18:06,840 --> 00:18:07,810 >> ESTUDIANT 5: R per llegir. 379 00:18:07,810 --> 00:18:09,930 >> JASON Hirschhorn: A, si vulgui llegir des d'un arxiu. 380 00:18:09,930 --> 00:18:10,670 >> ESTUDIANT 6: W per escriptura. 381 00:18:10,670 --> 00:18:12,840 >> JASON Hirschhorn: I w, si vull escriure en un arxiu. 382 00:18:12,840 --> 00:18:17,570 Així que en aquest cas, estem escrivint a l'arxiu, pel que tenim w. 383 00:18:17,570 --> 00:18:22,360 L'obres, vostè també ha de guardar el arxiu en algun lloc, i això és amb la 384 00:18:22,360 --> 00:18:26,000 codi per al costat de la mà esquerra l'operador d'assignació - 385 00:18:26,000 --> 00:18:31,220 Estic creant un punter a un arxiu anomenat, en aquest cas, l'arxiu. 386 00:18:31,220 --> 00:18:36,070 >> Nosaltres no ens anem a preocupar del que esta tot en majúscules cosa FILE és. 387 00:18:36,070 --> 00:18:40,600 Només cal dir, que és un llarg corrent de zeros i uns. 388 00:18:40,600 --> 00:18:44,970 I així és com anem a operar i entendre-ho. 389 00:18:44,970 --> 00:18:47,300 >> El següent que hem de fer - i això és molt important - 390 00:18:47,300 --> 00:18:49,070 cada vegada que obri un arxiu - 391 00:18:49,070 --> 00:18:54,250 de fet, cada vegada que es diu a malloc, per exemple, i aconseguir una mica de memòria i tractar d' 392 00:18:54,250 --> 00:18:57,980 i guardar-lo en un punter, sempre que vulgueu comprovar per assegurar-se que que 393 00:18:57,980 --> 00:19:00,230 funció no va tornar nul. 394 00:19:00,230 --> 00:19:05,230 >> Així que en aquest cas, estem comprovant que fer Assegureu-vos que realment va obrir la 395 00:19:05,230 --> 00:19:10,230 arxiu correctament, i havia cap error en el nostre programa. 396 00:19:10,230 --> 00:19:15,160 A continuació, un cop hem comprovat per assegurar que tenim un arxiu de treball, podem 397 00:19:15,160 --> 00:19:18,520 escriure o llegir, o afegir a l'arxiu. 398 00:19:18,520 --> 00:19:24,270 En aquest cas, simplement estic imprimint una línia al fitxer. 399 00:19:24,270 --> 00:19:25,450 >> Com ho sé? 400 00:19:25,450 --> 00:19:27,990 Bé, estic fent servir aquesta funció anomenada fprintf. 401 00:19:27,990 --> 00:19:30,970 Totes les funcions que utilitzarà en escriure o llegir des de o 402 00:19:30,970 --> 00:19:34,950 la manipulació d'arxius serà similar al funcions que has vist abans, però 403 00:19:34,950 --> 00:19:38,420 començar amb la lletra F, de peu per a arxiu. 404 00:19:38,420 --> 00:19:43,440 I fprintf, a diferència de la nostra normal d'impressió aplicació, pren un argument addicional, 405 00:19:43,440 --> 00:19:47,800 i que és l'arxiu on es que voleu imprimir aquesta línia. 406 00:19:47,800 --> 00:19:50,640 >> Jo no tinc res a el dret dels ohai. 407 00:19:50,640 --> 00:19:52,860 Jo no tinc la tercera argument printf - 408 00:19:52,860 --> 00:19:57,030 o el segon argument printf, el tercer argument a fprintf, perquè 409 00:19:57,030 --> 00:19:59,480 no tenen els marcadors de posició aquí. 410 00:19:59,480 --> 00:20:01,070 No estic incloent qualsevol variable. 411 00:20:01,070 --> 00:20:06,070 Però, de nou, fprintf i tots aquests arxius funcions que operen amb arxius 412 00:20:06,070 --> 00:20:09,820 en general es necessitarà l'arxiu en la qual estan operant. 413 00:20:09,820 --> 00:20:15,960 >> Finalment, l'última cosa important a fer és tancar l'arxiu, igual que 414 00:20:15,960 --> 00:20:19,530 amb - sempre que malloc alguna cosa, volem alliberar, no sigui que ens 415 00:20:19,530 --> 00:20:22,730 tenir una pèrdua de memòria - que volem per tancar el nostre arxiu. 416 00:20:22,730 --> 00:20:28,180 Si aquest programa va sortir sense tancar l'arxiu, les probabilitats són gens aniria 417 00:20:28,180 --> 00:20:30,050 malament, especialment si es era un petit arxiu. 418 00:20:30,050 --> 00:20:35,020 >> Però sens dubte és un bon estil de codificació i practicar sempre tancament seu arxiu 419 00:20:35,020 --> 00:20:38,050 quan hagi acabat d'utilitzar-. 420 00:20:38,050 --> 00:20:43,630 Així que això és el bàsic d'arxiu d'E / S. Vostè probablement ha vist això abans, o 421 00:20:43,630 --> 00:20:45,710 vam veure que en aquest fantàstic curt. 422 00:20:45,710 --> 00:20:48,410 Algú té alguna pregunta, abans de entrem en una certa codificació pràctica 423 00:20:48,410 --> 00:20:51,800 problemes, sobre arxiu d'E / S o el passos jo ens vam anar de nou? 424 00:20:51,800 --> 00:21:00,198 425 00:21:00,198 --> 00:21:03,162 >> [PREM SOUNDS] 426 00:21:03,162 --> 00:21:04,150 >> JASON Hirschhorn: Té vostè té una pregunta, Avi? 427 00:21:04,150 --> 00:21:04,660 >> AVI: No 428 00:21:04,660 --> 00:21:04,740 >> JASON Hirschhorn: OK. 429 00:21:04,740 --> 00:21:06,746 Vaig a esperar un altre Set segons. 430 00:21:06,746 --> 00:21:07,590 [Rialles] 431 00:21:07,590 --> 00:21:08,620 Aquesta és una molt bona propina. 432 00:21:08,620 --> 00:21:10,750 Vostès simplement no els agrada fent preguntes. 433 00:21:10,750 --> 00:21:11,660 Això està bé. 434 00:21:11,660 --> 00:21:12,330 D'acord. 435 00:21:12,330 --> 00:21:17,620 Així que el nostre problema és la primera pràctica, estem duplicarà la funció de 436 00:21:17,620 --> 00:21:22,330 una eina de línia de comandes que probablement utilitzat abans - còpia - 437 00:21:22,330 --> 00:21:23,500 l'eina de còpia. 438 00:21:23,500 --> 00:21:28,050 Si escriu cp i després passar-ho 2 arguments en el seu terminal, pot 439 00:21:28,050 --> 00:21:28,980 copiar un fitxer. 440 00:21:28,980 --> 00:21:31,220 I això és el que per escriure en aquests moments. 441 00:21:31,220 --> 00:21:35,830 >> Així que de nou, la lectura fora d'aquesta diapositiva, em a escriure un programa que usa 442 00:21:35,830 --> 00:21:38,130 dos i només dos de línia d'ordres arguments - 443 00:21:38,130 --> 00:21:40,750 un arxiu d'origen i un arxiu de destinació - 444 00:21:40,750 --> 00:21:44,590 i copia el contingut de la font presentar a l'arxiu de destinació 445 00:21:44,590 --> 00:21:46,960 un byte a la vegada. 446 00:21:46,960 --> 00:21:48,510 Així que això és molt demanar. 447 00:21:48,510 --> 00:21:52,200 >> Una vegada més, un bon mètode per a això és No anar directament al codi C, però 448 00:21:52,200 --> 00:21:54,280 descompondre en un parell de passos. 449 00:21:54,280 --> 00:21:58,400 En primer lloc, pensar en la lògica - exactament el que t'estic demanant que facis - 450 00:21:58,400 --> 00:22:00,620 i comprendre la totalitat de la passos a aquest problema. 451 00:22:00,620 --> 00:22:04,410 No es troba en C, només en alguns pseudocodi, o fins i tot un model mental de 452 00:22:04,410 --> 00:22:06,030 Què està passant. 453 00:22:06,030 --> 00:22:10,050 >> A continuació, un cop tingui el pseudocodi baix, esbrinar com el pseudocodi 454 00:22:10,050 --> 00:22:14,600 mapes en les eines i les coses que hem après a usar en C. 455 00:22:14,600 --> 00:22:19,070 >> I, finalment, un cop tingui tot el que junts, pot codificar el problema. 456 00:22:19,070 --> 00:22:23,370 Prengui 5 a 10 minuts a treballar en aquest problema. 457 00:22:23,370 --> 00:22:25,800 Vaig a posar les instruccions una còpia de seguretat en un segon. 458 00:22:25,800 --> 00:22:27,990 I després anirem més el pseudocodi, i el codi 459 00:22:27,990 --> 00:22:29,230 que viuen com un grup. 460 00:22:29,230 --> 00:22:31,640 >> Si vostè té alguna pregunta mentre estàs treballant en això, no dubti en plantejar 461 00:22:31,640 --> 00:22:34,260 la mà, i vindré voltant i respondre-les. 462 00:22:34,260 --> 00:22:37,020 463 00:22:37,020 --> 00:22:39,330 >> ESTUDIANT 7: Puc lliscar un tros de paper? 464 00:22:39,330 --> 00:22:41,537 >> JASON Hirschhorn: Què passa? 465 00:22:41,537 --> 00:26:46,047 466 00:26:46,047 --> 00:26:48,043 >> [PREM SOUNDS] 467 00:26:48,043 --> 00:26:48,730 >> JASON Hirschhorn: OK. 468 00:26:48,730 --> 00:26:51,710 Anem a repassar el pseudocodi primer, i llavors jo et donaré un parell més 469 00:26:51,710 --> 00:26:52,960 minuts per acabar la codificació. 470 00:26:52,960 --> 00:26:55,540 471 00:26:55,540 --> 00:26:58,650 >> Qui vol començar em off amb la primera línia de 472 00:26:58,650 --> 00:27:00,030 pseudocodi per a aquesta funció? 473 00:27:00,030 --> 00:27:03,330 474 00:27:03,330 --> 00:27:05,740 >> ESTUDIANT 8: Revisi per assegurar-se que li van donar dos arxius. 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 si no ho som? 478 00:27:22,990 --> 00:27:25,974 >> ESTUDIANT 8: Jo tornaria 0. 479 00:27:25,974 --> 00:27:27,872 >> JASON Hirschhorn: Si tornem 0? 480 00:27:27,872 --> 00:27:30,182 >> ESTUDIANT 8: Retorn a - 481 00:27:30,182 --> 00:27:30,650 supressió. 482 00:27:30,650 --> 00:27:30,850 Ho sento. 483 00:27:30,850 --> 00:27:31,210 >> JASON Hirschhorn: Si. 484 00:27:31,210 --> 00:27:32,710 Probablement no és 0. 485 00:27:32,710 --> 00:27:34,680 A causa de 0 vol dir que tot estava bé. 486 00:27:34,680 --> 00:27:35,030 D'acord. 487 00:27:35,030 --> 00:27:36,730 Així que aquesta és la primera línia de pseudocodi. 488 00:27:36,730 --> 00:27:38,715 Qui té la segona línia de pseudocodi? 489 00:27:38,715 --> 00:27:40,630 >> ESTUDIANT 9: Obert tant als arxius? 490 00:27:40,630 --> 00:27:41,880 >> JASON Hirschhorn: Obriu els dos arxius. 491 00:27:41,880 --> 00:27:49,970 492 00:27:49,970 --> 00:27:50,920 ¿D'acord? 493 00:27:50,920 --> 00:27:52,850 >> ESTUDIANTS 10: Comprovi si l'arxiu és NULL? 494 00:27:52,850 --> 00:28:10,906 495 00:28:10,906 --> 00:28:12,580 >> JASON Hirschhorn: Comprovi que ni són NULL. 496 00:28:12,580 --> 00:28:15,800 Com acotació al marge - 497 00:28:15,800 --> 00:28:17,540 slash 0 - 498 00:28:17,540 --> 00:28:18,887 és que NULL? 499 00:28:18,887 --> 00:28:20,080 >> ESTUDIANTS 11: No 500 00:28:20,080 --> 00:28:21,190 >> JASON Hirschhorn: Això no és NULL. 501 00:28:21,190 --> 00:28:23,400 Això es diu el terminador NULL. 502 00:28:23,400 --> 00:28:25,580 En realitat s'escriu amb una sola l. 503 00:28:25,580 --> 00:28:28,580 Així que comprovar alguna cosa en contra d'això - això és en realitat un personatge - 504 00:28:28,580 --> 00:28:31,710 així que el revisar alguna cosa en contra que es no és igual que la comprovació per veure si 505 00:28:31,710 --> 00:28:32,690 és igual a NULL. 506 00:28:32,690 --> 00:28:34,100 >> I algunes persones - 507 00:28:34,100 --> 00:28:36,040 en les seves proves i el seu problema jocs - tenen la 508 00:28:36,040 --> 00:28:36,890 dos dels confosos. 509 00:28:36,890 --> 00:28:38,830 Però els dos d'ells són de fet diferents. 510 00:28:38,830 --> 00:28:40,220 Un acaba una cadena - 511 00:28:40,220 --> 00:28:43,210 un és un punter a 0. 512 00:28:43,210 --> 00:28:46,490 >> ESTUDIANTS 12: Per què no li tira a assegurar-se que els arxius no són NULL 513 00:28:46,490 --> 00:28:48,670 abans d'obrir-los? 514 00:28:48,670 --> 00:28:54,772 >> Així estalvia oberta: JASON Hirschhorn alguna cosa en aquest arxiu. 515 00:28:54,772 --> 00:28:57,780 I si tornes aquí - 516 00:28:57,780 --> 00:28:59,520 pel que aquesta línia - fopen - 517 00:28:59,520 --> 00:29:05,300 li donarà una adreça i botiga aquesta direcció en arxiu si funciona. 518 00:29:05,300 --> 00:29:07,650 Si no funciona, emmagatzemarà NULL - 519 00:29:07,650 --> 00:29:08,020 >> ESTUDIANTS 12: Oh. 520 00:29:08,020 --> 00:29:08,180 D'acord. 521 00:29:08,180 --> 00:29:08,500 Et tinc. 522 00:29:08,500 --> 00:29:09,050 >> JASON Hirschhorn: A l'arxiu. 523 00:29:09,050 --> 00:29:11,990 Així que no pots comprovar NULL abans que vostè els hagi obert. 524 00:29:11,990 --> 00:29:13,520 NULL significa alguna cosa que no va fer treballar correctament. 525 00:29:13,520 --> 00:29:18,030 526 00:29:18,030 --> 00:29:18,740 D'acord. 527 00:29:18,740 --> 00:29:22,590 Així que assegureu-vos de no dir? 528 00:29:22,590 --> 00:29:23,200 O? 529 00:29:23,200 --> 00:29:23,770 Què pensem? 530 00:29:23,770 --> 00:29:24,310 Anirem amb això. 531 00:29:24,310 --> 00:29:24,520 >> ESTUDIANTS 13: és. 532 00:29:24,520 --> 00:29:25,020 >> JASON Hirschhorn: És? 533 00:29:25,020 --> 00:29:25,930 Tampoc és? 534 00:29:25,930 --> 00:29:26,350 >> ESTUDIANTS 13: és. 535 00:29:26,350 --> 00:29:26,390 >> JASON Hirschhorn: OK. 536 00:29:26,390 --> 00:29:28,510 Sembla que tenim una mica de consens sobre això. 537 00:29:28,510 --> 00:29:30,520 Tampoc és NULL. 538 00:29:30,520 --> 00:29:32,250 Bé, la propera línia de pseudocodi. 539 00:29:32,250 --> 00:29:33,600 Qui no m'ha donat una línia encara? 540 00:29:33,600 --> 00:29:37,350 541 00:29:37,350 --> 00:29:38,295 Anem a esperar per a vostè. 542 00:29:38,295 --> 00:29:39,020 Sí 543 00:29:39,020 --> 00:29:40,895 >> ESTUDIANTS 14: Cal llegir des del primer arxiu? 544 00:29:40,895 --> 00:29:42,290 >> JASON Hirschhorn: OK. 545 00:29:42,290 --> 00:29:46,240 >> ESTUDIANTS 14: O utilitzem fscanf o cosa així com que el primer arxiu? 546 00:29:46,240 --> 00:29:50,650 >> JASON Hirschhorn: Així que volem llegir des del primer arxiu i - 547 00:29:50,650 --> 00:29:51,900 posarem que just aquí. 548 00:29:51,900 --> 00:30:00,600 549 00:30:00,600 --> 00:30:01,880 Llegir des de l'arxiu d'origen. 550 00:30:01,880 --> 00:30:05,370 I llavors, què fem després que llegir des de l'arxiu d'origen? 551 00:30:05,370 --> 00:30:06,620 Algú més? 552 00:30:06,620 --> 00:30:09,150 553 00:30:09,150 --> 00:30:12,190 >> ESTUDIANTS 15: Escriure en l'arxiu de destinació? 554 00:30:12,190 --> 00:30:22,080 555 00:30:22,080 --> 00:30:25,620 >> JASON Hirschhorn: Us escrivim per l'arxiu de destinació, i - 556 00:30:25,620 --> 00:30:26,210 D'acord. 557 00:30:26,210 --> 00:30:30,030 Què més ens falta? 558 00:30:30,030 --> 00:30:32,460 Algú més que no m'ha donat un línia de codi però - de pseudocodi. 559 00:30:32,460 --> 00:30:33,510 Sí 560 00:30:33,510 --> 00:30:36,540 >> ESTUDIANTS 16: Potser sempre es pot comprovar si hi ha alguna cosa que llegir per, 561 00:30:36,540 --> 00:30:37,970 com la següent línia? 562 00:30:37,970 --> 00:30:39,550 Que són com la línia següent, veure si existeix. 563 00:30:39,550 --> 00:30:40,660 >> [ELECTRÒNICA BEEP] 564 00:30:40,660 --> 00:30:41,095 >> JASON Hirschhorn: Vaya. 565 00:30:41,095 --> 00:30:43,120 Aquesta és la meva programari de diari. 566 00:30:43,120 --> 00:30:43,580 Sí? 567 00:30:43,580 --> 00:30:44,960 >> ESTUDIANTS 16: així. 568 00:30:44,960 --> 00:30:48,940 >> JASON Hirschhorn: Així que donar a mi un cop més. 569 00:30:48,940 --> 00:30:51,640 >> ESTUDIANTS 16: Comproveu si hi ha sent una propera línia de la 570 00:30:51,640 --> 00:30:52,920 arxiu de font per llegir. 571 00:30:52,920 --> 00:30:53,500 >> JASON Hirschhorn: OK. 572 00:30:53,500 --> 00:30:56,060 Així que no estem llegint les línies - estaven llegint bytes aquí - 573 00:30:56,060 --> 00:30:57,590 però estàs en el correcte. 574 00:30:57,590 --> 00:31:00,040 Volem llegir i escriure fins no existeixen més bytes. 575 00:31:00,040 --> 00:31:11,430 576 00:31:11,430 --> 00:31:11,735 D'acord. 577 00:31:11,735 --> 00:31:16,940 I el que aquests han de ser realment sagnia una mica, perquè estan allà baix. 578 00:31:16,940 --> 00:31:17,470 Cert? 579 00:31:17,470 --> 00:31:20,620 Fins que no estem fora de bytes, que anem a llegir des de l'arxiu d'origen i escriure 580 00:31:20,620 --> 00:31:22,160 a l'arxiu de destinació. 581 00:31:22,160 --> 00:31:24,510 >> I llavors, què és l'últim línia de pseudocodi? 582 00:31:24,510 --> 00:31:26,380 Algú que no és donat mi alguna cosa encara. 583 00:31:26,380 --> 00:31:29,270 584 00:31:29,270 --> 00:31:30,260 >> ESTUDIANTS 17: Tanqueu els arxius? 585 00:31:30,260 --> 00:31:31,510 >> JASON Hirschhorn: Exactament. 586 00:31:31,510 --> 00:31:36,370 587 00:31:36,370 --> 00:31:37,450 Tancament els arxius. 588 00:31:37,450 --> 00:31:38,400 Així que aquí està el nostre pseudocodi. 589 00:31:38,400 --> 00:31:41,870 Vaig a posar el pseudocodi a gedit, i en un parell de minuts que 590 00:31:41,870 --> 00:31:44,626 xifrarà això junts. 591 00:31:44,626 --> 00:33:55,280 592 00:33:55,280 --> 00:33:56,000 >> D'acord. 593 00:33:56,000 --> 00:33:58,290 Anem a començar com un grup. 594 00:33:58,290 --> 00:33:59,940 Nishant, tinc el meu nou arxiu. 595 00:33:59,940 --> 00:34:01,130 Acabo d'obrir això. 596 00:34:01,130 --> 00:34:01,880 Untitled document 1. 597 00:34:01,880 --> 00:34:05,490 Què és el primer que he de fer? 598 00:34:05,490 --> 00:34:07,040 >> Nishant: Incloeu les biblioteques? 599 00:34:07,040 --> 00:34:08,219 >> JASON Hirschhorn: OK. 600 00:34:08,219 --> 00:34:11,070 Què biblioteques? 601 00:34:11,070 --> 00:34:17,570 >> Nishant: stdio.h, stdlib.h, crec? 602 00:34:17,570 --> 00:34:18,000 >> JASON Hirschhorn: OK. 603 00:34:18,000 --> 00:34:21,592 Què és stdlib per? 604 00:34:21,592 --> 00:34:23,010 >> Nishant: es va oblidar. 605 00:34:23,010 --> 00:34:23,219 >> JASON Hirschhorn: OK. 606 00:34:23,219 --> 00:34:24,179 Així incloure stdio. 607 00:34:24,179 --> 00:34:28,630 Què he de fer abans fins i tot de Començo codificació? 608 00:34:28,630 --> 00:34:29,710 >> Nishant: Escriu una capçalera? 609 00:34:29,710 --> 00:34:31,830 >> JASON Hirschhorn: Com Què he de fer perquè color? 610 00:34:31,830 --> 00:34:34,060 >> [VEUS interposant] 611 00:34:34,060 --> 00:34:35,040 >> Nishant: Com aconseguir que color? 612 00:34:35,040 --> 00:34:38,060 >> JASON Hirschhorn: Com Què he de fer per a la codificació de colors? 613 00:34:38,060 --> 00:34:38,570 >> Nishant: No sé. 614 00:34:38,570 --> 00:34:38,830 Oh. 615 00:34:38,830 --> 00:34:39,389 Desa. 616 00:34:39,389 --> 00:34:39,929 >> JASON Hirschhorn: Save. 617 00:34:39,929 --> 00:34:40,270 Sí 618 00:34:40,270 --> 00:34:41,760 Hauria guardar com un arxiu. C. 619 00:34:41,760 --> 00:34:46,239 Així que guardar a l'escriptori com cp.c. 620 00:34:46,239 --> 00:34:47,280 Sweet. 621 00:34:47,280 --> 00:34:51,199 I si vull aconseguir l'estil complet punts, el que hauria de fer-ho 622 00:34:51,199 --> 00:34:53,085 incloure en la part superior? 623 00:34:53,085 --> 00:34:58,390 >> Nishant: Es pot escriure el seu nom, nom del programa, i el propòsit 624 00:34:58,390 --> 00:34:59,640 del programa així? 625 00:34:59,640 --> 00:35:08,400 626 00:35:08,400 --> 00:35:10,040 >> JASON Hirschhorn: Té bona pinta. 627 00:35:10,040 --> 00:35:10,470 Excel · lent. 628 00:35:10,470 --> 00:35:12,940 Així que ens has començat perfectament. 629 00:35:12,940 --> 00:35:13,720 # Include - 630 00:35:13,720 --> 00:35:15,365 nosaltres també anem a escriure - 631 00:35:15,365 --> 00:35:30,050 632 00:35:30,050 --> 00:35:30,870 D'acord. 633 00:35:30,870 --> 00:35:33,520 Així que crec que tot el que estic llest per anar. 634 00:35:33,520 --> 00:35:38,003 Qui té la primera línia de codi per a mi - o les primeres línies de codi que 635 00:35:38,003 --> 00:35:41,280 que es necessita per satisfer la nostra primera comentar pseudocodi? 636 00:35:41,280 --> 00:35:41,985 Vostè. 637 00:35:41,985 --> 00:35:48,780 >> ESTUDIANTS 18: No hauria de ser int argc, i després char * argv? 638 00:35:48,780 --> 00:35:49,490 >> JASON Hirschhorn: Crec que tens raó. 639 00:35:49,490 --> 00:35:56,270 Anem a canviar-ho a int principals, parin obertes, int argc, coma, char * argv? 640 00:35:56,270 --> 00:35:57,150 Igual que? 641 00:35:57,150 --> 00:35:57,410 >> ESTUDIANTS 18: Suports. 642 00:35:57,410 --> 00:35:58,260 >> JASON Hirschhorn: Suports. 643 00:35:58,260 --> 00:35:59,860 Suport Obrir, tancar el parèntesi, prop dels pares. 644 00:35:59,860 --> 00:36:00,240 Perfect. 645 00:36:00,240 --> 00:36:02,160 Ara puc prendre arguments de línia de comandes. 646 00:36:02,160 --> 00:36:02,430 D'acord. 647 00:36:02,430 --> 00:36:04,250 Assegurar-nos que ens donen dos arxius. 648 00:36:04,250 --> 00:36:07,905 Vostè em pot donar això també. 649 00:36:07,905 --> 00:36:09,180 >> ESTUDIANTS 18: Si argc - 650 00:36:09,180 --> 00:36:11,060 aquest no és igual a 3. 651 00:36:11,060 --> 00:36:14,360 >> JASON Hirschhorn: Si parin obertes argc no és igual a 3? 652 00:36:14,360 --> 00:36:16,970 >> ESTUDIANTS 18: Sí, torni 1 ni res. 653 00:36:16,970 --> 00:36:17,460 >> JASON Hirschhorn: Ho sento. 654 00:36:17,460 --> 00:36:19,120 >> ESTUDIANTS 18: Retorn 1 ni res. 655 00:36:19,120 --> 00:36:20,270 >> JASON Hirschhorn: Volta 1. 656 00:36:20,270 --> 00:36:22,230 ¿D'acord? 657 00:36:22,230 --> 00:36:22,970 Gran. 658 00:36:22,970 --> 00:36:24,290 Obriu dos arxius. 659 00:36:24,290 --> 00:36:26,160 Qui pot ajudar-me a obrir els dos arxius? 660 00:36:26,160 --> 00:36:28,125 Qui no m'ha donat el codi encara? 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: Així que totes les tapes d'origen estrella F-I-L-E. 664 00:36:36,145 --> 00:36:39,390 665 00:36:39,390 --> 00:36:40,920 >> JASON Hirschhorn: Vaig per treure les vocals. 666 00:36:40,920 --> 00:36:41,570 Aquests són cool. 667 00:36:41,570 --> 00:36:42,716 És com Tumblr. 668 00:36:42,716 --> 00:36:44,610 >> ESTUDIANTS 18: igual a fopen - 669 00:36:44,610 --> 00:36:46,612 >> JASON Hirschhorn: igual a fopen? 670 00:36:46,612 --> 00:36:49,870 >> ESTUDIANTS 18: parin Obertes, argv, suport obert. 671 00:36:49,870 --> 00:36:50,055 >> JASON Hirschhorn: Espera. 672 00:36:50,055 --> 00:36:50,240 Ho sento. 673 00:36:50,240 --> 00:36:51,050 Parin a Obre. 674 00:36:51,050 --> 00:36:51,456 D'acord. 675 00:36:51,456 --> 00:36:53,080 >> ESTUDIANTS 18: així. 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 >> ESTUDIANTS 18: així. 679 00:36:56,140 --> 00:36:58,540 Argv parèntesi obert 1 - 680 00:36:58,540 --> 00:36:59,730 Sí 681 00:36:59,730 --> 00:37:06,470 I després coma i feu doble oberta cita, r, cometes dobles, 682 00:37:06,470 --> 00:37:08,250 prop parin, i coma. 683 00:37:08,250 --> 00:37:09,450 >> JASON Hirschhorn: Sweet. 684 00:37:09,450 --> 00:37:10,950 I què passa amb l'altre? 685 00:37:10,950 --> 00:37:16,030 >> ESTUDIANTS 18: Molt similar, però en lloc de S-R-C, que es diu que D-S-T. 686 00:37:16,030 --> 00:37:17,060 >> JASON Hirschhorn: Oo! 687 00:37:17,060 --> 00:37:17,772 M'agrada això. 688 00:37:17,772 --> 00:37:20,010 >> ESTUDIANTS 18: Només D-S-T. Sí 689 00:37:20,010 --> 00:37:23,057 I llavors argv, suport obert, 2. 690 00:37:23,057 --> 00:37:23,200 Sí 691 00:37:23,200 --> 00:37:26,720 I llavors w en lloc de r. 692 00:37:26,720 --> 00:37:27,620 Sí 693 00:37:27,620 --> 00:37:29,630 >> JASON Hirschhorn: Molt bé. 694 00:37:29,630 --> 00:37:31,360 Següent parell de línies. 695 00:37:31,360 --> 00:37:34,040 A més, si algú té coses a afegir a línies que hem fet, no dubti en 696 00:37:34,040 --> 00:37:35,690 afegir aquests també. 697 00:37:35,690 --> 00:37:37,520 Assegureu-vos que no és NULL. 698 00:37:37,520 --> 00:37:41,450 Qui em pot donar el codi que necessito satisfer aquesta línia de pseudocodi? 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 >> ARQUER: Si l'original és igual als iguals NULL o dst és igual als iguals 702 00:37:58,645 --> 00:38:04,590 NULL, llavors torna - 703 00:38:04,590 --> 00:38:07,130 704 00:38:07,130 --> 00:38:07,976 >> JASON Hirschhorn: Què? 705 00:38:07,976 --> 00:38:08,890 >> ARQUER: Return 2? 706 00:38:08,890 --> 00:38:09,760 >> JASON Hirschhorn: Return 2. 707 00:38:09,760 --> 00:38:14,400 Així que si src parin obert és igual a és igual a NULL, o - 708 00:38:14,400 --> 00:38:15,590 el que thing 's - pipa? 709 00:38:15,590 --> 00:38:16,346 Pipe? 710 00:38:16,346 --> 00:38:17,140 L'anomenarem canonada. 711 00:38:17,140 --> 00:38:22,340 Canonada, canonada, dst és igual als iguals NULL, retorna 2. 712 00:38:22,340 --> 00:38:23,900 ¿D'acord? 713 00:38:23,900 --> 00:38:26,060 Fins que no estem fora de bytes - 714 00:38:26,060 --> 00:38:29,820 quin tipus de saltem aquest pas de la part pseudocodi per anar a aquí. 715 00:38:29,820 --> 00:38:31,970 >> Però fins que estiguem fora de bytes - el que fa que el so té? 716 00:38:31,970 --> 00:38:34,680 Quin tipus d'estructura C - 717 00:38:34,680 --> 00:38:36,160 però jo no faig servir la paraula estructura, perquè anem a començar a utilitzar 718 00:38:36,160 --> 00:38:37,350 que en altres casos - 719 00:38:37,350 --> 00:38:39,495 però l'eina C sona això? 720 00:38:39,495 --> 00:38:39,970 >> ESTUDIANTS 19: Un bucle. 721 00:38:39,970 --> 00:38:40,980 >> JASON Hirschhorn: Un bucle. 722 00:38:40,980 --> 00:38:43,060 Sona com un bucle. 723 00:38:43,060 --> 00:38:49,670 Llavors, qui em pot donar la primera línia del codi del bucle aquí? 724 00:38:49,670 --> 00:38:56,320 725 00:38:56,320 --> 00:39:01,980 També pot triar quin tipus de bucle que desitja, si em dones 726 00:39:01,980 --> 00:39:03,215 aquesta línia de codi. 727 00:39:03,215 --> 00:39:04,150 Hi ha tres tipus. 728 00:39:04,150 --> 00:39:06,530 Et donen a escollir. 729 00:39:06,530 --> 00:39:08,080 Jo suggeriria una d'aquestes. 730 00:39:08,080 --> 00:39:08,410 Avi. 731 00:39:08,410 --> 00:39:09,230 Què vols? 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 és igual a zero. 735 00:39:15,180 --> 00:39:17,360 >> JASON Hirschhorn: OK. 736 00:39:17,360 --> 00:39:18,570 >> AVI: Aquesta part no estic segur. 737 00:39:18,570 --> 00:39:29,080 Però i és menor que la mida de la font d'estrella? 738 00:39:29,080 --> 00:39:31,128 No estic segur d'això. 739 00:39:31,128 --> 00:39:32,580 >> JASON Hirschhorn: OK. 740 00:39:32,580 --> 00:39:35,870 >> AVI: Com que vostè vol que el mida d'un arxiu, no? 741 00:39:35,870 --> 00:39:41,090 >> JASON Hirschhorn: Així que això probablement no ho farà ens donen la mida de l'actual 742 00:39:41,090 --> 00:39:43,010 arxiu en bytes. 743 00:39:43,010 --> 00:39:47,680 Llavors, què més podíem fer? 744 00:39:47,680 --> 00:39:48,810 Quin altre tipus de bucle? 745 00:39:48,810 --> 00:39:50,180 O hem de seguir amb el bucle PER? 746 00:39:50,180 --> 00:39:55,350 747 00:39:55,350 --> 00:39:57,900 >> ESTUDIANTS 20: Pots un bucle WHILE? 748 00:39:57,900 --> 00:40:01,350 I llavors, el que faria és you'd - 749 00:40:01,350 --> 00:40:03,930 perquè tenim un char * per a l'arxiu. 750 00:40:03,930 --> 00:40:07,950 Així que si només seguim incrementant que fins que ens anàvem a trobar el caràcter NULL en 751 00:40:07,950 --> 00:40:08,500 Al final de la mateixa? 752 00:40:08,500 --> 00:40:11,130 O no, és que no sé com funcionen els arxius? 753 00:40:11,130 --> 00:40:14,300 >> JASON Hirschhorn: Així podem mantenir incrementant el char * 754 00:40:14,300 --> 00:40:16,340 fins que trobem el NULL - 755 00:40:16,340 --> 00:40:18,580 >> ESTUDIANTS 20: mantenir Essencialment anar caràcter a caràcter fins que vam arribar a 756 00:40:18,580 --> 00:40:21,250 al final del fitxer. 757 00:40:21,250 --> 00:40:21,600 >> JASON Hirschhorn: Si. 758 00:40:21,600 --> 00:40:22,560 Així que això és el que volem fer. 759 00:40:22,560 --> 00:40:24,545 Volem seguir llegint, caràcter pel seu caràcter, fins a arribar a 760 00:40:24,545 --> 00:40:25,080 al final del fitxer. 761 00:40:25,080 --> 00:40:25,375 >> ESTUDIANTS 20: així. 762 00:40:25,375 --> 00:40:25,860 Trobar - 763 00:40:25,860 --> 00:40:28,540 Quin és el fi o el senyal de stop al final d'un arxiu de text. 764 00:40:28,540 --> 00:40:28,620 >> JASON Hirschhorn: OK. 765 00:40:28,620 --> 00:40:30,140 Així que quan arribem al final de l'arxiu - Com sabem que hem arribat 766 00:40:30,140 --> 00:40:33,200 el final d'un arxiu? 767 00:40:33,200 --> 00:40:34,710 Si estic trucant - 768 00:40:34,710 --> 00:40:35,910 així que anem a fer un pas enrere. 769 00:40:35,910 --> 00:40:37,550 Què és una funció? 770 00:40:37,550 --> 00:40:39,360 Anem a anar a aquesta línia aquí. 771 00:40:39,360 --> 00:40:40,630 Llegir des de l'arxiu d'origen. 772 00:40:40,630 --> 00:40:41,880 Qui em pot donar aquesta línia de codi? 773 00:40:41,880 --> 00:40:45,592 774 00:40:45,592 --> 00:40:47,590 >> ESTUDIANTS 21: fscanf? 775 00:40:47,590 --> 00:40:49,110 >> JASON Hirschhorn: fscanf. 776 00:40:49,110 --> 00:40:49,510 D'acord. 777 00:40:49,510 --> 00:40:52,240 Què passa si vull llegir, molt específicament, un byte? 778 00:40:52,240 --> 00:40:55,012 779 00:40:55,012 --> 00:40:56,860 >> ESTUDIANTS 21: No sé. 780 00:40:56,860 --> 00:40:57,110 >> JASON Hirschhorn: OK. 781 00:40:57,110 --> 00:40:59,380 Fins i tot més simple que fscanf - el que és una - 782 00:40:59,380 --> 00:41:01,890 Vull llegir d'un arxiu d'origen? 783 00:41:01,890 --> 00:41:03,720 Llegir d'un arxiu d'origen. 784 00:41:03,720 --> 00:41:04,850 Què és una funció - si. 785 00:41:04,850 --> 00:41:05,380 >> ESTUDIANTS 22: És fread? 786 00:41:05,380 --> 00:41:06,070 >> JASON Hirschhorn: Fread. 787 00:41:06,070 --> 00:41:07,550 Crec que seguirem amb que un per ara. 788 00:41:07,550 --> 00:41:10,380 789 00:41:10,380 --> 00:41:13,650 Quin tipus d'arguments això, pren fread? 790 00:41:13,650 --> 00:41:17,410 >> ESTUDIANTS 22: Probablement el tipus d'arxiu, i després ubicació a l'arxiu? 791 00:41:17,410 --> 00:41:19,550 >> JASON Hirschhorn: Què puc escriure aquí per esbrinar quin tipus d'arguments 792 00:41:19,550 --> 00:41:20,950 fread necessita? 793 00:41:20,950 --> 00:41:23,710 >> ESTUDIANTS MÚLTIPLES: Home fread. 794 00:41:23,710 --> 00:41:24,740 >> JASON Hirschhorn: Home fread i fwrite. 795 00:41:24,740 --> 00:41:25,980 Sembla que passar l'estona junts. 796 00:41:25,980 --> 00:41:29,589 Així fread pren quants arguments? 797 00:41:29,589 --> 00:41:30,920 >> ESTUDIANTS 23: Quatre. 798 00:41:30,920 --> 00:41:32,690 >> JASON Hirschhorn: Es necessita quatre arguments. 799 00:41:32,690 --> 00:41:41,100 Es necessita un punter, una mida, i que cosa, la qual cosa és rar, i alguns arxius. 800 00:41:41,100 --> 00:41:42,000 ¿D'acord? 801 00:41:42,000 --> 00:41:43,990 Anem a llegir sobre això aquí. 802 00:41:43,990 --> 00:41:49,370 "La funció fread llegeix n memb elements de dades, cadascun bytes de mida 803 00:41:49,370 --> 00:41:53,840 de longitud, des del flux apuntat per transmetre, emmagatzemant-los en la ubicació 804 00:41:53,840 --> 00:41:56,170 donada pel punter ". 805 00:41:56,170 --> 00:41:57,960 >> Així que quatre arguments. 806 00:41:57,960 --> 00:42:04,510 Per què no puc simplement copiar això, i enganxar-lo aquí. 807 00:42:04,510 --> 00:42:10,060 808 00:42:10,060 --> 00:42:10,770 D'acord. 809 00:42:10,770 --> 00:42:13,673 Llavors, qui pot començar a omplir aquests arguments per a mi? 810 00:42:13,673 --> 00:42:15,840 Avi. 811 00:42:15,840 --> 00:42:17,720 >> AVI: Tregui el buit. 812 00:42:17,720 --> 00:42:20,530 Posi simplement src. 813 00:42:20,530 --> 00:42:23,142 Tregui punter i l'estrella. 814 00:42:23,142 --> 00:42:26,102 Col · loqueu l'original. 815 00:42:26,102 --> 00:42:27,050 Llavors - 816 00:42:27,050 --> 00:42:28,500 >> JASON Hirschhorn: Així que vaig a deixar de Ets, perquè això és incorrecte. 817 00:42:28,500 --> 00:42:32,590 818 00:42:32,590 --> 00:42:34,710 Tens raó amb l'original, però on src hauria d'anar? 819 00:42:34,710 --> 00:42:35,960 >> [VEUS interposant] 820 00:42:35,960 --> 00:42:38,976 821 00:42:38,976 --> 00:42:41,610 >> JASON Hirschhorn: ha anar per aquí. 822 00:42:41,610 --> 00:42:43,790 Aquest és el src - nostra src és un tipus. 823 00:42:43,790 --> 00:42:44,610 Fem una ullada aquí. 824 00:42:44,610 --> 00:42:49,610 Això és demanar per a un tipus FILE *, que en realitat sol veure'ls així. 825 00:42:49,610 --> 00:42:57,630 Així que això és demanar un argument de Tipus d'arxiu * anomenat rierol que és l'original. 826 00:42:57,630 --> 00:42:58,480 ¿D'acord? 827 00:42:58,480 --> 00:43:00,410 >> Què mida de les coses fan volem llegir? 828 00:43:00,410 --> 00:43:03,340 Jo et vaig donar això en el descripció del problema. 829 00:43:03,340 --> 00:43:04,370 >> ESTUDIANTS 24: Un byte alhora. 830 00:43:04,370 --> 00:43:05,340 >> JASON Hirschhorn: Un byte. 831 00:43:05,340 --> 00:43:08,205 Què tan gran és un byte? 832 00:43:08,205 --> 00:43:11,642 La seva grandària és en bytes, així que el que puc posar aquí? 833 00:43:11,642 --> 00:43:12,910 >> ESTUDIANTS 25: Primer. 834 00:43:12,910 --> 00:43:14,730 >> JASON Hirschhorn: Primer. 835 00:43:14,730 --> 00:43:17,020 Dreta. 836 00:43:17,020 --> 00:43:19,940 La seva mida es troba a la unitat de bytes, de manera 1 és d'1 byte. 837 00:43:19,940 --> 00:43:22,284 Quants no vull llegir alhora. 838 00:43:22,284 --> 00:43:23,520 >> ESTUDIANTS 26: One? 839 00:43:23,520 --> 00:43:24,270 >> JASON Hirschhorn: Una de les coses. 840 00:43:24,270 --> 00:43:28,540 Vull llegir una cosa de mida 1, un mos a la vegada. 841 00:43:28,540 --> 00:43:32,110 I on ho poso, una vegada que el llegeixo? 842 00:43:32,110 --> 00:43:35,050 843 00:43:35,050 --> 00:43:36,510 >> ESTUDIANTS 27: Destinació? 844 00:43:36,510 --> 00:43:39,270 >> JASON Hirschhorn: Així que no puc posar en línia recta en destinació. 845 00:43:39,270 --> 00:43:40,800 >> ESTUDIANTS 28: Ets a posar en un tercer punter? 846 00:43:40,800 --> 00:43:41,780 >> ESTUDIANTS 27: Per la destinació. 847 00:43:41,780 --> 00:43:42,270 >> JASON Hirschhorn: OK. 848 00:43:42,270 --> 00:43:42,630 Sí 849 00:43:42,630 --> 00:43:46,820 >> ESTUDIANTS 29: Es pot declarar una cosa que actuar com un emmagatzematge temporal anterior. 850 00:43:46,820 --> 00:43:47,350 >> JASON Hirschhorn: OK. 851 00:43:47,350 --> 00:43:50,080 Dóna'm això. 852 00:43:50,080 --> 00:43:53,930 >> ESTUDIANTS 29: Un altre arxiu punter, potser? 853 00:43:53,930 --> 00:43:54,220 >> JASON Hirschhorn: OK. 854 00:43:54,220 --> 00:43:55,585 Així que aquesta és nul · estrelles - 855 00:43:55,585 --> 00:43:57,750 que és un tipus void estrella, pel que no fa ha de ser un apuntador d'arxiu. 856 00:43:57,750 --> 00:44:02,520 I si estic llegint un byte, on seria un bon lloc 857 00:44:02,520 --> 00:44:03,850 per emmagatzemar un byte? 858 00:44:03,850 --> 00:44:04,660 >> ESTUDIANTS 29: Una matriu? 859 00:44:04,660 --> 00:44:05,770 >> JASON Hirschhorn: Una matriu. 860 00:44:05,770 --> 00:44:07,730 D'acord. 861 00:44:07,730 --> 00:44:14,040 I què més és una cosa que és només la mida d'un byte? 862 00:44:14,040 --> 00:44:16,980 863 00:44:16,980 --> 00:44:18,060 >> ESTUDIANTS 30: Un char *? 864 00:44:18,060 --> 00:44:18,530 >> ESTUDIANTS 29: així. 865 00:44:18,530 --> 00:44:19,880 >> JASON Hirschhorn: Un char * no és d'un byte. 866 00:44:19,880 --> 00:44:20,440 >> ESTUDIANTS 29: A car. 867 00:44:20,440 --> 00:44:21,810 >> JASON Hirschhorn: Un char és un byte. 868 00:44:21,810 --> 00:44:22,920 Cert? 869 00:44:22,920 --> 00:44:26,740 Així que anem a trucar a aquest buffer és un genèric nom usat per a aquestes coses que emmagatzemar 870 00:44:26,740 --> 00:44:27,910 una cosa temporal. 871 00:44:27,910 --> 00:44:30,880 Així que va crear un memòria intermèdia. 872 00:44:30,880 --> 00:44:31,150 Cert? 873 00:44:31,150 --> 00:44:32,990 Però cal ser un void *. 874 00:44:32,990 --> 00:44:38,660 Així que potser tens raó, que ha de ser un tampó de mida 0. 875 00:44:38,660 --> 00:44:41,070 Així que emmagatzema un - 876 00:44:41,070 --> 00:44:41,280 dreta. 877 00:44:41,280 --> 00:44:43,560 >> Com que és aquí - Char buffer és un personatge, però 878 00:44:43,560 --> 00:44:45,110 això pren un void * - 879 00:44:45,110 --> 00:44:45,870 un punter. 880 00:44:45,870 --> 00:44:50,640 Així que jo podia fer això i ara tampó és un punter. 881 00:44:50,640 --> 00:44:53,214 Quina altra cosa podia fer? 882 00:44:53,214 --> 00:44:55,775 >> ESTUDIANTS 31: Poseu una estrella al costat de char. 883 00:44:55,775 --> 00:44:58,380 >> JASON Hirschhorn: vaig poder han creat char *. 884 00:44:58,380 --> 00:45:00,216 D'acord. 885 00:45:00,216 --> 00:45:03,131 Quin és altra cosa que podia fer? 886 00:45:03,131 --> 00:45:04,050 O anirem amb aquest. 887 00:45:04,050 --> 00:45:05,740 Char * buffer, així que el que Com puc posar aquí? 888 00:45:05,740 --> 00:45:08,290 889 00:45:08,290 --> 00:45:09,310 >> ESTUDIANTS 31: Buffer. 890 00:45:09,310 --> 00:45:10,560 >> JASON Hirschhorn: Buffer. 891 00:45:10,560 --> 00:45:12,640 892 00:45:12,640 --> 00:45:14,500 Buffer és un punter a un char. 893 00:45:14,500 --> 00:45:19,480 I en aquest lloc, estem posant un byte d'alguna cosa que hem llegit. 894 00:45:19,480 --> 00:45:19,980 Sí 895 00:45:19,980 --> 00:45:20,700 Avi. 896 00:45:20,700 --> 00:45:21,230 >> AVI: Només una pregunta ràpida. 897 00:45:21,230 --> 00:45:24,440 Vols malloc tampó? 898 00:45:24,440 --> 00:45:25,930 >> JASON Hirschhorn: Qui pot respondre a aquesta pregunta? 899 00:45:25,930 --> 00:45:30,210 >> ESTUDIANTS 32: Bé, en realitat no punt a res en aquest moment, de manera que - 900 00:45:30,210 --> 00:45:32,610 >> JASON Hirschhorn: Però fer volem malloc ell? 901 00:45:32,610 --> 00:45:35,600 >> ESTUDIANTS 32: Si es va a fer d'aquesta manera, suposo, sí, perquè el que es necessita 902 00:45:35,600 --> 00:45:36,990 un lloc perquè apunti a. 903 00:45:36,990 --> 00:45:38,350 >> JASON Hirschhorn: Tenim que malloc ell? 904 00:45:38,350 --> 00:45:40,580 >> ESTUDIANTS 33: Si vostè va a usar fora del bucle. 905 00:45:40,580 --> 00:45:42,524 >> JASON Hirschhorn: Anem a utilitzar-lo fora del bucle? 906 00:45:42,524 --> 00:45:44,392 >> ESTUDIANTS 34: Si. 907 00:45:44,392 --> 00:45:44,860 >> ESTUDIANTS 35: Espera. 908 00:45:44,860 --> 00:45:46,980 Volem declarar en el bucle fins més enllà? 909 00:45:46,980 --> 00:45:50,100 >> JASON Hirschhorn: Així que suposo que tenim alguns pseudo bucle WHILE aquí on estem 910 00:45:50,100 --> 00:45:51,950 tractant d'esbrinar, que no hem arribat a encara. 911 00:45:51,950 --> 00:45:54,710 912 00:45:54,710 --> 00:45:56,010 No necessitem malloc ella. 913 00:45:56,010 --> 00:45:59,310 Estem operant en el principal, que només va per ser utilitzat dins d'aquest bucle. 914 00:45:59,310 --> 00:46:00,540 No té per què existir , Fora d'aquesta. 915 00:46:00,540 --> 00:46:02,340 >> Així que pot ser una variable local. 916 00:46:02,340 --> 00:46:03,925 Vostè té un punter a una variable local. 917 00:46:03,925 --> 00:46:07,984 918 00:46:07,984 --> 00:46:09,590 >> ESTUDIANTS 36: Però no és apuntant a res. 919 00:46:09,590 --> 00:46:11,540 >> JASON Hirschhorn: No, no ho és inicialitzat a res. 920 00:46:11,540 --> 00:46:12,790 Però no anem a utilitzar també. 921 00:46:12,790 --> 00:46:15,300 Anem a posar alguna cosa en és la primera vegada que l'utilitzen. 922 00:46:15,300 --> 00:46:16,580 Així que sembla que està bé. 923 00:46:16,580 --> 00:46:17,780 Així que no necessitem malloc aquí. 924 00:46:17,780 --> 00:46:19,360 I crec que està bé com està. 925 00:46:19,360 --> 00:46:24,350 926 00:46:24,350 --> 00:46:25,790 D'acord. 927 00:46:25,790 --> 00:46:27,190 Tenim la línia fread. 928 00:46:27,190 --> 00:46:28,490 Anem a fer la següent línia. 929 00:46:28,490 --> 00:46:32,984 >> Si volem escriure en un arxiu, el que és una bona funció a utilitzar per fer això? 930 00:46:32,984 --> 00:46:33,770 >> ESTUDIANTS 37: fwrite? 931 00:46:33,770 --> 00:46:35,140 >> ESTUDIANTS 38: fprintf? 932 00:46:35,140 --> 00:46:36,010 >> JASON Hirschhorn: fprintf és un. 933 00:46:36,010 --> 00:46:37,260 Quin altre? 934 00:46:37,260 --> 00:46:37,680 >> ESTUDIANTS 39: fwrite. 935 00:46:37,680 --> 00:46:38,510 >> JASON Hirschhorn: fwrite. 936 00:46:38,510 --> 00:46:41,250 I per als nostres propòsits, fwrite, que hem vist aquí, és 937 00:46:41,250 --> 00:46:42,500 probablement la millor opció. 938 00:46:42,500 --> 00:46:51,970 939 00:46:51,970 --> 00:46:53,950 Porta quatre arguments també. 940 00:46:53,950 --> 00:46:57,570 Nishant, li pot donar me'ls arguments? 941 00:46:57,570 --> 00:47:00,570 >> Nishant: El primer curs d'una ser només tampó. 942 00:47:00,570 --> 00:47:02,210 >> JASON Hirschhorn: OK. 943 00:47:02,210 --> 00:47:06,752 >> Nishant: El segon només serà 1. 944 00:47:06,752 --> 00:47:09,510 En tercer lloc un va a ser 1. 945 00:47:09,510 --> 00:47:11,470 I el quart serà l'horari d'estiu. 946 00:47:11,470 --> 00:47:18,010 947 00:47:18,010 --> 00:47:19,550 >> JASON Hirschhorn: Algú té alguna pregunta sobre aquesta línia? 948 00:47:19,550 --> 00:47:28,370 949 00:47:28,370 --> 00:47:29,130 Això es veu bé. 950 00:47:29,130 --> 00:47:29,590 D'acord. 951 00:47:29,590 --> 00:47:34,250 Així que ara sembla que l'únic que estem falta - en realitat, anem a escriure 952 00:47:34,250 --> 00:47:35,090 aquesta última línia. 953 00:47:35,090 --> 00:47:36,300 Tancament els arxius. 954 00:47:36,300 --> 00:47:38,880 Qui pot acabar amb nosaltres a l'escriptura aquestes dues últimes línies? 955 00:47:38,880 --> 00:47:39,120 Sí 956 00:47:39,120 --> 00:47:39,850 Ho sentim, com et dius? 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 després destí fclose. 960 00:47:47,560 --> 00:47:52,430 >> JASON Hirschhorn: fclose, parin oberta, src, prop parin, punt i coma. 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 ¿Si? 964 00:47:58,090 --> 00:48:01,710 >> LUCY: Obrir parèntesi, dst i després per punt i coma. 965 00:48:01,710 --> 00:48:02,520 >> JASON Hirschhorn: Molt bé. 966 00:48:02,520 --> 00:48:04,338 I què he de incloure al final? 967 00:48:04,338 --> 00:48:05,210 >> LUCY: Retorna 0. 968 00:48:05,210 --> 00:48:05,570 >> JASON Hirschhorn: Retorna 0. 969 00:48:05,570 --> 00:48:06,820 He de fer-ho? 970 00:48:06,820 --> 00:48:10,560 971 00:48:10,560 --> 00:48:12,590 Només una pregunta. 972 00:48:12,590 --> 00:48:14,957 Hem de incloure la rendibilitat 0? 973 00:48:14,957 --> 00:48:16,240 >> ESTUDIANTS MÚLTIPLES: No 974 00:48:16,240 --> 00:48:16,430 >> JASON Hirschhorn: No 975 00:48:16,430 --> 00:48:18,090 Inici ho fa automàticament si s'arriba a la final. 976 00:48:18,090 --> 00:48:20,580 Però crec que és bo incloure de forma explícita. 977 00:48:20,580 --> 00:48:23,860 Sobretot quan estem tornant una altra coses al llarg del programa. 978 00:48:23,860 --> 00:48:24,810 D'acord. 979 00:48:24,810 --> 00:48:26,230 Això és el que ens falta - 980 00:48:26,230 --> 00:48:28,520 MENTRE què? 981 00:48:28,520 --> 00:48:31,630 Qui pot pensar en alguna - 982 00:48:31,630 --> 00:48:35,240 té un cert sentit del que les coses podria entrar aquí? 983 00:48:35,240 --> 00:48:37,350 Fins i tot si és només en alguns pseudocodi com el llenguatge? 984 00:48:37,350 --> 00:48:41,330 >> Què som en realitat - el que Què volem anar fins? 985 00:48:41,330 --> 00:48:41,980 Sí, Lucy. 986 00:48:41,980 --> 00:48:43,240 >> LUCY: El final de l'arxiu. 987 00:48:43,240 --> 00:48:44,990 >> JASON Hirschhorn: El final de l'arxiu. 988 00:48:44,990 --> 00:48:49,280 Llavors, què vol vostè dir amb fins d'arxiu? 989 00:48:49,280 --> 00:48:50,955 >> LUCY: Quan arribi a la final de l'arxiu, per. 990 00:48:50,955 --> 00:48:51,240 >> JASON Hirschhorn: OK. 991 00:48:51,240 --> 00:48:53,460 Així que una vegada que arribem al final de l'arxiu. 992 00:48:53,460 --> 00:48:56,893 Com sabem si hem arribat el final de l'arxiu? 993 00:48:56,893 --> 00:48:59,900 >> ESTUDIANTS 40: Crec memòria intermèdia s'establirà en NULL. 994 00:48:59,900 --> 00:49:01,885 >> ESTUDIANTS 41: Buffer es declara dins del bucle. 995 00:49:01,885 --> 00:49:03,670 >> JASON Hirschhorn: Així que vostè pensa memòria intermèdia s'estableix a NULL. 996 00:49:03,670 --> 00:49:05,850 Per què hauria de memòria intermèdia s'estableix a NULL? 997 00:49:05,850 --> 00:49:10,420 >> ESTUDIANTS 40: Perquè quan fread, vostè està tractant de posar 998 00:49:10,420 --> 00:49:13,528 res en la memòria tampó. 999 00:49:13,528 --> 00:49:13,980 >> JASON Hirschhorn: OK. 1000 00:49:13,980 --> 00:49:15,550 Així que vostè està pensant fread - 1001 00:49:15,550 --> 00:49:19,000 quan hem arribat al final de la arxiu, el que es fread farà? 1002 00:49:19,000 --> 00:49:21,230 Crec que aquesta és la qüestió el que hem de esbrinar. 1003 00:49:21,230 --> 00:49:21,960 Què fa fread? 1004 00:49:21,960 --> 00:49:25,640 ¿Posa NULL en tampó o Què fer altra cosa? 1005 00:49:25,640 --> 00:49:27,510 Com podem esbrinar el que fa? 1006 00:49:27,510 --> 00:49:28,190 >> ESTUDIANTS 42: Home. 1007 00:49:28,190 --> 00:49:28,810 >> JASON Hirschhorn: Home. 1008 00:49:28,810 --> 00:49:32,280 Així que donem una ullada per aquí. 1009 00:49:32,280 --> 00:49:34,000 Valor de retorn. 1010 00:49:34,000 --> 00:49:39,620 En cas d'èxit, fread i fwrite tornar el nombre d'articles llegits o escrits. 1011 00:49:39,620 --> 00:49:43,700 Aquest nombre és igual al nombre de bytes transferit només quan la mida és 1. 1012 00:49:43,700 --> 00:49:47,780 Si es produeix un error, o l'extrem de la s'aconsegueix arxiu, el valor de retorn és un 1013 00:49:47,780 --> 00:49:51,490 nombre d'elements a curt o 0. 1014 00:49:51,490 --> 00:49:57,860 >> Així que per als nostres propòsits, si arriba fread al final del fitxer, i llegeix des 1015 00:49:57,860 --> 00:50:02,100 al final del fitxer, no hi ha res a l'esquerra per llegir, què tornarà? 1016 00:50:02,100 --> 00:50:03,290 >> ESTUDIANTS 43: Zero? 1017 00:50:03,290 --> 00:50:04,540 >> JASON Hirschhorn: Què? 1018 00:50:04,540 --> 00:50:05,300 >> ESTUDIANTS 43: Zero? 1019 00:50:05,300 --> 00:50:05,690 >> JASON Hirschhorn: Zero. 1020 00:50:05,690 --> 00:50:06,940 Es tornarà a zero. 1021 00:50:06,940 --> 00:50:09,360 1022 00:50:09,360 --> 00:50:13,010 Així que sabem que fread, quan hem arribat al final del fitxer, que està passant 1023 00:50:13,010 --> 00:50:13,690 per tornar a zero. 1024 00:50:13,690 --> 00:50:17,460 Com podem utilitzar això al nostre favor? 1025 00:50:17,460 --> 00:50:21,733 >> AVI: Pot declarar una variable fora del bucle de trucada de verificació. 1026 00:50:21,733 --> 00:50:27,040 Si el control és igual a - 1027 00:50:27,040 --> 00:50:28,190 per ara - un. 1028 00:50:28,190 --> 00:50:28,920 >> JASON Hirschhorn: OK. 1029 00:50:28,920 --> 00:50:38,050 >> AVI: I llavors vostè pot posar un IF declaració de la dreta després de fread dient que si 1030 00:50:38,050 --> 00:50:42,600 fread és igual a zero - 1031 00:50:42,600 --> 00:50:43,850 No 1032 00:50:43,850 --> 00:50:46,002 1033 00:50:46,002 --> 00:50:47,252 >> JASON Hirschhorn: Qui pot ajudar a Avi? 1034 00:50:47,252 --> 00:50:49,690 1035 00:50:49,690 --> 00:50:52,410 >> AVI: Quin és el valor retornat per fread? 1036 00:50:52,410 --> 00:50:54,060 >> JASON Hirschhorn: Acabem se'n va anar per dalt d'això. 1037 00:50:54,060 --> 00:50:55,450 >> AVI: Com es representa això? 1038 00:50:55,450 --> 00:50:57,190 >> JASON Hirschhorn: Així que torna - anem a mirar cap amunt aquí - retorna una 1039 00:50:57,190 --> 00:50:59,340 size_t, que és essencialment un nombre sencer. 1040 00:50:59,340 --> 00:51:02,240 1041 00:51:02,240 --> 00:51:03,410 Per tant, retorna un enter. 1042 00:51:03,410 --> 00:51:05,160 I en el nostre cas, ho farà retorna 1 o 0 - 1043 00:51:05,160 --> 00:51:08,760 1 si digués una cosa - un byte, i 0 si hem arribat al final. 1044 00:51:08,760 --> 00:51:13,560 1045 00:51:13,560 --> 00:51:16,450 Així que si fread - 1046 00:51:16,450 --> 00:51:16,855 ¿Si? 1047 00:51:16,855 --> 00:51:20,330 >> ESTUDIANTS 45: No es pot simplement posar la plena fread (tampó, 1, 1, SRC) al 1048 00:51:20,330 --> 00:51:21,660 while? 1049 00:51:21,660 --> 00:51:26,510 >> JASON Hirschhorn: Així que vostè proposa fent això en allà? 1050 00:51:26,510 --> 00:51:27,600 >> [VEUS interposant] 1051 00:51:27,600 --> 00:51:29,520 >> JASON Hirschhorn: Espera. 1052 00:51:29,520 --> 00:51:30,885 Així que estem lliurant d'això. 1053 00:51:30,885 --> 00:51:33,300 Així que vostè està proposant posar fread en allà? 1054 00:51:33,300 --> 00:51:35,457 Què hem també moure si vols fer això? 1055 00:51:35,457 --> 00:51:36,740 >> ESTUDIANTS 45: El buffer exterior. 1056 00:51:36,740 --> 00:51:38,110 >> JASON Hirschhorn: Hauríem també moure això cap a fora aquí. 1057 00:51:38,110 --> 00:51:41,700 >> ESTUDIANTS 45: Però que constantment moure cap endavant? 1058 00:51:41,700 --> 00:51:42,950 >> [VEUS interposant] 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 Així que això és el que Okshar proposar. 1062 00:51:50,570 --> 00:51:51,930 Creem el nostre buffer. 1063 00:51:51,930 --> 00:51:57,020 Ens fread MENTRE, llavors cridem fwrite. 1064 00:51:57,020 --> 00:51:59,760 Els pensaments sobre això? 1065 00:51:59,760 --> 00:52:04,050 >> ESTUDIANTS 46: La meva única pregunta és, ho faria que en realitat executa la comanda fread? 1066 00:52:04,050 --> 00:52:06,175 >> JASON Hirschhorn: Molt bona pregunta. 1067 00:52:06,175 --> 00:52:11,050 Quan vostè està posant una crida a la funció a l'interior d'una condició, que fa 1068 00:52:11,050 --> 00:52:12,300 crida a la funció executar? 1069 00:52:12,300 --> 00:52:15,760 1070 00:52:15,760 --> 00:52:17,770 Hem vist exemples d'això abans. 1071 00:52:17,770 --> 00:52:24,900 1072 00:52:24,900 --> 00:52:25,660 Cert? 1073 00:52:25,660 --> 00:52:26,125 >> ESTUDIANTS 46: OK. 1074 00:52:26,125 --> 00:52:26,590 Sí 1075 00:52:26,590 --> 00:52:30,140 Així ho fa executar. 1076 00:52:30,140 --> 00:52:31,790 >> JASON Hirschhorn: Hem vist coses així abans, on tenim una 1077 00:52:31,790 --> 00:52:33,550 crida de funció dins d'una condició. 1078 00:52:33,550 --> 00:52:35,540 ¿S'executa aquesta crida de funció? 1079 00:52:35,540 --> 00:52:36,350 Sí 1080 00:52:36,350 --> 00:52:37,410 Així que la resposta és sí. 1081 00:52:37,410 --> 00:52:41,010 Aquesta crida a la funció s'executarà. 1082 00:52:41,010 --> 00:52:42,418 Però de nou, és el que volem? 1083 00:52:42,418 --> 00:52:49,250 1084 00:52:49,250 --> 00:52:52,204 >> Quin és una manera que poguéssim esbrinar si això és el que volem? 1085 00:52:52,204 --> 00:52:53,470 >> ESTUDIANTS MÚLTIPLES: Executar això? 1086 00:52:53,470 --> 00:52:54,460 >> JASON Hirschhorn: Podríem executar-lo. 1087 00:52:54,460 --> 00:52:57,500 Però abans de fer això, podríem També raonar a través d'aquest. 1088 00:52:57,500 --> 00:52:57,920 Si - 1089 00:52:57,920 --> 00:53:01,920 diguem que tenim un byte a la nostra arxiu, anem a arribar a aquí, 1090 00:53:01,920 --> 00:53:02,660 anem a arribar a aquest codi. 1091 00:53:02,660 --> 00:53:03,620 Això executarà. 1092 00:53:03,620 --> 00:53:07,780 fread retornarà un byte i emmagatzemar-lo en la memòria intermèdia. 1093 00:53:07,780 --> 00:53:11,290 I això va a avaluar a 1, dret, després del seu retorn gener. 1094 00:53:11,290 --> 00:53:12,640 >> Així, mentre que 1. 1095 00:53:12,640 --> 00:53:15,325 Significa això que el codi dins El bucle while s'executarà? 1096 00:53:15,325 --> 00:53:15,453 >> ESTUDIANTS 47: així. 1097 00:53:15,453 --> 00:53:16,040 És cert. 1098 00:53:16,040 --> 00:53:16,290 >> JASON Hirschhorn: Si. 1099 00:53:16,290 --> 00:53:17,490 1 és vertadera. 1100 00:53:17,490 --> 00:53:18,240 No és 0. 1101 00:53:18,240 --> 00:53:20,360 Així que el codi dins d'aquí s'executarà. 1102 00:53:20,360 --> 00:53:22,300 Així que anem a escriure això. 1103 00:53:22,300 --> 00:53:25,340 Anem a passar de nou a aquest línia una vegada més. 1104 00:53:25,340 --> 00:53:26,850 Ara que tenim - 1105 00:53:26,850 --> 00:53:28,550 estem en el final del nostre arxiu. 1106 00:53:28,550 --> 00:53:30,980 Llegim al final del nostre arxiu, perquè només tenia un byte en el mateix. 1107 00:53:30,980 --> 00:53:34,270 >> Fread retorna 0, botigues alguna cosa en tampó. 1108 00:53:34,270 --> 00:53:35,890 Sincerament, no sé què s'emmagatzema en la memòria intermèdia. 1109 00:53:35,890 --> 00:53:38,380 Probablement podríem mirar cap amunt per veure el que fa. 1110 00:53:38,380 --> 00:53:40,130 Això, sincerament, no ho sé. 1111 00:53:40,130 --> 00:53:43,090 No sabem a qui li importa el que s'emmagatzema en tampó? 1112 00:53:43,090 --> 00:53:44,010 Però no tornarà 0. 1113 00:53:44,010 --> 00:53:45,440 I es MENTRE 0 executar? 1114 00:53:45,440 --> 00:53:49,950 1115 00:53:49,950 --> 00:53:51,180 >> MENTRE 0 no s'executi. 1116 00:53:51,180 --> 00:53:54,030 Així que anem a passar per aquí. 1117 00:53:54,030 --> 00:53:58,870 Així que tindrem una votació a mà alçada si aquest és el codi que hem de córrer, o si 1118 00:53:58,870 --> 00:54:00,140 de fer canvis primer. 1119 00:54:00,140 --> 00:54:02,180 Així que si vostè pensa - has de votar. 1120 00:54:02,180 --> 00:54:06,885 Si creus que hem d'executar aquest codi com és, si us plau, aixequin la mà. 1121 00:54:06,885 --> 00:54:12,440 1122 00:54:12,440 --> 00:54:13,400 >> D'acord. 1123 00:54:13,400 --> 00:54:14,315 Hi ha un - 1124 00:54:14,315 --> 00:54:17,260 Tens una pregunta, preocupació? 1125 00:54:17,260 --> 00:54:18,080 Sí 1126 00:54:18,080 --> 00:54:21,240 >> ESTUDIANTS 48: Després que ens movem memòria intermèdia fora del bucle, ens 1127 00:54:21,240 --> 00:54:22,670 que malloc ell? 1128 00:54:22,670 --> 00:54:23,310 >> JASON Hirschhorn: Molt bona pregunta. 1129 00:54:23,310 --> 00:54:26,670 Després ens movem memòria intermèdia fora de la llaç, tenim per malloc ell? 1130 00:54:26,670 --> 00:54:28,400 Aquesta és una pregunta abast. 1131 00:54:28,400 --> 00:54:32,130 Si inicialitzem esmorteir fora d'aquest bucle, existirà 1132 00:54:32,130 --> 00:54:33,534 a l'interior del bucle? 1133 00:54:33,534 --> 00:54:35,230 >> ESTUDIANTS MÚLTIPLES: Si. 1134 00:54:35,230 --> 00:54:35,580 >> JASON Hirschhorn: Si. 1135 00:54:35,580 --> 00:54:40,100 El seu àmbit d'aplicació abasta l'interior del bucle, i, en definitiva, qualsevol cosa per sota d'ella a l'interior 1136 00:54:40,100 --> 00:54:42,460 d'aquest codi, incloent el dins de les coses aquí. 1137 00:54:42,460 --> 00:54:43,930 Així que no necessitem malloc ella. 1138 00:54:43,930 --> 00:54:47,766 És una variable local, i el seu abast encara inclou el bucle. 1139 00:54:47,766 --> 00:54:49,540 >> ESTUDIANTS 49: És necessari per alliberar-lo? 1140 00:54:49,540 --> 00:54:51,770 >> JASON Hirschhorn: Tenim necessitar memòria intermèdia lliure? 1141 00:54:51,770 --> 00:54:53,860 >> ESTUDIANTS 49: Sí, si no ho fem malloc. 1142 00:54:53,860 --> 00:54:55,750 >> JASON Hirschhorn: Tenim necessitar memòria intermèdia lliure? 1143 00:54:55,750 --> 00:54:57,160 No ho sabem. 1144 00:54:57,160 --> 00:55:01,280 De nou, és una variable local, així que no hem de alliberar-la. 1145 00:55:01,280 --> 00:55:02,170 D'acord. 1146 00:55:02,170 --> 00:55:03,480 Anem a veure què passa. 1147 00:55:03,480 --> 00:55:17,290 1148 00:55:17,290 --> 00:55:18,220 Pel que és sense inicialitzar. 1149 00:55:18,220 --> 00:55:20,830 Això era el que una cosa que Marcus va proposar anteriorment. 1150 00:55:20,830 --> 00:55:25,340 Així tenim que l'error, variable buffer no està inicialitzat quan s'utilitza aquí. 1151 00:55:25,340 --> 00:55:26,590 >> Com podem solucionar aquest problema? 1152 00:55:26,590 --> 00:55:29,460 1153 00:55:29,460 --> 00:55:30,960 >> ESTUDIANTS 50: malloc ell? 1154 00:55:30,960 --> 00:55:31,770 >> ESTUDIANTS 51: igual a NULL? 1155 00:55:31,770 --> 00:55:33,000 >> ESTUDIANTS 52: Di memòria intermèdia és igual 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 Es veu bé. 1159 00:55:40,770 --> 00:55:42,410 Tenim ara. 1160 00:55:42,410 --> 00:55:45,630 Crearem una mica per intentar copiar. 1161 00:55:45,630 --> 00:56:08,990 1162 00:56:08,990 --> 00:56:10,490 Així que tenim el nostre arxiu de text. 1163 00:56:10,490 --> 00:56:11,740 Com podem executar aquest programa? 1164 00:56:11,740 --> 00:56:14,140 1165 00:56:14,140 --> 00:56:15,472 Sí 1166 00:56:15,472 --> 00:56:22,230 >> ESTUDIANTS 53: Pots fer punt slash cp, test.txt. 1167 00:56:22,230 --> 00:56:25,140 I llavors vostè pot nomenar a un altre arxiu el qual s'emmagatzemen en. 1168 00:56:25,140 --> 00:56:25,510 >> JASON Hirschhorn: OK. 1169 00:56:25,510 --> 00:56:27,380 L'anomenarem out.txt. 1170 00:56:27,380 --> 00:56:28,630 ¿D'acord? 1171 00:56:28,630 --> 00:56:31,700 1172 00:56:31,700 --> 00:56:34,320 Culpa Seg 1173 00:56:34,320 --> 00:56:35,570 Reflexions sobre la sentència segons? 1174 00:56:35,570 --> 00:56:40,900 1175 00:56:40,900 --> 00:56:41,390 Això és genial. 1176 00:56:41,390 --> 00:56:45,040 Com podem esbrinar on la decisió segment és? 1177 00:56:45,040 --> 00:56:45,680 Què? 1178 00:56:45,680 --> 00:56:45,990 >> ESTUDIANTS 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 Correm gdb escrivint slash dot gdb, el nom del nostre programa. 1182 00:56:55,300 --> 00:56:57,020 No hi ha arguments de línia de comandes allà. 1183 00:56:57,020 --> 00:56:59,570 Anem a establir un punt de ruptura en principal. 1184 00:56:59,570 --> 00:57:02,190 Si vull començar gdb, què faig? 1185 00:57:02,190 --> 00:57:02,730 >> ESTUDIANTS 55: R. 1186 00:57:02,730 --> 00:57:08,910 >> JASON Hirschhorn: R. I després què? 1187 00:57:08,910 --> 00:57:09,400 >> ESTUDIANTS 55: Els arguments? 1188 00:57:09,400 --> 00:57:10,650 >> JASON Hirschhorn: Llavors el arguments de la línia d'ordres. 1189 00:57:10,650 --> 00:57:15,890 1190 00:57:15,890 --> 00:57:17,120 Anem a caminar a través. 1191 00:57:17,120 --> 00:57:19,090 N és només em porta línia per línia. 1192 00:57:19,090 --> 00:57:21,450 Jo vaig a anar fins que Em surt la meva culpa seg. 1193 00:57:21,450 --> 00:57:22,700 No és la meva culpa seg. 1194 00:57:22,700 --> 00:57:24,960 1195 00:57:24,960 --> 00:57:27,875 Sembla fread causat culpa meva seg. 1196 00:57:27,875 --> 00:57:30,570 1197 00:57:30,570 --> 00:57:32,770 Sigues fread va causar la meva culpa seg, perquè aquesta era la 1198 00:57:32,770 --> 00:57:34,950 la línia que acabem d'executar. 1199 00:57:34,950 --> 00:57:36,530 >> I l'única cosa que era passant en aquesta línia - 1200 00:57:36,530 --> 00:57:37,520 dues coses estaven succeint. 1201 00:57:37,520 --> 00:57:40,610 Fread anava, i després ens vam quedar fent algunes comprovacions WHILE. 1202 00:57:40,610 --> 00:57:44,820 Estic disposat a apostar que la MENTRE comprovació no estava causant culpa meva seg. 1203 00:57:44,820 --> 00:57:46,950 El més probable era fread causant la meva culpa seg. 1204 00:57:46,950 --> 00:57:49,260 També veig alguna cosa aquí, memcopy. 1205 00:57:49,260 --> 00:57:50,500 >> Còpia de la memòria. 1206 00:57:50,500 --> 00:57:53,820 Sona com la mudança de memòria de un lloc a un altre. 1207 00:57:53,820 --> 00:57:56,890 Sona com una cosa que passaria en fread, potser una mica de memòria 1208 00:57:56,890 --> 00:57:58,910 passar d'aquí fins aquí. 1209 00:57:58,910 --> 00:58:01,740 1210 00:58:01,740 --> 00:58:03,860 Anem a passar per això una altra vegada. 1211 00:58:03,860 --> 00:58:06,900 Com començament al llarg i executar de nou? 1212 00:58:06,900 --> 00:58:08,092 Sí 1213 00:58:08,092 --> 00:58:15,140 >> ESTUDIANTS 56: És necessari posar un símbol d'unió abans de memòria intermèdia? 1214 00:58:15,140 --> 00:58:17,800 >> JASON Hirschhorn: Així ampersand abans memòria intermèdia em donaria l'adreça del 1215 00:58:17,800 --> 00:58:22,330 buffer, que és un char *. 1216 00:58:22,330 --> 00:58:25,250 Repassem això una vegada més. 1217 00:58:25,250 --> 00:58:28,248 Com s'executa a través d'ell una vegada més? 1218 00:58:28,248 --> 00:58:29,210 >> ESTUDIANTS 57: Pot vostè acaba Introduïu Executar de nou? 1219 00:58:29,210 --> 00:58:32,050 >> JASON Hirschhorn: Només has d'escriure run nou. 1220 00:58:32,050 --> 00:58:33,415 Així que no anem a executar aquesta línia. 1221 00:58:33,415 --> 00:58:36,250 1222 00:58:36,250 --> 00:58:39,240 Així buffer és un punter NULL. 1223 00:58:39,240 --> 00:58:40,490 Corregiu? 1224 00:58:40,490 --> 00:58:45,870 1225 00:58:45,870 --> 00:58:47,060 Està apuntant a - anem a veure. 1226 00:58:47,060 --> 00:58:48,500 Si tenim la nostra - 1227 00:58:48,500 --> 00:58:50,430 fer un dibuix ràpid d'això. 1228 00:58:50,430 --> 00:58:53,500 Tots poden veure si Jo escric per aquí? 1229 00:58:53,500 --> 00:59:02,890 >> Així que a la pila, tenim un local d' variable i es diu buffer, i 1230 00:59:02,890 --> 00:59:08,230 que és un punter a un char. 1231 00:59:08,230 --> 00:59:10,325 Què és aquesta adreça en caràcters? 1232 00:59:10,325 --> 00:59:12,550 >> ESTUDIANTS 58: 0x0. 1233 00:59:12,550 --> 00:59:13,400 >> JASON Hirschhorn: així. 1234 00:59:13,400 --> 00:59:14,200 Això és el que és això. 1235 00:59:14,200 --> 00:59:17,600 Aquí, a l'interior d'amortiment, s'emmagatzema 0x0. 1236 00:59:17,600 --> 00:59:20,480 Això és el que tenim - el configuració que tenim en aquests moments. 1237 00:59:20,480 --> 00:59:27,540 Així que aquesta línia, fread, posa alguna cosa des de la font d'on? 1238 00:59:27,540 --> 00:59:30,560 Dins d'aquesta caixa, o d'aquesta caixa? 1239 00:59:30,560 --> 00:59:31,060 Què caixa? 1240 00:59:31,060 --> 00:59:33,290 Caixa o quadre de la dreta, deixant? 1241 00:59:33,290 --> 00:59:34,750 Aquest quadre de la dreta. 1242 00:59:34,750 --> 00:59:38,440 >> D'això se segueix el punter, i el posa a aquí. 1243 00:59:38,440 --> 00:59:42,620 Quan tractem i la memòria tàctil en ubicació 0, què obtenim? 1244 00:59:42,620 --> 00:59:45,050 Un error de segmentació. 1245 00:59:45,050 --> 00:59:46,550 Aquest és l'error que tenim en aquests moments. 1246 00:59:46,550 --> 00:59:46,970 Sí 1247 00:59:46,970 --> 00:59:48,410 >> ESTUDIANTS 59: No tens posar memòria intermèdia estrella? 1248 00:59:48,410 --> 00:59:49,180 O no? 1249 00:59:49,180 --> 00:59:50,050 Per fread? 1250 00:59:50,050 --> 00:59:51,450 >> JASON Hirschhorn: Així fread pren un punter. 1251 00:59:51,450 --> 00:59:54,920 1252 00:59:54,920 --> 00:59:55,900 Per tant, passa en tampó. 1253 00:59:55,900 --> 00:59:58,980 I llavors va a de-referència que en algun lloc dins fread. 1254 00:59:58,980 --> 01:00:00,700 Però, de nou, vam veure, es necessita un punter. 1255 01:00:00,700 --> 01:00:02,560 No necessitem passar memòria intermèdia estrelles. 1256 01:00:02,560 --> 01:00:05,350 Això seria passant ell el que és aquí. 1257 01:00:05,350 --> 01:00:07,980 I això probablement ens donaria un error perquè estem d'-referència. 1258 01:00:07,980 --> 01:00:08,150 >> Cert? 1259 01:00:08,150 --> 01:00:10,690 Quan ens de-referència aquest punter, quan tractem d'accedir a aquest lloc, 1260 01:00:10,690 --> 01:00:13,140 estem arribant a un error - nostre fallada de segmentació. 1261 01:00:13,140 --> 01:00:15,800 Per tant - 1262 01:00:15,800 --> 01:00:16,690 Ui. 1263 01:00:16,690 --> 01:00:19,090 Anem a sortir de gdb. 1264 01:00:19,090 --> 01:00:20,160 La nostra línia - 1265 01:00:20,160 --> 01:00:22,990 el nostre problema - que és correcte aquí en aquesta línia. 1266 01:00:22,990 --> 01:00:26,410 I és un problema perquè d'aquesta línia. 1267 01:00:26,410 --> 01:00:31,780 >> Com podem crear un quadre que accessible en fread. 1268 01:00:31,780 --> 01:00:31,980 Cert? 1269 01:00:31,980 --> 01:00:35,190 Hem de crear un quadre que és un byte gran, la mida d'un char. 1270 01:00:35,190 --> 01:00:38,590 Però necessitem que la caixa sigui accessible Quan aquesta funció s'executa. 1271 01:00:38,590 --> 01:00:39,390 Llavors, on - 1272 01:00:39,390 --> 01:00:39,640 si. 1273 01:00:39,640 --> 01:00:40,440 Alguna idea? 1274 01:00:40,440 --> 01:00:43,615 >> ESTUDIANTS 60: Només has de configurar com qualsevol caràcter aleatori. 1275 01:00:43,615 --> 01:00:49,150 1276 01:00:49,150 --> 01:00:51,640 Només fer iguals char buffer el caràcter. 1277 01:00:51,640 --> 01:00:53,795 I després, quan hagis esmorteir allà - 1278 01:00:53,795 --> 01:00:54,110 >> JASON Hirschhorn: Espera. 1279 01:00:54,110 --> 01:00:55,110 Caràcter tampó? 1280 01:00:55,110 --> 01:00:55,880 Així que no hi ha estrelles? 1281 01:00:55,880 --> 01:00:56,390 >> ESTUDIANTS 60: així. 1282 01:00:56,390 --> 01:00:58,560 Tregui l'estrella. 1283 01:00:58,560 --> 01:01:00,690 Igual a un personatge a l'atzar. 1284 01:01:00,690 --> 01:01:01,460 >> JASON Hirschhorn: OK. 1285 01:01:01,460 --> 01:01:02,420 Així que dóna'm un. 1286 01:01:02,420 --> 01:01:03,170 >> ESTUDIANTS 60: Igual que un o alguna cosa així. 1287 01:01:03,170 --> 01:01:06,160 I després, quan vostè té memòria intermèdia allà, s'utilitza un - 1288 01:01:06,160 --> 01:01:06,420 >> ESTUDIANTS 61: Star? 1289 01:01:06,420 --> 01:01:07,650 Oh, no, el signe. 1290 01:01:07,650 --> 01:01:09,000 >> ESTUDIANTS 60: Utilitzeu el signe. 1291 01:01:09,000 --> 01:01:09,470 >> JASON Hirschhorn: OK. 1292 01:01:09,470 --> 01:01:11,320 I què hi ha a fwrite? 1293 01:01:11,320 --> 01:01:14,150 >> ESTUDIANTS 60: Utilitzeu el signe més. 1294 01:01:14,150 --> 01:01:14,320 >> JASON Hirschhorn: Molt bé. 1295 01:01:14,320 --> 01:01:20,970 Així que la seva idea és, creem un char i posar alguna cosa en ell, i després 1296 01:01:20,970 --> 01:01:22,612 gravar en aquest carbó. 1297 01:01:22,612 --> 01:01:23,760 >> ESTUDIANTS 60: així. 1298 01:01:23,760 --> 01:01:25,916 >> JASON Hirschhorn: Què Què pensa la gent? 1299 01:01:25,916 --> 01:01:27,770 >> ESTUDIANTS 62: Ha enrevessat. 1300 01:01:27,770 --> 01:01:28,460 >> JASON Hirschhorn: OK. 1301 01:01:28,460 --> 01:01:29,760 Dibuixem a terme. 1302 01:01:29,760 --> 01:01:35,720 Així que aquesta vegada, vaig a treure això en vermell a la pila d'aquí, i després 1303 01:01:35,720 --> 01:01:36,410 tindrà - 1304 01:01:36,410 --> 01:01:36,822 ooh! 1305 01:01:36,822 --> 01:01:38,060 Ho sento. 1306 01:01:38,060 --> 01:01:45,930 Així que aquesta vegada tenim una cosa que es diu tampó, i és a la pila. 1307 01:01:45,930 --> 01:01:48,430 Corregiu? 1308 01:01:48,430 --> 01:01:51,520 I estem estalviant-hi un principi. 1309 01:01:51,520 --> 01:01:53,830 >> Llavors tenim la nostra crida a fread. 1310 01:01:53,830 --> 01:02:01,300 Què fread fa és que pren un byte de nostre arxiu i el posa en algun lloc. 1311 01:02:01,300 --> 01:02:04,570 Es posa en qualsevol que sigui el ho està assenyalant. 1312 01:02:04,570 --> 01:02:09,130 Bé, abans que tinguéssim aquesta direcció - 1313 01:02:09,130 --> 01:02:10,250 0x0. 1314 01:02:10,250 --> 01:02:13,349 Ara, què direcció tenim? 1315 01:02:13,349 --> 01:02:14,650 >> ESTUDIANTS 63: El que sigui buffer de direcció és. 1316 01:02:14,650 --> 01:02:15,970 >> JASON Hirschhorn: El que sigui buffer de direcció és. 1317 01:02:15,970 --> 01:02:22,370 Probablement serà alguna cosa així. 1318 01:02:22,370 --> 01:02:26,950 Probablement va a començar amb una b i 1 f, i després té sis 1319 01:02:26,950 --> 01:02:27,970 dígits hexadecimals. 1320 01:02:27,970 --> 01:02:28,480 No té importància. 1321 01:02:28,480 --> 01:02:29,470 Alguns d'adreces. 1322 01:02:29,470 --> 01:02:31,410 I estem de pas, que la direcció polz 1323 01:02:31,410 --> 01:02:34,790 >> I posarem el nostre únic El byte en aquesta direcció. 1324 01:02:34,790 --> 01:02:38,470 Així que anem a posar el nostre únic El byte aquí dins. 1325 01:02:38,470 --> 01:02:40,800 I després anem a escriure des el que és sempre aquí dins. 1326 01:02:40,800 --> 01:02:43,425 1327 01:02:43,425 --> 01:02:45,380 Algú té alguna pregunta sobre això? 1328 01:02:45,380 --> 01:02:50,990 1329 01:02:50,990 --> 01:02:54,690 Qui pensa que aquest codi funcionarà? 1330 01:02:54,690 --> 01:02:56,020 >> Llevant la seva mà si vostè pensa Aquest codi funcionarà. 1331 01:02:56,020 --> 01:02:57,270 Vostè ha de prendre una postura. 1332 01:02:57,270 --> 01:03:00,670 1333 01:03:00,670 --> 01:03:02,500 I qui creu que aquest codi no funcionarà? 1334 01:03:02,500 --> 01:03:04,610 Aixequin la mà. 1335 01:03:04,610 --> 01:03:06,750 Tothom ha de ser aixecant la mà. 1336 01:03:06,750 --> 01:03:07,670 D'acord. 1337 01:03:07,670 --> 01:03:09,390 Michael, on estàs parat? 1338 01:03:09,390 --> 01:03:10,680 >> MICHAEL: No puc decidir. 1339 01:03:10,680 --> 01:03:12,070 Tipus d'enmig. 1340 01:03:12,070 --> 01:03:12,736 >> JASON Hirschhorn: Ets en el medi. 1341 01:03:12,736 --> 01:03:13,092 Tria un. 1342 01:03:13,092 --> 01:03:14,400 >> MICHAEL: Vaig a tenir fe i diuen que funcionarà. 1343 01:03:14,400 --> 01:03:14,660 >> JASON Hirschhorn: OK. 1344 01:03:14,660 --> 01:03:16,047 Vas a tenir fe i diuen que funciona? 1345 01:03:16,047 --> 01:03:26,490 1346 01:03:26,490 --> 01:03:27,020 Què va passar? 1347 01:03:27,020 --> 01:03:28,270 >> [VEUS interposant] 1348 01:03:28,270 --> 01:03:35,170 1349 01:03:35,170 --> 01:03:35,950 >> JASON Hirschhorn: Sense culpa seg. 1350 01:03:35,950 --> 01:03:40,320 Com es pot comprovar que per veure si dues coses són iguals? 1351 01:03:40,320 --> 01:03:42,060 Dos arxius són iguals. 1352 01:03:42,060 --> 01:03:43,300 >> ESTUDIANTS 64: Diff. 1353 01:03:43,300 --> 01:03:45,490 >> JASON Hirschhorn: Diff. 1354 01:03:45,490 --> 01:03:51,630 Xecs de diferències per a les diferències entre dos arxius, i si torna 1355 01:03:51,630 --> 01:03:52,890 res, són idèntics. 1356 01:03:52,890 --> 01:03:59,030 I si obrim, tenim el nostre arxiu. 1357 01:03:59,030 --> 01:04:00,490 Així que aquesta era la solució correcta. 1358 01:04:00,490 --> 01:04:01,780 Fem una ullada cap enrere en ella una vegada més. 1359 01:04:01,780 --> 01:04:04,080 En realitat, ni tan sols necessitarà inicialitzar. 1360 01:04:04,080 --> 01:04:05,520 >> Seria probablement un aspecte una mica net que no va posar 1361 01:04:05,520 --> 01:04:07,680 alguna cosa a l'atzar en aquest país. 1362 01:04:07,680 --> 01:04:13,070 El punt és, que necessita crear un una mica d'espai per emmagatzemar una mica de 1363 01:04:13,070 --> 01:04:15,530 fread i prendre alguna cosa de fwrite. 1364 01:04:15,530 --> 01:04:18,400 I això havia de ser un local d' variables a la pila - que 1365 01:04:18,400 --> 01:04:19,890 podria haver malloc'd una mica d'espai. 1366 01:04:19,890 --> 01:04:23,030 >> Així que en realitat podria tenir malloc escrit aquí, i 1367 01:04:23,030 --> 01:04:25,420 això hauria funcionat. 1368 01:04:25,420 --> 01:04:28,660 I llavors hauríem estat emmagatzemant les nostres coses en algun lloc en el munt. 1369 01:04:28,660 --> 01:04:31,940 Però això és en realitat, probablement, la solució més elegant. 1370 01:04:31,940 --> 01:04:34,490 N'hi ha prou amb crear una mica d'espai a la pila perquè aquestes coses passen. 1371 01:04:34,490 --> 01:04:37,690 1372 01:04:37,690 --> 01:04:38,990 >> M'agradaria tenir altres dos comentaris. 1373 01:04:38,990 --> 01:04:44,650 Si anés a prendre al seu torn en això, i llavors queden marcats en això, els meus comentaris 1374 01:04:44,650 --> 01:04:47,400 seria de la següent manera. 1375 01:04:47,400 --> 01:04:54,300 Aquests 1 és aquí, per a mi, mirar com números màgics. 1376 01:04:54,300 --> 01:04:56,860 Aquest 1, en termes de fread, té sentit. 1377 01:04:56,860 --> 01:04:59,580 Aquest és el nombre de coses per llegir o escriure. 1378 01:04:59,580 --> 01:05:03,740 >> Però aquesta d'aquí ha Probablement sigui una mica més. 1379 01:05:03,740 --> 01:05:05,180 Llavors, què és una solució? 1380 01:05:05,180 --> 01:05:06,545 >> ESTUDIANTS 65: Grandària de byte. 1381 01:05:06,545 --> 01:05:10,100 1382 01:05:10,100 --> 01:05:11,080 >> JASON Hirschhorn: Així? 1383 01:05:11,080 --> 01:05:13,130 >> ESTUDIANTS 65: Grandària de caràcters. 1384 01:05:13,130 --> 01:05:13,820 >> JASON Hirschhorn: Mida de caràcters. 1385 01:05:13,820 --> 01:05:15,290 Sí, el byte no és un tipus. 1386 01:05:15,290 --> 01:05:16,320 Així que la mida de les obres característiques. 1387 01:05:16,320 --> 01:05:30,270 Podríem tenir, a la part superior de nostre codi, # defineix que. 1388 01:05:30,270 --> 01:05:33,410 Anomenat alguna cosa BYTE i és realment un char. 1389 01:05:33,410 --> 01:05:37,675 En realitat, un enfocament encara millor que podria haver estat aquest - 1390 01:05:37,675 --> 01:05:39,391 uint. 1391 01:05:39,391 --> 01:05:40,780 Algú sap el que és això? 1392 01:05:40,780 --> 01:05:44,388 1393 01:05:44,388 --> 01:05:44,840 >> Ho sento. 1394 01:05:44,840 --> 01:05:46,090 Ho tinc a l'inrevés. 1395 01:05:46,090 --> 01:05:51,620 1396 01:05:51,620 --> 01:05:52,200 Espera, no. 1397 01:05:52,200 --> 01:05:53,450 Per on es va? 1398 01:05:53,450 --> 01:05:58,071 1399 01:05:58,071 --> 01:05:59,660 Algú sap el que és això? 1400 01:05:59,660 --> 01:06:00,950 Sí 1401 01:06:00,950 --> 01:06:05,650 >> ESTUDIANTS 67: Se suposa que ajudarà a estandarditzar a través dels sistemes de les coses que 1402 01:06:05,650 --> 01:06:08,760 tenir - com enters sense signe que té 8 bytes? 1403 01:06:08,760 --> 01:06:11,785 >> JASON Hirschhorn: Això és exactament correcte. 1404 01:06:11,785 --> 01:06:14,310 En diferents màquines, la grandària d'un char - 1405 01:06:14,310 --> 01:06:15,180 no generalment un char. 1406 01:06:15,180 --> 01:06:16,100 Chars solen ser un byte. 1407 01:06:16,100 --> 01:06:19,590 Però la mida d'altres tipus de dades són diferents mides en una màquina de 32 bits 1408 01:06:19,590 --> 01:06:21,370 davant d'un equip de 64 bits. 1409 01:06:21,370 --> 01:06:25,180 A uint8_t és sempre de 8 bits - 1410 01:06:25,180 --> 01:06:27,210 sempre un byte. 1411 01:06:27,210 --> 01:06:29,580 >> I he de incloure aquesta arxiu de capçalera estàndard int. 1412 01:06:29,580 --> 01:06:35,040 Així que ara, això hauria estat probablement la millor manera d'escriure aquest codi. 1413 01:06:35,040 --> 01:06:40,160 1414 01:06:40,160 --> 01:06:41,450 Així que em llibre dels números màgics. 1415 01:06:41,450 --> 01:06:44,690 I també tinc un més lògic tipus de memòria intermèdia. 1416 01:06:44,690 --> 01:06:49,450 No és simplement un char, és un byte, que és el que esperem que sigui. 1417 01:06:49,450 --> 01:06:53,400 >> I fins aquí, hem fet estat una mica més robust. 1418 01:06:53,400 --> 01:06:55,190 No anem a trucar a un char, que - 1419 01:06:55,190 --> 01:06:58,630 potser, qui sap - podria ser una diferent mida en diferents màquines. 1420 01:06:58,630 --> 01:07:02,025 En realitat estem dient que això és exactament un byte, sempre, no importa què. 1421 01:07:02,025 --> 01:07:05,810 I si mirem aquí, fem cp. 1422 01:07:05,810 --> 01:07:08,340 Uh-oh. 1423 01:07:08,340 --> 01:07:09,590 Què va passar? 1424 01:07:09,590 --> 01:07:14,470 1425 01:07:14,470 --> 01:07:16,170 >> ESTUDIANTS 68: Podria estar encès. 1426 01:07:16,170 --> 01:07:17,880 >> JASON Hirschhorn: Què? 1427 01:07:17,880 --> 01:07:19,130 >> ESTUDIANTS 69: Ho és? 1428 01:07:19,130 --> 01:07:21,940 1429 01:07:21,940 --> 01:07:25,080 >> ESTUDIANTS 70: No ho va fer el defineixen com un tipus. 1430 01:07:25,080 --> 01:07:28,684 >> ESTUDIANTS 71: Però el que hauria ser definit en la norma. 1431 01:07:28,684 --> 01:07:29,934 >> ESTUDIANTS 72: Què està passant? 1432 01:07:29,934 --> 01:07:37,660 1433 01:07:37,660 --> 01:07:40,210 >> ESTUDIANTS 73: En cas de definir estar tot en majúscules? 1434 01:07:40,210 --> 01:07:41,370 >> JASON Hirschhorn: Així que no és # defineix. 1435 01:07:41,370 --> 01:07:45,490 En realitat, en aquest cas, estic utilitzarà typedef. 1436 01:07:45,490 --> 01:07:48,590 Com que estem fent servir com un tipus en un sol lloc. 1437 01:07:48,590 --> 01:07:51,990 Així que en aquest cas, en realitat volem typedef que estem imprimint un nou tipus 1438 01:07:51,990 --> 01:07:54,490 byte, i és, essencialment, aquest. 1439 01:07:54,490 --> 01:07:56,590 És una mica diferent a # defineix. 1440 01:07:56,590 --> 01:08:02,740 >> I ara, el nostre codi funciona perfectament. 1441 01:08:02,740 --> 01:08:05,230 Així que, de nou, # define pren alguna cosa, reemplaça tot arreu 1442 01:08:05,230 --> 01:08:06,780 amb l'altra. 1443 01:08:06,780 --> 01:08:07,920 És només una macro - 1444 01:08:07,920 --> 01:08:09,420 taquigrafia per desfer-nombres màgics. 1445 01:08:09,420 --> 01:08:11,360 Però en aquest cas, perquè estem utilitzant com un tipus - 1446 01:08:11,360 --> 01:08:12,180 aquí - 1447 01:08:12,180 --> 01:08:19,880 perquè això funcioni, necessitem typedef al byte és. 1448 01:08:19,880 --> 01:08:21,840 >> I estem definint aquí mateix. 1449 01:08:21,840 --> 01:08:24,750 No és una estructura, en realitat és simplement un enter sense signe. 1450 01:08:24,750 --> 01:08:27,680 És un byte de longitud. 1451 01:08:27,680 --> 01:08:31,910 Aquest codi estarà disponible en línia, i tots han de tenir ara mateix. 1452 01:08:31,910 --> 01:08:33,830 >> Així que tenim - 1453 01:08:33,830 --> 01:08:34,250 perfecte - 1454 01:08:34,250 --> 01:08:41,359 13 minuts a l'esquerra per anar problema per 5 set. 1455 01:08:41,359 --> 01:08:44,270 Vull caminar per copy.c junts, i llavors parlarem breument 1456 01:08:44,270 --> 01:08:47,120 sobre les altres parts del conjunt de problemes. 1457 01:08:47,120 --> 01:08:48,899 Així que permetin-me llevo copy.c. 1458 01:08:48,899 --> 01:09:03,930 1459 01:09:03,930 --> 01:09:08,810 I el millor és que hem fet ja s'ha escrit molt d'aquest codi. 1460 01:09:08,810 --> 01:09:11,180 >> El codi que escrivim, literalment, només va sortir d'aquí quan era 1461 01:09:11,180 --> 01:09:13,120 escrivint això al meu compte. 1462 01:09:13,120 --> 01:09:16,990 Però això és copy.c, constitueix la base per a les dues primeres parts de 1463 01:09:16,990 --> 01:09:22,340 el problema establert per whodunit.c, que que necessita per escriure, i resize.c. 1464 01:09:22,340 --> 01:09:27,050 Recover.c, que és el tercer i últim part del conjunt de problemes, no és 1465 01:09:27,050 --> 01:09:29,529 amb seu fora d'aquest fitxer. 1466 01:09:29,529 --> 01:09:32,200 >> Vas a haver de escriure aquest arxiu, et donem una plantilla perquè 1467 01:09:32,200 --> 01:09:34,620 presentar, però no té res a veure amb copy.c. 1468 01:09:34,620 --> 01:09:38,675 Però a causa copy.c és la base per les dues primeres parts, anem 1469 01:09:38,675 --> 01:09:42,000 caminar a través d'ell ara, perquè tingui un bon sentit del que fa. 1470 01:09:42,000 --> 01:09:43,640 >> I els comentaris donen de part d'ella. 1471 01:09:43,640 --> 01:09:45,120 Ja hem escrit alguna cosa d'això. 1472 01:09:45,120 --> 01:09:49,220 En primer lloc, ens estem assegurant tenim tres arguments. 1473 01:09:49,220 --> 01:09:50,560 A continuació, estem recordant el nom del fitxer. 1474 01:09:50,560 --> 01:09:52,960 Així que ens saltem aquest pas quan codifiquem el nostre - 1475 01:09:52,960 --> 01:09:54,700 quan el nostre cp. 1476 01:09:54,700 --> 01:09:56,750 Però aquí, estan fent una mica més net. 1477 01:09:56,750 --> 01:09:59,350 >> Estan vigilant per assegurar dos arxius són bones, en 1478 01:09:59,350 --> 01:10:00,450 A més de l'obertura d'ells. 1479 01:10:00,450 --> 01:10:04,760 Es va escriure tot aquest codi en aquest moment, així que estic No vaig a detenir-me en aquest codi. 1480 01:10:04,760 --> 01:10:09,670 El següent és una mica de matèria que és específic per els tipus d'arxius que estem utilitzant, que 1481 01:10:09,670 --> 01:10:12,240 són arxius de mapa de bits. 1482 01:10:12,240 --> 01:10:15,660 Arxius de mapa de bits tenen alguns metadades associat amb ells. 1483 01:10:15,660 --> 01:10:20,190 >> Així que el primer parell de bytes l'informarà sobre l'arxiu. 1484 01:10:20,190 --> 01:10:23,460 Ells no són els colors de el píxel en aquesta imatge. 1485 01:10:23,460 --> 01:10:25,120 Et diuen sobre l'arxiu. 1486 01:10:25,120 --> 01:10:28,220 I si vostè llegeix a través del conjunt de problemes, vostè tindrà molta més informació 1487 01:10:28,220 --> 01:10:33,100 sobre quins tipus d'estructures de metadades s'inclouen amb els mapes de bits. 1488 01:10:33,100 --> 01:10:39,350 >> Però és per això que tenim aquesta primera conjunt de - el codi aquí. 1489 01:10:39,350 --> 01:10:42,490 Estem llegint les metadades - 1490 01:10:42,490 --> 01:10:45,800 dues peces de metadades - l'arxiu encapçalat i la capçalera d'informació. 1491 01:10:45,800 --> 01:10:51,030 I estem revisant algunes parts del mateix a assegureu-vos que és un arxiu de mapa de bits veritable 1492 01:10:51,030 --> 01:10:52,420 abans de continuar. 1493 01:10:52,420 --> 01:10:55,470 >> I un cop més, aquests són els detalls que no cal anar a ara. 1494 01:10:55,470 --> 01:10:57,720 Si vostè llegeix a través del conjunt de problemes, vostè entendrà això. 1495 01:10:57,720 --> 01:11:01,370 Llarga història curta, aquests són només dient, Aquest fitxer de mapa de bits i 1496 01:11:01,370 --> 01:11:02,810 confirmant que. 1497 01:11:02,810 --> 01:11:05,180 >> A continuació, anem a escriure els a l'arxiu de sortida. 1498 01:11:05,180 --> 01:11:05,660 Veiem que aquí. 1499 01:11:05,660 --> 01:11:06,910 Estem escrivint al punter fora. 1500 01:11:06,910 --> 01:11:09,260 1501 01:11:09,260 --> 01:11:11,320 A continuació, estem determinant farcit. 1502 01:11:11,320 --> 01:11:15,240 Així que de nou, ja que és la particularitat amb un arxiu de mapa de bits, algunes línies inclouen 1503 01:11:15,240 --> 01:11:16,840 farciment en l'extrem. 1504 01:11:16,840 --> 01:11:19,000 I si vostè llegeix a través del conjunt de problemes, vostè aprendrà més sobre el farciment. 1505 01:11:19,000 --> 01:11:22,330 Aquesta és la fórmula per trobar farciment. 1506 01:11:22,330 --> 01:11:23,610 >> Important recordar - 1507 01:11:23,610 --> 01:11:29,720 quan es canvia la mida d'un mapa de bits arxiu, els canvis de farciment. 1508 01:11:29,720 --> 01:11:31,970 Quan es canvia la mida d'un arxiu, els canvis de farciment. 1509 01:11:31,970 --> 01:11:34,310 Mai serà més gran que 3 - 1510 01:11:34,310 --> 01:11:36,510 que serà de 0 a 3, inclusivament. 1511 01:11:36,510 --> 01:11:38,930 Però quan es canvia la mida de alguna cosa, els canvis de farciment. 1512 01:11:38,930 --> 01:11:47,100 >> Si només tinc un píxel a la fila, em necessita tres bytes de farciment, perquè 1513 01:11:47,100 --> 01:11:51,190 cada fila ha de ser múltiples de quatre bytes de longitud en un arxiu de mapa de bits. 1514 01:11:51,190 --> 01:11:56,120 Però si em doblego, per anar d'un píxel a dos píxels, cadascun dels quals, 1515 01:11:56,120 --> 01:11:59,510 diguem, és un byte, llavors necessito doble byte de farciment per fer 1516 01:11:59,510 --> 01:12:00,970 que igual a quatre. 1517 01:12:00,970 --> 01:12:04,200 >> Així que quan es canvia la mida d'alguna cosa, He de canviar la quantitat 1518 01:12:04,200 --> 01:12:06,551 de farciment del que tinc. 1519 01:12:06,551 --> 01:12:08,100 Això té sentit per a tothom? 1520 01:12:08,100 --> 01:12:12,020 1521 01:12:12,020 --> 01:12:18,720 A continuació, iterar sobre cada fila, o a través de totes les files. 1522 01:12:18,720 --> 01:12:21,400 I després iterar a través cada columna a cada fila. 1523 01:12:21,400 --> 01:12:25,330 Estem tractant a aquesta ruta de bits com una quadrícula, com hem tractat 1524 01:12:25,330 --> 01:12:26,490 el tauler en 15. 1525 01:12:26,490 --> 01:12:29,200 >> Com tractem els maons quan nosaltres els imprimim a la pantalla. 1526 01:12:29,200 --> 01:12:31,350 Una quadrícula de files i columnes. 1527 01:12:31,350 --> 01:12:32,350 Llavors - vam veure això. 1528 01:12:32,350 --> 01:12:33,840 En realitat només codifiquem això. 1529 01:12:33,840 --> 01:12:35,780 Hem creat alguns d'emmagatzematge temporal. 1530 01:12:35,780 --> 01:12:38,710 Llegim allà, i després escrivim a terme. 1531 01:12:38,710 --> 01:12:42,680 Això és exactament el que acabem de fer. 1532 01:12:42,680 --> 01:12:46,760 >> A continuació, perquè vaig dir: cada línia acaba en una mica de farciment, que 1533 01:12:46,760 --> 01:12:48,260 passar per alt que el farciment - 1534 01:12:48,260 --> 01:12:51,000 el vell farcit. 1535 01:12:51,000 --> 01:12:52,630 I després afegim tu. 1536 01:12:52,630 --> 01:12:55,140 En aquest cas, estem creant exactament el mateix arxiu. 1537 01:12:55,140 --> 01:12:56,180 Estem copiar-lo. 1538 01:12:56,180 --> 01:12:57,700 Així que aquesta línia és una mica ximple. 1539 01:12:57,700 --> 01:12:59,660 Podríem literalment només posar el farciment polz 1540 01:12:59,660 --> 01:13:04,290 >> Però si canvia la mida del fitxer, Encara vols aquesta línia? 1541 01:13:04,290 --> 01:13:08,510 1542 01:13:08,510 --> 01:13:11,560 Així que si volem canviar la mida d'un arxiu, Per què seguim volent saltar 1543 01:13:11,560 --> 01:13:12,810 sobre el vell encoixinat? 1544 01:13:12,810 --> 01:13:15,170 1545 01:13:15,170 --> 01:13:15,970 >> ESTUDIANTS 74: Si. 1546 01:13:15,970 --> 01:13:17,090 >> JASON Hirschhorn: Així que el que fem. 1547 01:13:17,090 --> 01:13:19,290 A causa d'això, de nou, ofertes amb l'arxiu d'origen. 1548 01:13:19,290 --> 01:13:21,570 Nosaltres no ens preocupem pel farciment des de l'arxiu d'origen. 1549 01:13:21,570 --> 01:13:23,410 Volem anar a la línia següent. 1550 01:13:23,410 --> 01:13:28,850 Però no ens limitem a posar de nou la vella quantitat de farciment. 1551 01:13:28,850 --> 01:13:31,540 Hem de tornar a posar el nova quantitat de farciment. 1552 01:13:31,540 --> 01:13:35,810 >> Així que quan estem canviant la mida d'una arxiu, encara volem passar per alt el 1553 01:13:35,810 --> 01:13:38,270 farcit a l'arxiu antic - el estem llegint des. 1554 01:13:38,270 --> 01:13:40,370 Però el que estem escrivint a, anem necessitarà tornar a posar una mica diferent 1555 01:13:40,370 --> 01:13:41,890 nombre de farciment que hem determinat. 1556 01:13:41,890 --> 01:13:42,780 Sí 1557 01:13:42,780 --> 01:13:44,550 >> ESTUDIANTS 75: L'ordre dels dos línies no importa, oi? 1558 01:13:44,550 --> 01:13:46,160 Com que vostè està manejant diferents arxius. 1559 01:13:46,160 --> 01:13:46,620 >> JASON Hirschhorn: Exactament. 1560 01:13:46,620 --> 01:13:48,220 L'ordre d'aquestes dues línies no importa. 1561 01:13:48,220 --> 01:13:49,790 Escrivim aquesta línia. 1562 01:13:49,790 --> 01:13:51,430 Això està aquí per l'arxiu estem escrivint a. 1563 01:13:51,430 --> 01:13:54,370 Això és important, de manera que tenim la quantitat correcta de farciment. 1564 01:13:54,370 --> 01:13:57,560 Això té a veure amb l'arxiu en format. 1565 01:13:57,560 --> 01:13:58,560 Volem passar directament sobre el farciment. 1566 01:13:58,560 --> 01:13:59,470 >> No volem llegir - 1567 01:13:59,470 --> 01:14:01,500 si estem llegint un byte a la vegada, ens no es preocupen pels bytes de farciment. 1568 01:14:01,500 --> 01:14:04,070 Volem passar a la següent línia. 1569 01:14:04,070 --> 01:14:11,800 Finalment igual que Lucy li va donar per a nosaltres, tanquem els arxius i tornem 0. 1570 01:14:11,800 --> 01:14:13,890 Així que això és copy.c. 1571 01:14:13,890 --> 01:14:17,850 I que en realitat va escriure - que passem la major part de secció d'escriure això, en essència. 1572 01:14:17,850 --> 01:14:18,740 >> Vostè ha fet això. 1573 01:14:18,740 --> 01:14:22,440 Així que espero que vostè té un bon sentit del que està passant aquí. 1574 01:14:22,440 --> 01:14:25,890 La gran diferència, la veritat, és només aquesta primera part que s'ocupa de 1575 01:14:25,890 --> 01:14:29,970 peculiaritats dels arxius de mapa de bits. 1576 01:14:29,970 --> 01:14:33,570 Així que tinc com el meu següent diapositiva, Què necessitem fer? 1577 01:14:33,570 --> 01:14:35,510 Bé, anem a pensar en qui ho va fer. 1578 01:14:35,510 --> 01:14:38,080 >> I per a algú que llegeix a través d' establir el problema, què fem 1579 01:14:38,080 --> 01:14:41,410 que hagi de fer en novel · la policíaca? 1580 01:14:41,410 --> 01:14:42,080 Simplement. 1581 01:14:42,080 --> 01:14:42,460 S'allunya. 1582 01:14:42,460 --> 01:14:48,570 >> ALLUNYA: Es pot treure la part de cada píxel que denota vermell. 1583 01:14:48,570 --> 01:14:49,730 I llavors - 1584 01:14:49,730 --> 01:14:50,730 tipus de? 1585 01:14:50,730 --> 01:14:51,860 >> JASON Hirschhorn: OK. 1586 01:14:51,860 --> 01:14:54,460 Així que treure la part de cada píxel que denota vermell. 1587 01:14:54,460 --> 01:14:57,234 Això és a prop, però no tots de la mateixa. 1588 01:14:57,234 --> 01:14:59,780 >> ESTUDIANTS 76: Bé, hi ha diferents maneres de fer-ho. 1589 01:14:59,780 --> 01:14:59,870 >> JASON Hirschhorn: OK. 1590 01:14:59,870 --> 01:15:03,070 Dóna'm una manera. 1591 01:15:03,070 --> 01:15:08,240 >> ESTUDIANTS 76: Tregui tot el vermell, i a continuació, posar l'accent en el blau i el verd. 1592 01:15:08,240 --> 01:15:10,010 >> JASON Hirschhorn: OK. 1593 01:15:10,010 --> 01:15:11,830 Així que tenint en compte aquests dos sentits - 1594 01:15:11,830 --> 01:15:15,210 sona com que li donem un píxel, que té un nivell de color vermell, blau i verd. 1595 01:15:15,210 --> 01:15:19,350 Volem canviar els nivells relatius d' el vermell, blau, i verd, depenent 1596 01:15:19,350 --> 01:15:20,740 en aquest píxel. 1597 01:15:20,740 --> 01:15:28,380 Quan en aquest codi hem de canviar el familiar color vermell, blau i verd 1598 01:15:28,380 --> 01:15:29,720 els nivells d'un píxel donat. 1599 01:15:29,720 --> 01:15:30,600 Després que hem llegit - 1600 01:15:30,600 --> 01:15:32,520 abans d'escriure això? 1601 01:15:32,520 --> 01:15:34,564 Dóna'm el número de línia. 1602 01:15:34,564 --> 01:15:35,950 >> ESTUDIANTS MÚLTIPLES: 83. 1603 01:15:35,950 --> 01:15:37,320 >> JASON Hirschhorn: 83. 1604 01:15:37,320 --> 01:15:38,570 Així que aquí. 1605 01:15:38,570 --> 01:15:40,830 1606 01:15:40,830 --> 01:15:45,710 Per a qui ho va fer, el codi és necessari escriure tots han d'anar a la dreta allà. 1607 01:15:45,710 --> 01:15:47,640 I això és l'únic codi que necessita per escriure. 1608 01:15:47,640 --> 01:15:51,520 Perquè, com hem escoltat, tot el que necessita fer és canviar aquests blau relativa, 1609 01:15:51,520 --> 01:15:54,420 nivells de vermell i verd de cada píxel. 1610 01:15:54,420 --> 01:15:58,250 >> Vostè ha llegit tot, i ara que està va a escriure. 1611 01:15:58,250 --> 01:16:03,100 Com puc aconseguir - si tinc aquesta cosa diu triple, just aquí, i és de 1612 01:16:03,100 --> 01:16:04,570 escrigui RGBTRIPLE - 1613 01:16:04,570 --> 01:16:08,650 bé, si ens fixem en bmp.h, Quin és RGBTRIPLE? 1614 01:16:08,650 --> 01:16:11,450 1615 01:16:11,450 --> 01:16:12,700 >> ESTUDIANTS 77: És una estructura. 1616 01:16:12,700 --> 01:16:17,440 1617 01:16:17,440 --> 01:16:18,900 >> JASON Hirschhorn: RGBTRIPLE és una estructura. 1618 01:16:18,900 --> 01:16:22,330 Veiem que aquí baix. 1619 01:16:22,330 --> 01:16:26,600 I així, si volia accedir, per exemple, la nivell vermell de l'estructura, com puc 1620 01:16:26,600 --> 01:16:30,005 accedir al nivell vermell d'aquesta estructura? 1621 01:16:30,005 --> 01:16:37,280 >> [CLASSE bufs] 1622 01:16:37,280 --> 01:16:38,530 >> ESTUDIANTS 78: RGBTRIPLE.rgbtred? 1623 01:16:38,530 --> 01:16:47,250 1624 01:16:47,250 --> 01:16:48,856 >> JASON Hirschhorn: Això és correcte? 1625 01:16:48,856 --> 01:16:53,040 >> ESTUDIANTS 79: Ha de ser el triple punt, en lloc de RGBTRIPLE punt? 1626 01:16:53,040 --> 01:16:54,120 >> JASON Hirschhorn: Triple. 1627 01:16:54,120 --> 01:16:56,700 Triple és la variable local, per la qual cosa aquí, no hi ha punters aquí. 1628 01:16:56,700 --> 01:16:58,400 Llavors només ha d'utilitzar la notació de punts. 1629 01:16:58,400 --> 01:17:00,480 Això em donarà el nivell de vermell. 1630 01:17:00,480 --> 01:17:06,180 Si vull canviar, m'acaba d'establir que iguala a alguna cosa diferent. 1631 01:17:06,180 --> 01:17:13,190 Així que de nou, aquesta línia de codi té accés a aquesta variable dins d'aquesta estructura, i 1632 01:17:13,190 --> 01:17:15,070 podem fer que alguna cosa nova. 1633 01:17:15,070 --> 01:17:20,040 >> Així que per a qui ho va fer, de nou, és a dir, en essència, el que hem de fer. 1634 01:17:20,040 --> 01:17:21,170 Molt simple. 1635 01:17:21,170 --> 01:17:25,020 Només has de canviar alguns nivells relatius i aquí és on aquest codi va. 1636 01:17:25,020 --> 01:17:27,720 Canviar la mida, d'altra banda, és una mica més complicat. 1637 01:17:27,720 --> 01:17:30,900 De fet, el canvi de mida és probablement el més difícil part d'aquest problema estableix. 1638 01:17:30,900 --> 01:17:32,720 Tenim tres minuts per al final. 1639 01:17:32,720 --> 01:17:34,910 >> Però un cop més, ja hem escrit la major part d'aquest codi, de manera que 1640 01:17:34,910 --> 01:17:36,500 ha de ser bastant familiar. 1641 01:17:36,500 --> 01:17:40,750 Quines són algunes coses que volem fer a canviar la mida, si vostè ha llegit sobre el 1642 01:17:40,750 --> 01:17:43,470 estableix problema? 1643 01:17:43,470 --> 01:17:45,290 Si vostè els dóna a mi, que es pot parlar d'ells. 1644 01:17:45,290 --> 01:17:47,340 Quines són algunes coses que volem fer? 1645 01:17:47,340 --> 01:17:47,970 >> ESTUDIANTS 80: Verticalment - 1646 01:17:47,970 --> 01:17:52,360 el que ha de canviar la seva mida en sentit horitzontal, però verticalment canviar la seva mida, així? 1647 01:17:52,360 --> 01:17:58,475 >> JASON Hirschhorn: Així que una si se'ns dóna píxel, i volem canviar la seva mida per un 1648 01:17:58,475 --> 01:18:03,460 factor de dos, ara ha de ser canviar de mida horitzontal i canviar de mida 1649 01:18:03,460 --> 01:18:05,220 verticalment. 1650 01:18:05,220 --> 01:18:06,640 Això té sentit? 1651 01:18:06,640 --> 01:18:07,060 Sí 1652 01:18:07,060 --> 01:18:09,300 Així que aquesta és probablement la major desafiament. 1653 01:18:09,300 --> 01:18:10,430 I parlarem d'això en un segon. 1654 01:18:10,430 --> 01:18:11,065 Sí 1655 01:18:11,065 --> 01:18:15,270 >> ESTUDIANTS 81: La forma en què pensava d'ella eres tu necessitaves imprimir - 1656 01:18:15,270 --> 01:18:15,490 >> JASON Hirschhorn: Espera. 1657 01:18:15,490 --> 01:18:17,580 No ens diguin el que vas fer. 1658 01:18:17,580 --> 01:18:20,620 Anem a parlar de la lògica. 1659 01:18:20,620 --> 01:18:21,870 >> ESTUDIANTS 81: OK. 1660 01:18:21,870 --> 01:18:25,090 1661 01:18:25,090 --> 01:18:27,410 Quina era la pregunta? 1662 01:18:27,410 --> 01:18:28,892 >> JASON Hirschhorn: Vostè acaba de aixecat la mà. 1663 01:18:28,892 --> 01:18:31,600 No hi havia dubte. 1664 01:18:31,600 --> 01:18:32,520 Permetin-me presentar ella. 1665 01:18:32,520 --> 01:18:34,560 Permetin-me discutir això breument. 1666 01:18:34,560 --> 01:18:38,400 Així que hem un píxel, volem replicar, tant horitzontals com 1667 01:18:38,400 --> 01:18:39,360 verticalment. 1668 01:18:39,360 --> 01:18:48,920 Així que l'ideal el que fem aquí és, que llegir en el nostre píxel, ho escrivim 1669 01:18:48,920 --> 01:18:51,690 però molts dels temps. 1670 01:18:51,690 --> 01:18:54,720 >> Però llavors tenim el nostre truc aquí, perquè llavors volem passar a la 1671 01:18:54,720 --> 01:18:57,660 següent línia i escriure al a partir de la següent línia. 1672 01:18:57,660 --> 01:19:02,960 Així que si volem replicar tant horitzontal i verticalment, el que és 1673 01:19:02,960 --> 01:19:05,050 una bona manera de fer això - 1674 01:19:05,050 --> 01:19:06,780 un de bo, encara que per fer això? 1675 01:19:06,780 --> 01:19:11,950 Així que no necessitem buscar constantment al voltant del nostre arxiu a col · locar les coses. 1676 01:19:11,950 --> 01:19:14,360 >> Aquesta pregunta podria no tenir tenia sentit, però crec que una 1677 01:19:14,360 --> 01:19:15,800 respondre-hi l'ajudarà. 1678 01:19:15,800 --> 01:19:17,210 >> ESTUDIANTS 82: Crear una matriu? 1679 01:19:17,210 --> 01:19:20,090 >> JASON Hirschhorn: Així que anem a pensar de cada arxiu com una fila. 1680 01:19:20,090 --> 01:19:22,550 Anem a pensar en termes de files. 1681 01:19:22,550 --> 01:19:26,670 Si tenim la nostra primera fila de la nostra petita foto, podem fer aquesta fila 1682 01:19:26,670 --> 01:19:30,640 en una gran fila d'una imatge gran, i després replicar aquesta fila però 1683 01:19:30,640 --> 01:19:34,250 moltes vegades que necessita per replicar-se, en lloc d'anar píxel per píxel, 1684 01:19:34,250 --> 01:19:37,260 que es posa confús quan tractar amb arxius. 1685 01:19:37,260 --> 01:19:38,730 >> Perquè si hem tingut - 1686 01:19:38,730 --> 01:19:41,260 M'estic quedant sense espai. 1687 01:19:41,260 --> 01:19:46,490 Si aquest és el nostre arxiu, i hem de un píxel allà, i volem posar 1688 01:19:46,490 --> 01:19:49,840 just aquí, encara tenim algunes coses aquesta necessitat d'anar-hi quan estem 1689 01:19:49,840 --> 01:19:51,450 l'escriptura i la creació del nostre nou arxiu - 1690 01:19:51,450 --> 01:19:53,250 nostre arxiu que és el doble de gran. 1691 01:19:53,250 --> 01:19:56,820 >> Però és realment difícil amb funcions d'arxiu saltar al voltant de les noves línies 1692 01:19:56,820 --> 01:20:00,260 d'aquesta manera i, a continuació, tornar aquí i posar les coses en aquest país. 1693 01:20:00,260 --> 01:20:04,500 És gairebé impossible fer alguna cosa així, si això té sentit. 1694 01:20:04,500 --> 01:20:10,180 Així que si pensem en termes de files, podem prendre la nostra fila i, a continuació, posar - 1695 01:20:10,180 --> 01:20:11,720 replicar files verticalment. 1696 01:20:11,720 --> 01:20:15,860 >> I així va ser com abordem el canvi de mida verticalment en lloc d'horitzontalment. 1697 01:20:15,860 --> 01:20:18,810 Això va ser una mica ràpid, i una mica confús. 1698 01:20:18,810 --> 01:20:22,375 Desafortunadament el nostre temps s'ha acabat. 1699 01:20:22,375 --> 01:20:27,340 Vaig a estar fora per a aquells de vostès aquí que tingui preguntes sobre la 1700 01:20:27,340 --> 01:20:30,500 conjunt de problemes, incloent la recuperació. 1701 01:20:30,500 --> 01:20:32,320 >> Així que anem a aixecar la sessió per ara. 1702 01:20:32,320 --> 01:20:34,480 I de nou, si vostè té qualsevol pregunta, podem xerrar exterior. 1703 01:20:34,480 --> 01:20:38,294