1 00:00:00,000 --> 00:00:07,810 2 00:00:07,810 --> 00:00:09,840 >> Jason Hirschhorn: Benvido, todos, a Semana 6. 3 00:00:09,840 --> 00:00:14,790 Estou feliz en velo todos vivos e ben despois quiz 0, porque sei que 4 00:00:14,790 --> 00:00:15,810 foi un pouco difícil. 5 00:00:15,810 --> 00:00:18,370 Pero, por sorte, todos vostedes fixo moi ben. 6 00:00:18,370 --> 00:00:21,680 E así que é marabilloso. 7 00:00:21,680 --> 00:00:25,840 Se está na miña sección, eu dei máis de faga súas probas xa. 8 00:00:25,840 --> 00:00:28,050 >> Unha parella de ti, vou atopar despois da aula. 9 00:00:28,050 --> 00:00:32,360 E se vostede é un estudante de extensión e non ten recibido o cuestionario de volta 10 00:00:32,360 --> 00:00:35,490 aínda, a súa TF é probablemente a traballar nel e graduouse o, e vai busca-la de volta 11 00:00:35,490 --> 00:00:36,490 pronto. 12 00:00:36,490 --> 00:00:39,650 Entón meus alumnos de extensión que son asistir agora - espero vivir - 13 00:00:39,650 --> 00:00:42,880 Vou comezar súas probas Pronto ben. 14 00:00:42,880 --> 00:00:45,670 >> Nosa axenda para hoxe é o seguinte. 15 00:00:45,670 --> 00:00:50,170 En primeiro lugar, imos pasar por riba de algúns recursos que CS50 ofrece para ti. 16 00:00:50,170 --> 00:00:54,590 Nós imos pasar por riba de proba 0 seguinte, e Vou responder a posibles preguntas que ninguén 17 00:00:54,590 --> 00:00:57,360 ten sobre problemas particulares. 18 00:00:57,360 --> 00:01:02,050 E entón, nós estaremos pasando por riba ficheiro E / S e conxunto de problemas 5. 19 00:01:02,050 --> 00:01:07,360 Estes dous últimos temas levará a maior parte da sección de hoxe. 20 00:01:07,360 --> 00:01:11,680 >> Coloque esta lista cada semana como un recordatorio para todos vostedes, pero do núcleo 21 00:01:11,680 --> 00:01:14,650 sección, temos só 90 minutos - nós non son capaces de cubrir todo o que eu 22 00:01:14,650 --> 00:01:16,280 Encantaríame cubrir para vós. 23 00:01:16,280 --> 00:01:21,170 Pero nós temos unha tonelada de recursos para ti debuxe sobre como comeza a coñecer 24 00:01:21,170 --> 00:01:24,000 o material e de traballo a través define o seu problema. 25 00:01:24,000 --> 00:01:30,810 >> Un recordatorio de que eu teño un texto en liña box, creado para que cubra se 26 00:01:30,810 --> 00:01:33,250 ten algún feedback para min, tanto positivos como 27 00:01:33,250 --> 00:01:35,180 construtivo, uns sección. 28 00:01:35,180 --> 00:01:38,600 Esta URL está situado aquí. 29 00:01:38,600 --> 00:01:43,250 Entón, por favor, tome un momento se ten calquera producto, sexa durante a sección, 30 00:01:43,250 --> 00:01:48,030 ou despois, ou despois de ver o vídeo en liña, para me dar o seu producto. 31 00:01:48,030 --> 00:01:52,100 Eu realmente aprecio todo e todo. 32 00:01:52,100 --> 00:01:55,730 >> Entón, eu teño tido pequenas conversas con unha morea de miña 33 00:01:55,730 --> 00:01:59,350 os alumnos durante toda a semana - como eu entrego quizzes atrás, fala de 34 00:01:59,350 --> 00:02:01,480 por suposto, ver como está facendo. 35 00:02:01,480 --> 00:02:05,120 E un tema xurdiu unha e máis en falar - en 36 00:02:05,120 --> 00:02:05,660 en particular - 37 00:02:05,660 --> 00:02:07,710 conxuntos de problemas. 38 00:02:07,710 --> 00:02:13,090 E eu teño que encapsulado tema na tarxeta agora. 39 00:02:13,090 --> 00:02:16,630 >> Esencialmente, hai unha diferenza entre transformando en algo que é 40 00:02:16,630 --> 00:02:19,590 feito correctamente e algo que é ben feito. 41 00:02:19,590 --> 00:02:22,920 A maioría das persoas teñen feito fantástico en termos de corrección - 42 00:02:22,920 --> 00:02:25,460 5 de ou 4 da serie de exercicios en todos. 43 00:02:25,460 --> 00:02:27,930 A maioría das persoas están quedando os de todos os tempos. 44 00:02:27,930 --> 00:02:31,150 >> Con todo, só porque fixo algo certo, non significa que ten 45 00:02:31,150 --> 00:02:34,450 feito algo tan elegante, ou de forma eficaz, é tan limpa como 46 00:02:34,450 --> 00:02:35,270 podería ter feito isto. 47 00:02:35,270 --> 00:02:36,790 E iso é o que o proxecto - 48 00:02:36,790 --> 00:02:39,230 e ata certo punto, estilo menor - 49 00:02:39,230 --> 00:02:40,450 eixes son para. 50 00:02:40,450 --> 00:02:45,130 Entón, eu estou empuxando todos vós, e outros TFS están empurrando vostedes, non só pola súa vez, 51 00:02:45,130 --> 00:02:48,320 en cousas que son correctas, pero acaban nas cousas que son codificadas tamén. 52 00:02:48,320 --> 00:02:53,060 >> Non facer innecesario para loops, non recalcular variables se 53 00:02:53,060 --> 00:02:53,800 non precisa. 54 00:02:53,800 --> 00:02:58,520 Por exemplo, mirando cara atrás para conxunto de problemas 4, cando a colocación dos ladrillos no 55 00:02:58,520 --> 00:03:03,070 pantalla, cada liña - cada ladrillo nunha determinada liña ten a mesma coordenada y - 56 00:03:03,070 --> 00:03:04,390 coordinar a mesma altura. 57 00:03:04,390 --> 00:03:07,930 >> Así que coordinada y non precisaba ser calculada no interior do interior 58 00:03:07,930 --> 00:03:11,070 Nested loop que probablemente usado para poñer os ladrillos na pantalla. 59 00:03:11,070 --> 00:03:14,030 El só debe ser calculado cada vez que cambiou unha liña, ou 60 00:03:14,030 --> 00:03:15,200 descendeu unha fileira. 61 00:03:15,200 --> 00:03:19,760 Entón diga se hai 10 ladrillos nun fila, cada ladrillo pode ter o mesmo 62 00:03:19,760 --> 00:03:22,260 coordinada y, e que coordinada y só se pode calcular 63 00:03:22,260 --> 00:03:23,550 dunha vez por todas deses. 64 00:03:23,550 --> 00:03:27,810 >> Non ten que ser calculado 10 veces, nin esta necesidade cálculo 65 00:03:27,810 --> 00:03:30,220 pasar no real función de chamada - 66 00:03:30,220 --> 00:03:33,020 a nova función chamada gracked. 67 00:03:33,020 --> 00:03:37,820 Entón, se iso foi un pouco confuso para ti, máis xenericamente, as cousas que 68 00:03:37,820 --> 00:03:40,730 non ocorrer en cada momento pasar por un loop FOR non debe ser 69 00:03:40,730 --> 00:03:42,900 poñer dentro do loop FOR, e non debe ocorrer cada vez que vai 70 00:03:42,900 --> 00:03:44,080 a través do lazo FOR. 71 00:03:44,080 --> 00:03:49,270 >> Outro exemplo bo proxecto, vimos a Semana 3 por 15, podería manter 72 00:03:49,270 --> 00:03:50,500 pista de cero. 73 00:03:50,500 --> 00:03:53,600 Entón, cando arrincar a tarxeta, vostede gardar - nunha variable global, quizais - 74 00:03:53,600 --> 00:03:56,140 xe y-coordinar de cero. 75 00:03:56,140 --> 00:03:57,520 E, a continuación, sempre que - 76 00:03:57,520 --> 00:04:00,310 na súa función de movemento, sempre que se fai un movemento exitoso, entón actualiza o 77 00:04:00,310 --> 00:04:02,040 localización de cero. 78 00:04:02,040 --> 00:04:06,240 >> Isto iría garda-lo de ter que facer nested loops para ollar a través dos 79 00:04:06,240 --> 00:04:10,700 embarcarse cada vez na súa función de movemento e atopar a cero, ou atopar o azulexo, 80 00:04:10,700 --> 00:04:12,460 e, a continuación, comprobar o que está ao seu lado. 81 00:04:12,460 --> 00:04:16,329 Pola contra, ten a localización do cero, pode só ollar por riba, a continuación, 82 00:04:16,329 --> 00:04:21,160 e para a esquerda e dereita do mesmo, para atopar a tella que busca. 83 00:04:21,160 --> 00:04:24,970 >> Polo tanto, en termos dos programas que estamos escribindo, eles nunca son grandes abondo 84 00:04:24,970 --> 00:04:28,580 que algunhas desas decisións de proxecto son realmente vai dificultar a súa 85 00:04:28,580 --> 00:04:31,670 programa, ou facelo funcionar máis lentamente, ou quizais mesmo quedar sen memoria. 86 00:04:31,670 --> 00:04:35,030 Pero aínda estamos empurrando vostedes para escribir tan elegante e 87 00:04:35,030 --> 00:04:36,450 código eficiente canto posible. 88 00:04:36,450 --> 00:04:39,910 >> Entón, se acabar escribindo cousas que ten unha significativamente maior 89 00:04:39,910 --> 00:04:44,660 ámbito, que será escrito con boa proxectar ademais de ser correcta. 90 00:04:44,660 --> 00:04:46,300 Así, un número de que ten trouxo isto. 91 00:04:46,300 --> 00:04:48,560 Isto é algo que estamos a buscar - algo que seguiremos 92 00:04:48,560 --> 00:04:49,840 empurralo lo caras. 93 00:04:49,840 --> 00:04:52,460 >> Se ten algunha dúbida sobre o proxecto do seu programa, sexa a vontade 94 00:04:52,460 --> 00:04:56,870 para chegar a min, e eu estou feliz percorrer o seu programa con vostede, 95 00:04:56,870 --> 00:05:01,320 e apuntar algún do deseño decisións que fixo, e darlle algúns 96 00:05:01,320 --> 00:05:06,240 suxestións sobre como facer aínda mellores decisións de proxecto. 97 00:05:06,240 --> 00:05:08,870 >> Entón, imos seguir adiante para falar de Quiz 0. 98 00:05:08,870 --> 00:05:11,300 Antes de facelo, alguén ten algunha dúbida sobre o que 99 00:05:11,300 --> 00:05:14,252 Eu cobre ata agora? 100 00:05:14,252 --> 00:05:21,500 >> [Farfalhar] 101 00:05:21,500 --> 00:05:22,750 >> Jason Hirschhorn: Sete segundos. 102 00:05:22,750 --> 00:05:23,250 Aceptar. 103 00:05:23,250 --> 00:05:24,970 Imos falar sobre Quiz 0 a un bit. 104 00:05:24,970 --> 00:05:26,700 A maioría de vós ten o seu quiz 0 costas. 105 00:05:26,700 --> 00:05:29,820 Se non o fai, espero que Lembra-se un pouco. 106 00:05:29,820 --> 00:05:34,770 Pero se tomou quiz 0, entón tamén ten acceso ao PDF en liña en 107 00:05:34,770 --> 00:05:35,890 as solucións de mostras. 108 00:05:35,890 --> 00:05:39,480 >> Alguén ten algunha dúbida antes ir para o material da semana sobre 109 00:05:39,480 --> 00:05:41,520 un problema particular en proba 0 - 110 00:05:41,520 --> 00:05:44,630 por que a resposta é o que é? 111 00:05:44,630 --> 00:05:47,255 Ten alguén confuso sobre algo? 112 00:05:47,255 --> 00:05:50,230 Mesmo se ten o problema dereito, pero só quere me explicar isto un pouco 113 00:05:50,230 --> 00:05:52,640 máis, eu estou feliz en facelo agora. 114 00:05:52,640 --> 00:05:57,800 >> Así que pedín que vostedes veña preparado con algunha 115 00:05:57,800 --> 00:05:59,440 pensamentos sobre Quiz 0. 116 00:05:59,440 --> 00:06:02,660 Entón, quen quere ter nos comezou cunha pregunta ou 117 00:06:02,660 --> 00:06:04,655 comentar Quiz 0? 118 00:06:04,655 --> 00:06:07,435 119 00:06:07,435 --> 00:06:10,410 >> [PAPER furtos] 120 00:06:10,410 --> 00:06:11,470 >> Jason Hirschhorn: Non todo o mundo fixo perfectamente. 121 00:06:11,470 --> 00:06:12,720 Entón eu sei [risas] 122 00:06:12,720 --> 00:06:15,950 ten que haber algunhas preguntas sobre Quiz 0. 123 00:06:15,950 --> 00:06:27,940 124 00:06:27,940 --> 00:06:28,590 Aceptar. 125 00:06:28,590 --> 00:06:29,210 Si 126 00:06:29,210 --> 00:06:29,600 Ompica. 127 00:06:29,600 --> 00:06:30,520 >> OMPICA: Número 10. 128 00:06:30,520 --> 00:06:33,560 >> Jason Hirschhorn: Número 10. 129 00:06:33,560 --> 00:06:35,400 Cal era o número 10? 130 00:06:35,400 --> 00:06:35,840 >> OMPICA: A - 131 00:06:35,840 --> 00:06:36,420 >> Jason Hirschhorn: I haven't - 132 00:06:36,420 --> 00:06:37,670 >> OMPICA: The inclúen - 133 00:06:37,670 --> 00:06:40,060 134 00:06:40,060 --> 00:06:42,180 >> Jason Hirschhorn: número 10 tiña oito anos I - a escrita de oito a i? 135 00:06:42,180 --> 00:06:42,980 >> OMPICA: Yeah. 136 00:06:42,980 --> 00:06:43,630 >> Jason Hirschhorn: Aceptar. 137 00:06:43,630 --> 00:06:47,390 Así, unha pregunta que pode ter preguntou se estou presciente? 138 00:06:47,390 --> 00:06:48,630 A resposta é si. 139 00:06:48,630 --> 00:06:52,060 Na sección antes da proba, pedín vostedes para codificar tanto Sterling e 140 00:06:52,060 --> 00:06:52,980 de oito a i. 141 00:06:52,980 --> 00:06:54,770 Ambos pasou aparecen no quiz. 142 00:06:54,770 --> 00:06:57,510 Polo tanto, agardamos, paga atención a iso. 143 00:06:57,510 --> 00:07:02,520 >> E se tivese, entón tería que probabelmente ben feito sobre os dous. 144 00:07:02,520 --> 00:07:06,030 Pero oito para i, non o fixemos en realidade código lo en clase, pero foi, unha vez máis, 145 00:07:06,030 --> 00:07:07,500 preguntado sobre o quiz. 146 00:07:07,500 --> 00:07:13,270 Así, un par de cousas para levar notar cando a codificación de oito a i. 147 00:07:13,270 --> 00:07:17,320 O primeiro que, por cuestión, foi que precisaba para comprobar que a cadea 148 00:07:17,320 --> 00:07:20,300 foi igual a nulo. 149 00:07:20,300 --> 00:07:28,060 >> Algunhas persoas tentaron comprobar máis tarde no programa se s soporte era - 150 00:07:28,060 --> 00:07:30,940 así un carácter específico en que cadea - foi igual a nulo. 151 00:07:30,940 --> 00:07:35,600 Pero lembre, que é esencialmente nulo - é bo pensar 152 00:07:35,600 --> 00:07:39,100 nulo como un punteiro de cero - un punteiro a cero - 153 00:07:39,100 --> 00:07:40,920 en algún lugar en memoria onde vostede non pode acceder. 154 00:07:40,920 --> 00:07:44,730 >> Entón, se algo é igual a nulo, vostede sei que non foi inicializado, 155 00:07:44,730 --> 00:07:46,430 ou non hai nada alí. 156 00:07:46,430 --> 00:07:50,950 Entón s é unha estrela char, s soporte de i é un char. 157 00:07:50,950 --> 00:07:57,410 Por iso, ten sentido comparar s como nulo, pero o soporte non s i como nulo. 158 00:07:57,410 --> 00:07:59,390 Pero unha vez máis - de xeito que foi o primeiro que debería facer - 159 00:07:59,390 --> 00:08:03,510 asegúrese de que realmente teño unha corda real. 160 00:08:03,510 --> 00:08:08,020 >> Logo quería pasar por cada carácter na cadea. 161 00:08:08,020 --> 00:08:12,500 E así, iso sería como un soporte de s Eu, por exemplo, se i é o iterador. 162 00:08:12,500 --> 00:08:17,250 E teña ese carácter, e obter o seu valor real. 163 00:08:17,250 --> 00:08:21,800 Telo gardado como un char, pero o valor ASCII para a cero - 164 00:08:21,800 --> 00:08:23,010 cero como un personaxe - 165 00:08:23,010 --> 00:08:25,450 non é, en realidade, o enteiro cero. 166 00:08:25,450 --> 00:08:28,700 É algún outro número que se pode mirar para arriba na táboa ASCII. 167 00:08:28,700 --> 00:08:30,790 >> Así, un xeito de corrixir iso - probablemente, o mellor xeito de corrixir 168 00:08:30,790 --> 00:08:33,760 que - é restar o valor do carácter - 169 00:08:33,760 --> 00:08:35,140 cero como un personaxe. 170 00:08:35,140 --> 00:08:38,490 Aspas Entón negativo, cero, outra aspa simple. 171 00:08:38,490 --> 00:08:44,620 Isto vai levar o número que ten como un char, e obtelo igual a 172 00:08:44,620 --> 00:08:46,720 o número como un número enteiro real. 173 00:08:46,720 --> 00:08:50,300 >> E iso é moi semellante á formulación unha chea de xente tivo no 174 00:08:50,300 --> 00:08:52,800 problema axustaron 2, con César e Viginere - 175 00:08:52,800 --> 00:08:55,160 estas cifras, cando foron xirando-os. 176 00:08:55,160 --> 00:08:59,210 Entón, despois de telo como un número de de cero a nove, entón - dependendo 177 00:08:59,210 --> 00:09:02,750 a onde vai o número final - hai que multiplicala lo 178 00:09:02,750 --> 00:09:04,120 por unha potencia de 10. 179 00:09:04,120 --> 00:09:07,340 >> Algunhas persoas se mudaron de tras para a fronte, e multiplicou o individuo 180 00:09:07,340 --> 00:09:08,940 número por unha potencia de 10. 181 00:09:08,940 --> 00:09:11,160 Algunhas persoas pasaron de diante para atrás - 182 00:09:11,160 --> 00:09:14,430 e así tivo a maior ordenar os números en primeiro lugar - 183 00:09:14,430 --> 00:09:18,190 e ía salvar aqueles en un variable do contador global. 184 00:09:18,190 --> 00:09:20,880 E, a continuación, cada vez a través do PARA loop, multiplicar ese xigante mundial 185 00:09:20,880 --> 00:09:25,640 combater variable por 10, para facer espazo á seguinte carbón. 186 00:09:25,640 --> 00:09:28,750 >> Entón iso foi un pouco confuso, sen me escribilo lo no taboleiro. 187 00:09:28,750 --> 00:09:31,550 Pero a solución mostra está dispoñible para ti. 188 00:09:31,550 --> 00:09:32,870 Pero estas eran as cousas grandes que estabamos a buscar. 189 00:09:32,870 --> 00:09:36,400 Tamén unha verificación para asegurarse de que cada carácter individual era de feito un 190 00:09:36,400 --> 00:09:39,780 carácter entre cero e nove anos, e non algún outro personaxe, como un A, 191 00:09:39,780 --> 00:09:41,160 por exemplo. 192 00:09:41,160 --> 00:09:43,150 >> Esas foron as cousas que estaban a buscar no esta pregunta. 193 00:09:43,150 --> 00:09:46,510 194 00:09:46,510 --> 00:09:47,980 Isto responde a súa pregunta? 195 00:09:47,980 --> 00:09:49,320 >> OMPICA: Yeah. 196 00:09:49,320 --> 00:09:50,240 >> Jason Hirschhorn: Aceptar. 197 00:09:50,240 --> 00:09:53,940 Existen outras cuestións sobre Quiz 0? 198 00:09:53,940 --> 00:09:55,440 E sobre a compilación? 199 00:09:55,440 --> 00:09:56,740 Todo o mundo compilando non? 200 00:09:56,740 --> 00:09:58,370 Non 201 00:09:58,370 --> 00:09:58,840 Había un - 202 00:09:58,840 --> 00:10:01,010 [Risas] 203 00:10:01,010 --> 00:10:03,265 Calquera dúbida sobre o proceso de compilación? 204 00:10:03,265 --> 00:10:06,050 205 00:10:06,050 --> 00:10:06,966 Guau. 206 00:10:06,966 --> 00:10:11,090 >> [PAPER furtos] 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: É o número 7 - chou? 210 00:10:14,140 --> 00:10:16,500 >> Jason Hirschhorn: Número 7. 211 00:10:16,500 --> 00:10:20,670 Número 7 foi obter un número enteiro aleatorio. 212 00:10:20,670 --> 00:10:21,110 Excelente. 213 00:10:21,110 --> 00:10:25,630 Entón, está dado un enteiro e un a b enteiro, e quere un chou 214 00:10:25,630 --> 00:10:28,710 enteiro entre a e b. 215 00:10:28,710 --> 00:10:31,740 Podemos realmente escribir este en da tarxeta, xa que este 216 00:10:31,740 --> 00:10:33,320 era unha liña de código - 217 00:10:33,320 --> 00:10:34,390 un xeito de facelo. 218 00:10:34,390 --> 00:10:37,810 >> Entón, nós estamos dada drand como función que poderiamos usar. 219 00:10:37,810 --> 00:10:38,820 E o que drand - 220 00:10:38,820 --> 00:10:40,290 asumindo que foi sementado - 221 00:10:40,290 --> 00:10:42,316 o que drand volver? 222 00:10:42,316 --> 00:10:44,840 >> MICHAEL: A flutuación entre 0,0 e 1,0. 223 00:10:44,840 --> 00:10:45,530 >> Jason Hirschhorn: Un número - si. 224 00:10:45,530 --> 00:10:47,910 Un número entre 0 e 1. 225 00:10:47,910 --> 00:10:51,760 E así temos b e a. 226 00:10:51,760 --> 00:10:55,480 E entón temos o noso número aleatorio entre 0 e 1 dado a nós por drand. 227 00:10:55,480 --> 00:11:01,480 228 00:11:01,480 --> 00:11:06,630 Algunhas persoas tentaron poñer b, ou b menos un, ou algo dentro aqueles 229 00:11:06,630 --> 00:11:07,960 parénteses. 230 00:11:07,960 --> 00:11:11,210 Isto significa que son argumentos para esta función. 231 00:11:11,210 --> 00:11:13,450 >> drand non leva ningún argumento - como getString fai 232 00:11:13,450 --> 00:11:14,330 Non Tomé ningún argumento. 233 00:11:14,330 --> 00:11:16,600 Entón é só paréntese aberta, preto paren - e que, en si, é 234 00:11:16,600 --> 00:11:17,330 a chamada de función. 235 00:11:17,330 --> 00:11:19,770 E iso dálle un número entre 0 e 1. 236 00:11:19,770 --> 00:11:22,820 Por suposto, temos unha gama completa que números poden Pol 237 00:11:22,820 --> 00:11:28,470 >> Digamos que, se b é 10 e un é de 5, nós realmente Quere un número con un intervalo de 5. 238 00:11:28,470 --> 00:11:36,940 Polo tanto, a seguinte cousa que necesitamos facer é multiplique iso polo menos unha pista de b. 239 00:11:36,940 --> 00:11:40,380 Así, supoñendo que é multiplicado. 240 00:11:40,380 --> 00:11:42,590 E iso vai dar unha serie dentro dun determinado intervalo. 241 00:11:42,590 --> 00:11:46,610 E esa franxa específica sendo o diferenza entre b menos un. 242 00:11:46,610 --> 00:11:50,030 >> E, finalmente, que só vai darlle a partir de - din que a franxa entre b menos un 243 00:11:50,030 --> 00:11:52,520 é 5, que vai dar unha número de 0 a 5. 244 00:11:52,520 --> 00:11:56,000 Pero se un é de feito 5, necesitamos aumentar esta franxa de ata onde é 245 00:11:56,000 --> 00:12:01,380 de feito, debería ser, engadindo un. 246 00:12:01,380 --> 00:12:02,580 Así que recibe o dereito de lóxica. 247 00:12:02,580 --> 00:12:03,745 E entón, que tería outra pregunta? 248 00:12:03,745 --> 00:12:04,547 >> MICHAEL: Non 249 00:12:04,547 --> 00:12:06,010 Eu me sinto moi idiota agora. 250 00:12:06,010 --> 00:12:06,405 [Risas] 251 00:12:06,405 --> 00:12:06,730 >> Jason Hirschhorn: Non 252 00:12:06,730 --> 00:12:08,640 Non se sinta realmente estúpido. 253 00:12:08,640 --> 00:12:10,560 Un número de persoas que loitaron con esta cuestión. 254 00:12:10,560 --> 00:12:13,920 E, a continuación, a outra cuestión é, drand, dixo, dálle un float - 255 00:12:13,920 --> 00:12:14,940 retorna un float. 256 00:12:14,940 --> 00:12:18,020 Pero esta función realmente pediu para un enteiro para ser devolto. 257 00:12:18,020 --> 00:12:23,700 >> Non precisa de publicar isto explicitamente a un número enteiro, porque estes 258 00:12:23,700 --> 00:12:29,090 operacións han tratalo como un todo float - como un número de coma flotante. 259 00:12:29,090 --> 00:12:31,570 Lle gusta a vontade - aínda que iso é un número enteiro, esta vontade 260 00:12:31,570 --> 00:12:32,890 ser multiplicado correctamente. 261 00:12:32,890 --> 00:12:34,000 Toda a multiplicación funcionará. 262 00:12:34,000 --> 00:12:35,060 Non precisa lanzalo aquí. 263 00:12:35,060 --> 00:12:36,480 En realidade, non debe lanzalo. 264 00:12:36,480 --> 00:12:37,310 >> Iso sería - 265 00:12:37,310 --> 00:12:40,750 se lanzar un número que está entre 0 e 1 - 266 00:12:40,750 --> 00:12:42,680 un número aleatorio, un punto flotante - 267 00:12:42,680 --> 00:12:47,850 logo será ou só 0 ou 1, de xeito vai perder todo isto de precisión. 268 00:12:47,850 --> 00:12:50,120 Pero ao final, cando atrás, fica automaticamente 269 00:12:50,120 --> 00:12:51,620 enviado de volta como un enteiro. 270 00:12:51,620 --> 00:12:56,870 Así que non facer que lanzando-se. 271 00:12:56,870 --> 00:13:00,810 >> Polo tanto, esta foi a resposta a a esta pregunta, o número 7. 272 00:13:00,810 --> 00:13:02,190 Calquera outras preguntas sobre quiz 0? 273 00:13:02,190 --> 00:13:03,300 Si, Annie. 274 00:13:03,300 --> 00:13:05,050 >> ANNIE: Cando usamos recursiva - 275 00:13:05,050 --> 00:13:07,850 cando é que imos usar loops iterativos? 276 00:13:07,850 --> 00:13:10,210 >> Jason Hirschhorn: Cando utilice os recursiva - así máis xeral, a 277 00:13:10,210 --> 00:13:14,110 pros e contras de recursão contra unha visión iterativa. 278 00:13:14,110 --> 00:13:17,110 Alguén pode ofrecer un profesional ou un engodo? 279 00:13:17,110 --> 00:13:19,460 Por favor? 280 00:13:19,460 --> 00:13:20,140 Non pode ninguén. 281 00:13:20,140 --> 00:13:22,526 Quen pode ofrecer un profesional ou un engodo? 282 00:13:22,526 --> 00:13:26,963 >> [PAPER furtos] 283 00:13:26,963 --> 00:13:29,730 >> ALUMNO 1: recursiva é menor codificación - menos de dixitación? 284 00:13:29,730 --> 00:13:33,170 >> Jason Hirschhorn: Entón, xeralmente, recursão sobre todo, unha función - 285 00:13:33,170 --> 00:13:35,750 ou un algoritmo como merge tipo - que se presta 286 00:13:35,750 --> 00:13:37,300 para unha visión recursiva - 287 00:13:37,300 --> 00:13:40,710 pode ser máis simple para codificar de forma recursiva. 288 00:13:40,710 --> 00:13:43,940 E só facer máis sentido para facelo de forma recursiva. 289 00:13:43,940 --> 00:13:46,230 Entón iso sería un profesional para a recursividade. 290 00:13:46,230 --> 00:13:46,610 Outros? 291 00:13:46,610 --> 00:13:47,467 Si? 292 00:13:47,467 --> 00:13:49,240 >> ALUMNO 2: Con de recursión - 293 00:13:49,240 --> 00:13:50,940 Usa máis memoria. 294 00:13:50,940 --> 00:13:52,200 >> Jason Hirschhorn: Entón exactamente correcto. 295 00:13:52,200 --> 00:13:55,720 Unha función recursiva seguirá a engadir pila de cadros para a pila. 296 00:13:55,720 --> 00:13:59,690 Entón, se está operando en unha morea de números, e ten que chamar esta 297 00:13:59,690 --> 00:14:02,560 funcionar moi, entón certamente vai ocupan máis memoria, mentres 298 00:14:02,560 --> 00:14:05,810 unha visión iterativa só vai poñer un apilar cadro na pila, porque 299 00:14:05,810 --> 00:14:08,420 todo acontece dentro dunha función. 300 00:14:08,420 --> 00:14:11,010 >> Outros pros e contras? 301 00:14:11,010 --> 00:14:11,500 É. 302 00:14:11,500 --> 00:14:12,550 >> ALUMNO 3: Pros para recursión. 303 00:14:12,550 --> 00:14:15,950 Non ten que determinar en avanzar cantas veces o 304 00:14:15,950 --> 00:14:17,660 código tivo que ser repetida. 305 00:14:17,660 --> 00:14:22,810 Pode ter un número predeterminado de veces que tes que interactuar, así 306 00:14:22,810 --> 00:14:26,420 recursão é mellor, porque é preciso que o resultado. 307 00:14:26,420 --> 00:14:27,780 >> Jason Hirschhorn: Eu creo que iso é verdade. 308 00:14:27,780 --> 00:14:30,770 Pero eu creo que en ambos os casos nunca faría iso - 309 00:14:30,770 --> 00:14:33,290 probablemente obter un entrada do usuario. 310 00:14:33,290 --> 00:14:35,990 Ou esa función tería algunha entrada que ía determinar cantas veces 311 00:14:35,990 --> 00:14:36,730 debe ser executado. 312 00:14:36,730 --> 00:14:39,520 Entón, xeralmente, non faría código duro - mesmo nunha abordaxe iterativa - como 313 00:14:39,520 --> 00:14:40,940 moitas veces ese ciclo debe ser executado. 314 00:14:40,940 --> 00:14:46,100 315 00:14:46,100 --> 00:14:48,670 >> Será que ten outro que estaba pensar, Annie? 316 00:14:48,670 --> 00:14:49,330 Aceptar. 317 00:14:49,330 --> 00:14:51,650 Polo tanto, estas son probablemente os dous - 318 00:14:51,650 --> 00:14:54,370 o maior pro eo maior con un recursiva contra 319 00:14:54,370 --> 00:14:57,080 unha visión iterativa. 320 00:14:57,080 --> 00:14:57,690 Aceptar. 321 00:14:57,690 --> 00:14:59,465 Calquera outra cousa en quiz 0? 322 00:14:59,465 --> 00:15:08,940 323 00:15:08,940 --> 00:15:09,920 >> Imos seguir adiante. 324 00:15:09,920 --> 00:15:15,260 File I / O. Hai un marabilloso curta esta semana en arquivo I / O que esperamos 325 00:15:15,260 --> 00:15:19,270 asistiu múltiple veces, e admirado. 326 00:15:19,270 --> 00:15:22,910 Moito traballo foi para tanto, e eu teño oído é demencia útil. 327 00:15:22,910 --> 00:15:25,740 Eu tamén incluíu a ligazón nesta foto, no caso de non ter unha 328 00:15:25,740 --> 00:15:29,160 oportunidade de velo 10 veces. 329 00:15:29,160 --> 00:15:35,280 >> Entón, nós estamos indo a ir brevemente sobre o principais pasos para abrir e traballar 330 00:15:35,280 --> 00:15:38,400 cos arquivos, e despois nós imos mergullo nun problema de codificación antes 331 00:15:38,400 --> 00:15:40,400 examinar o conxunto de problemas. 332 00:15:40,400 --> 00:15:44,330 Entón, de novo, eu vou poñer isto en a pantalla, pero eu vou falar para 333 00:15:44,330 --> 00:15:47,630 só un minuto sobre o que estamos facendo aquí co arquivo I/O-- 334 00:15:47,630 --> 00:15:49,090 O que significa isto? 335 00:15:49,090 --> 00:15:55,280 >> Isto significa que podemos crear o noso programas e, a continuación, temos os nosos programas 336 00:15:55,280 --> 00:16:00,370 saída, e non fixeron ningún impacto sobre o mundo fóra do noso programa. 337 00:16:00,370 --> 00:16:04,630 Pero cando comezamos a traballar con arquivos - tanto lelos e crear 338 00:16:04,630 --> 00:16:10,460 eles - que pode ter algún efecto sobre a mundo fóra do noso programa. 339 00:16:10,460 --> 00:16:15,440 >> Así como o Microsoft Word non foi capaz facer os documentos de Word, logo 340 00:16:15,440 --> 00:16:18,710 xa que Microsoft Word parar, todo o seu traballo tería ido, e que sería 341 00:16:18,710 --> 00:16:19,740 realmente ser inútil. 342 00:16:19,740 --> 00:16:23,620 Queremos finalmente poder escribir programas que poden afectar o 343 00:16:23,620 --> 00:16:31,350 mundo ao seu redor, tanto pola inxestión de entradas complexas - en termos de ficheiros e 344 00:16:31,350 --> 00:16:37,080 a través de arquivos, e tamén crear interesantes e saídas convincentes - 345 00:16:37,080 --> 00:16:39,520 en termos de diferentes tipos de arquivos. 346 00:16:39,520 --> 00:16:43,730 >> É por iso que estamos empezando a aprender a traballar con arquivos. 347 00:16:43,730 --> 00:16:47,080 En concreto, o o que facemos é a seguinte. 348 00:16:47,080 --> 00:16:47,680 É moi sinxelo. 349 00:16:47,680 --> 00:16:51,530 Hai só un par de pasos, e son listados aquí neste código. 350 00:16:51,530 --> 00:16:55,130 Entón imos pasar por este código liña por liña. 351 00:16:55,130 --> 00:16:57,630 >> En primeiro lugar, ve destaque - 352 00:16:57,630 --> 00:17:01,330 cando está a traballar con un arquivo, independentemente do tipo de ficheiro que é, 353 00:17:01,330 --> 00:17:02,670 ten que abrilo. 354 00:17:02,670 --> 00:17:05,130 E é cunha chamada a fopen - 355 00:17:05,130 --> 00:17:05,950 ben aquí. 356 00:17:05,950 --> 00:17:07,980 Incluír o nome do ficheiro. 357 00:17:07,980 --> 00:17:11,930 Se o ficheiro non está no seu directorio, ou o cartafol onde este programa 358 00:17:11,930 --> 00:17:15,910 vidas, entón tamén ten que incluír un camiño cara a onde o arquivo está. 359 00:17:15,910 --> 00:17:19,099 >> Supoñamos que esta ficheiro chamado "text.txt" - 360 00:17:19,099 --> 00:17:24,220 un documento de texto simple - está no mesmo cartafol que este programa é. 361 00:17:24,220 --> 00:17:26,859 Entón, iso é outra cousa a ter en mente - que, se quere abrir un ficheiro 362 00:17:26,859 --> 00:17:30,050 noutro lugar, realmente precisa para incluír a súa localización. 363 00:17:30,050 --> 00:17:33,520 >> En segundo lugar, pode pasar un argumento para fopen, e iso é o que quere facer 364 00:17:33,520 --> 00:17:34,620 co arquivo. 365 00:17:34,620 --> 00:17:38,450 Existen tres principais argumentos que vai pasar para fopen. 366 00:17:38,450 --> 00:17:40,060 Quen me pode dar os tres? 367 00:17:40,060 --> 00:17:44,960 368 00:17:44,960 --> 00:17:47,130 Quen me pode dar un deles? 369 00:17:47,130 --> 00:17:48,130 Si 370 00:17:48,130 --> 00:17:50,010 >> ESTUDANTE 4: O nome do ficheiro? 371 00:17:50,010 --> 00:17:50,440 >> Jason Hirschhorn: Sentímolo. 372 00:17:50,440 --> 00:17:55,490 Tres principais argumentos pode pasar como o segundo argumento para fopen. 373 00:17:55,490 --> 00:17:57,060 Está certo - o nome do ficheiro é o primeiro argumento. 374 00:17:57,060 --> 00:18:01,620 Pero o segundo argumento para fopen son xeralmente tres cordas, e - si. 375 00:18:01,620 --> 00:18:02,210 Aleja. 376 00:18:02,210 --> 00:18:03,490 >> ALEJA: A para aumento. 377 00:18:03,490 --> 00:18:06,840 >> Jason Hirschhorn: A, se quere Adxuntar un arquivo que xa existe. 378 00:18:06,840 --> 00:18:07,810 >> ESTUDANTE 5: R para ler. 379 00:18:07,810 --> 00:18:09,930 >> Jason Hirschhorn: R si quere ler un arquivo. 380 00:18:09,930 --> 00:18:10,670 >> ESTUDANTE 6: W a gravación. 381 00:18:10,670 --> 00:18:12,840 >> Jason Hirschhorn: E w, se quero escribir a un ficheiro. 382 00:18:12,840 --> 00:18:17,570 Polo tanto, neste caso, estamos escribindo para o arquivo, polo que temos w. 383 00:18:17,570 --> 00:18:22,360 Abri-lo, tamén ten que gardar o arquivo en algún lugar, e iso é co 384 00:18:22,360 --> 00:18:26,000 codificar para o lado esquerdo da o operador de asignación - 385 00:18:26,000 --> 00:18:31,220 Estou creando un punteiro a un ficheiro chamado neste caso de arquivo. 386 00:18:31,220 --> 00:18:36,070 >> Non imos preocuparnos que esa cousa ARQUIVO todas as tapas é. 387 00:18:36,070 --> 00:18:40,600 Tan só dicir, é un longo fluxo de ceros e uns. 388 00:18:40,600 --> 00:18:44,970 E é así que imos operalo e comprende-lo. 389 00:18:44,970 --> 00:18:47,300 >> A seguinte cousa que cómpre facer - e Isto é moi importante - 390 00:18:47,300 --> 00:18:49,070 sempre que abrir un arquivo - 391 00:18:49,070 --> 00:18:54,250 de feito, sempre que chamar malloc, por exemplo, e obter algunha memoria e probe 392 00:18:54,250 --> 00:18:57,980 e salva-o nun punteiro, sempre querer comprobar para asegurarse de que este 393 00:18:57,980 --> 00:19:00,230 función non voltar nulo. 394 00:19:00,230 --> 00:19:05,230 >> Polo tanto, neste caso, estamos comprobando para facer Asegúrese de que realmente abriu a 395 00:19:05,230 --> 00:19:10,230 arquivar correctamente, e non había ningún erro no noso programa. 396 00:19:10,230 --> 00:19:15,160 A continuación, unha vez que temos comprobado para asegurarse que temos un arquivo de traballo, podemos 397 00:19:15,160 --> 00:19:18,520 gravar ou ler a partir de, ou achegar o arquivo. 398 00:19:18,520 --> 00:19:24,270 Neste caso, estou simplemente imprimir unha liña a este arquivo. 399 00:19:24,270 --> 00:19:25,450 >> Como sei diso? 400 00:19:25,450 --> 00:19:27,990 Ben, eu estou usando esta función chamado fprintf. 401 00:19:27,990 --> 00:19:30,970 Todas as funcións que pode utilizar ao gardar ou ler a partir de, ou 402 00:19:30,970 --> 00:19:34,950 manipulación de ficheiros será semellante ao funcións que xa viu antes, pero 403 00:19:34,950 --> 00:19:38,420 comezan coa letra F, pé para o arquivo. 404 00:19:38,420 --> 00:19:43,440 E fprintf, ao contrario da nosa impresión normal aplicación, ten un argumento adicional, 405 00:19:43,440 --> 00:19:47,800 e que é o ficheiro no que quere imprimir esta liña. 406 00:19:47,800 --> 00:19:50,640 >> Eu non teño nada que o dereito de ohai. 407 00:19:50,640 --> 00:19:52,860 Eu non teño a terceira argumento para printf - 408 00:19:52,860 --> 00:19:57,030 ou o segundo argumento para printf, o terceiro argumento para fprintf, porque eu 409 00:19:57,030 --> 00:19:59,480 non ten espazos reservados aquí. 410 00:19:59,480 --> 00:20:01,070 Eu non estou incluíndo os variables. 411 00:20:01,070 --> 00:20:06,070 Pero, de novo, fprintf e todos estes ficheiros funcións que operan con arquivos 412 00:20:06,070 --> 00:20:09,820 son xeralmente vai ter do arquivo en que está operando. 413 00:20:09,820 --> 00:20:15,960 >> Finalmente, a última cousa importante a facer é pechar o ficheiro, así como 414 00:20:15,960 --> 00:20:19,530 con - sempre que malloc algo, queremos liberar algo, para que non 415 00:20:19,530 --> 00:20:22,730 ter un baleirado de memoria - queremos para pechar o noso arquivo. 416 00:20:22,730 --> 00:20:28,180 Se este programa saíu sen pechar o arquivo, as probabilidades son nada ía 417 00:20:28,180 --> 00:20:30,050 mal, sobre todo se era un arquivo pequeno. 418 00:20:30,050 --> 00:20:35,020 >> Pero é sen dúbida un bo código e práctica para sempre pechar o ficheiro 419 00:20:35,020 --> 00:20:38,050 cando termine de usalo. 420 00:20:38,050 --> 00:20:43,630 Entón iso é o básico do ficheiro I / O. Probablemente xa viu iso antes, ou 421 00:20:43,630 --> 00:20:45,710 asistir-lo nese fantástico curta. 422 00:20:45,710 --> 00:20:48,410 Alguén ten algunha dúbida, antes de nós entramos nalgunha codificación práctica 423 00:20:48,410 --> 00:20:51,800 problemas, uns ficheiro E / ou a pasos que eu só fun de novo? 424 00:20:51,800 --> 00:21:00,198 425 00:21:00,198 --> 00:21:03,162 >> [DATILOGRAFAM SONS] 426 00:21:03,162 --> 00:21:04,150 >> Jason Hirschhorn: Vostede teño unha pregunta, Avi? 427 00:21:04,150 --> 00:21:04,660 >> AVI: Non 428 00:21:04,660 --> 00:21:04,740 >> Jason Hirschhorn: Aceptar. 429 00:21:04,740 --> 00:21:06,746 Vou agardar un sete segundo. 430 00:21:06,746 --> 00:21:07,590 [Risas] 431 00:21:07,590 --> 00:21:08,620 Esta é unha información moi boa. 432 00:21:08,620 --> 00:21:10,750 Vostedes só non me gusta facer preguntas. 433 00:21:10,750 --> 00:21:11,660 Iso é bo. 434 00:21:11,660 --> 00:21:12,330 Aceptar. 435 00:21:12,330 --> 00:21:17,620 Así, o noso primeiro problema é práctica, estamos vai duplicar a función de 436 00:21:17,620 --> 00:21:22,330 unha ferramenta de liña de comandos que, probablemente, usado antes - copia - 437 00:21:22,330 --> 00:21:23,500 a ferramenta de copia. 438 00:21:23,500 --> 00:21:28,050 Se insire cp e, a continuación, pasalo dúas argumentos no seu terminal, pode 439 00:21:28,050 --> 00:21:28,980 copiar un arquivo. 440 00:21:28,980 --> 00:21:31,220 E iso é o que nós estamos indo para escribir agora. 441 00:21:31,220 --> 00:21:35,830 >> Entón, de novo, a lectura fóra deste foto, eu que escriba un programa que tira 442 00:21:35,830 --> 00:21:38,130 dous e só dous de liña de comandos argumentos - 443 00:21:38,130 --> 00:21:40,750 un arquivo de orixe e un arquivo de destino - 444 00:21:40,750 --> 00:21:44,590 e copiar o contido da fonte ficheiro para o ficheiro de destino 445 00:21:44,590 --> 00:21:46,960 un byte de cada vez. 446 00:21:46,960 --> 00:21:48,510 Entón, iso é moi pedindo. 447 00:21:48,510 --> 00:21:52,200 >> Unha vez máis, unha boa visión para iso é non ir directo para o código C, pero 448 00:21:52,200 --> 00:21:54,280 decompô-lo en un par de pasos. 449 00:21:54,280 --> 00:21:58,400 En primeiro lugar, pense sobre a lóxica - exactamente o que eu estou pedindo para lle facer - 450 00:21:58,400 --> 00:22:00,620 e comprender toda a pasos a este problema. 451 00:22:00,620 --> 00:22:04,410 Non en C, só nun pseudocódigo, ou un modelo mental de 452 00:22:04,410 --> 00:22:06,030 o que está pasando. 453 00:22:06,030 --> 00:22:10,050 >> Logo, despois de o pseudocódigo para abaixo, descubrir como o pseudocódigo 454 00:22:10,050 --> 00:22:14,600 mapas na ferramentas e cousas que temos aprendeu en uso en C. 455 00:22:14,600 --> 00:22:19,070 >> E, finalmente, xa que ten todo o que xuntos, pode codificar o problema. 456 00:22:19,070 --> 00:22:23,370 Take 5 a 10 minutos para traballar sobre este problema. 457 00:22:23,370 --> 00:22:25,800 Vou poñer as instrucións back-up en un segundo. 458 00:22:25,800 --> 00:22:27,990 E entón nós imos pasar por riba de o pseudocódigo eo código 459 00:22:27,990 --> 00:22:29,230 el vive como un grupo. 460 00:22:29,230 --> 00:22:31,640 >> Se ten algunha dúbida, mentres está traballar sobre iso, sexa a vontade para recadar 461 00:22:31,640 --> 00:22:34,260 súa man, e eu virei volta e respondelas. 462 00:22:34,260 --> 00:22:37,020 463 00:22:37,020 --> 00:22:39,330 >> ESTUDANTE 7: Podo roubar un anaco de papel? 464 00:22:39,330 --> 00:22:41,537 >> Jason Hirschhorn: Que foi? 465 00:22:41,537 --> 00:26:46,047 466 00:26:46,047 --> 00:26:48,043 >> [DATILOGRAFAM SONS] 467 00:26:48,043 --> 00:26:48,730 >> Jason Hirschhorn: Aceptar. 468 00:26:48,730 --> 00:26:51,710 Imos revisar o pseudocódigo en primeiro lugar, e entón eu vou dar-lle máis un par 469 00:26:51,710 --> 00:26:52,960 minutos para rematar a codificación. 470 00:26:52,960 --> 00:26:55,540 471 00:26:55,540 --> 00:26:58,650 >> Quen quere me comezar coa primeira liña de 472 00:26:58,650 --> 00:27:00,030 pseudocódigo para esta función? 473 00:27:00,030 --> 00:27:03,330 474 00:27:03,330 --> 00:27:05,740 >> ALUMNO 8: Asegúrese de que que lle foi dada dous arquivos. 475 00:27:05,740 --> 00:27:06,990 >> Jason Hirschhorn: Aceptar. 476 00:27:06,990 --> 00:27:21,270 477 00:27:21,270 --> 00:27:22,990 E se nós non somos? 478 00:27:22,990 --> 00:27:25,974 >> ALUMNO 8: eu ía regresar 0. 479 00:27:25,974 --> 00:27:27,872 >> Jason Hirschhorn: Debemos regresar 0? 480 00:27:27,872 --> 00:27:30,182 >> ALUMNO 8: Volver a - 481 00:27:30,182 --> 00:27:30,650 supresión. 482 00:27:30,650 --> 00:27:30,850 Sentímolo. 483 00:27:30,850 --> 00:27:31,210 >> Jason Hirschhorn: Yeah. 484 00:27:31,210 --> 00:27:32,710 Probablemente non 0. 485 00:27:32,710 --> 00:27:34,680 Porque 0 significa que todo era bo. 486 00:27:34,680 --> 00:27:35,030 Aceptar. 487 00:27:35,030 --> 00:27:36,730 Así que esta é a primeira liña de pseudocódigo. 488 00:27:36,730 --> 00:27:38,715 Quen ten a segunda liña do pseudocódigo? 489 00:27:38,715 --> 00:27:40,630 >> ESTUDANTE 9: Abre os dous arquivos? 490 00:27:40,630 --> 00:27:41,880 >> Jason Hirschhorn: Abre os dous arquivos. 491 00:27:41,880 --> 00:27:49,970 492 00:27:49,970 --> 00:27:50,920 OK? 493 00:27:50,920 --> 00:27:52,850 >> ALUMNO 10: Comprobe O ficheiro é NULL? 494 00:27:52,850 --> 00:28:10,906 495 00:28:10,906 --> 00:28:12,580 >> Jason Hirschhorn: Comprobe seguro que non son NULL. 496 00:28:12,580 --> 00:28:15,800 Como un aparte - 497 00:28:15,800 --> 00:28:17,540 cortar 0 - 498 00:28:17,540 --> 00:28:18,887 é que NULL? 499 00:28:18,887 --> 00:28:20,080 >> ALUMNO 11: Non 500 00:28:20,080 --> 00:28:21,190 >> Jason Hirschhorn: Iso non é NULL. 501 00:28:21,190 --> 00:28:23,400 Isto chámase o terminador NULL. 502 00:28:23,400 --> 00:28:25,580 É realmente escrito con só un l. 503 00:28:25,580 --> 00:28:28,580 Así, alomenos algo contra iso - que en realidade é un personaxe - 504 00:28:28,580 --> 00:28:31,710 así alomenos algo que está en contra non o mesmo que a verificación para ver se 505 00:28:31,710 --> 00:28:32,690 é igual a NULL. 506 00:28:32,690 --> 00:28:34,100 >> E algunhas persoas - 507 00:28:34,100 --> 00:28:36,040 nos seus probas e seu problema conxuntos - ten o 508 00:28:36,040 --> 00:28:36,890 dous deles confuso. 509 00:28:36,890 --> 00:28:38,830 Pero os dous destes son de feito diferente. 510 00:28:38,830 --> 00:28:40,220 Un termina unha cadea - 511 00:28:40,220 --> 00:28:43,210 é un punteiro para 0. 512 00:28:43,210 --> 00:28:46,490 >> ALUMNO 12: Por que non comprobar a asegurarse de que os arquivos non son NULL 513 00:28:46,490 --> 00:28:48,670 antes de abri-los? 514 00:28:48,670 --> 00:28:54,772 >> Jason Hirschhorn: Entón aberto gardada algo nese arquivo. 515 00:28:54,772 --> 00:28:57,780 E se volver aquí - 516 00:28:57,780 --> 00:28:59,520 así que esta liña - fopen - 517 00:28:59,520 --> 00:29:05,300 lle vai dar unha dirección e tenda este enderezo no arquivo se funciona. 518 00:29:05,300 --> 00:29:07,650 Se iso non funciona, pode almacenar NULL - 519 00:29:07,650 --> 00:29:08,020 >> ALUMNO 12: Oh 520 00:29:08,020 --> 00:29:08,180 Aceptar. 521 00:29:08,180 --> 00:29:08,500 Collín-te. 522 00:29:08,500 --> 00:29:09,050 >> Jason Hirschhorn: O ficheiro. 523 00:29:09,050 --> 00:29:11,990 Entón non pode comprobar a existencia de NULL antes de abri-los. 524 00:29:11,990 --> 00:29:13,520 NULL significa algo que non fixo funcionar correctamente. 525 00:29:13,520 --> 00:29:18,030 526 00:29:18,030 --> 00:29:18,740 Aceptar. 527 00:29:18,740 --> 00:29:22,590 Entón, asegúrese de non é? 528 00:29:22,590 --> 00:29:23,200 Ou son? 529 00:29:23,200 --> 00:29:23,770 Que pensa? 530 00:29:23,770 --> 00:29:24,310 Imos con iso. 531 00:29:24,310 --> 00:29:24,520 >> ALUMNO 13: É. 532 00:29:24,520 --> 00:29:25,020 >> Jason Hirschhorn: É? 533 00:29:25,020 --> 00:29:25,930 Tampouco é? 534 00:29:25,930 --> 00:29:26,350 >> ALUMNO 13: É. 535 00:29:26,350 --> 00:29:26,390 >> Jason Hirschhorn: Aceptar. 536 00:29:26,390 --> 00:29:28,510 Parece que temos algúns consenso sobre iso. 537 00:29:28,510 --> 00:29:30,520 Nin é NULL. 538 00:29:30,520 --> 00:29:32,250 OK, próxima liña de pseudocódigo. 539 00:29:32,250 --> 00:29:33,600 Quen non me deu unha liña aínda? 540 00:29:33,600 --> 00:29:37,350 541 00:29:37,350 --> 00:29:38,295 Imos esperar por ti. 542 00:29:38,295 --> 00:29:39,020 É. 543 00:29:39,020 --> 00:29:40,895 >> ALUMNO 14: Ten que ler desde o primeiro arquivo? 544 00:29:40,895 --> 00:29:42,290 >> Jason Hirschhorn: Aceptar. 545 00:29:42,290 --> 00:29:46,240 >> ALUMNO 14: Ou usamos fscanf ou algo así como que o primeiro arquivo? 546 00:29:46,240 --> 00:29:50,650 >> Jason Hirschhorn: Entón, queremos ler a partir do primeiro arquivo e - 547 00:29:50,650 --> 00:29:51,900 imos deixar isto ben aquí. 548 00:29:51,900 --> 00:30:00,600 549 00:30:00,600 --> 00:30:01,880 Ler a partir do ficheiro de orixe. 550 00:30:01,880 --> 00:30:05,370 E entón, o que imos facer despois de que ler desde o ficheiro de orixe? 551 00:30:05,370 --> 00:30:06,620 Alguén máis? 552 00:30:06,620 --> 00:30:09,150 553 00:30:09,150 --> 00:30:12,190 >> ALUMNO 15: Escribir en o ficheiro de destino? 554 00:30:12,190 --> 00:30:22,080 555 00:30:22,080 --> 00:30:25,620 >> Jason Hirschhorn: Escribir para o ficheiro de destino, e - 556 00:30:25,620 --> 00:30:26,210 Aceptar. 557 00:30:26,210 --> 00:30:30,030 O que máis estamos perdendo? 558 00:30:30,030 --> 00:30:32,460 Alguén que non me deu un liña de código aínda - de pseudocódigo. 559 00:30:32,460 --> 00:30:33,510 É. 560 00:30:33,510 --> 00:30:36,540 >> ALUMNO 16: Quizais sempre pode comprobar se hai algo para ler a, 561 00:30:36,540 --> 00:30:37,970 como a seguinte liña? 562 00:30:37,970 --> 00:30:39,550 Isto é como a seguinte liña, ver se existir. 563 00:30:39,550 --> 00:30:40,660 >> [Electrónica Campá] 564 00:30:40,660 --> 00:30:41,095 >> Jason Hirschhorn: Oops. 565 00:30:41,095 --> 00:30:43,120 Ese é o meu programa journaling. 566 00:30:43,120 --> 00:30:43,580 Si? 567 00:30:43,580 --> 00:30:44,960 >> ALUMNO 16: Yeah. 568 00:30:44,960 --> 00:30:48,940 >> Jason Hirschhorn: Entón dea isto para min unha vez máis. 569 00:30:48,940 --> 00:30:51,640 >> ALUMNO 16: Asegúrese de que hai aínda a seguinte liña do 570 00:30:51,640 --> 00:30:52,920 ficheiro de orixe para ler. 571 00:30:52,920 --> 00:30:53,500 >> Jason Hirschhorn: Aceptar. 572 00:30:53,500 --> 00:30:56,060 Polo tanto, non estamos lendo liñas - estaban lendo bytes por aquí - 573 00:30:56,060 --> 00:30:57,590 pero está correcto. 574 00:30:57,590 --> 00:31:00,040 Queremos ler e escribir ata non hai máis bytes. 575 00:31:00,040 --> 00:31:11,430 576 00:31:11,430 --> 00:31:11,735 Aceptar. 577 00:31:11,735 --> 00:31:16,940 E así, estes deben realmente ser recuado un pouco, xa que están alí embaixo. 578 00:31:16,940 --> 00:31:17,470 Non? 579 00:31:17,470 --> 00:31:20,620 Ata que estamos fóra de bytes, imos ler desde o ficheiro de orixe e escribir 580 00:31:20,620 --> 00:31:22,160 ao ficheiro de destino. 581 00:31:22,160 --> 00:31:24,510 >> E entón, o que é a última liña de pseudocódigo? 582 00:31:24,510 --> 00:31:26,380 Alguén que non é dado me algo aínda. 583 00:31:26,380 --> 00:31:29,270 584 00:31:29,270 --> 00:31:30,260 >> ALUMNO 17: Pecha os ficheiros? 585 00:31:30,260 --> 00:31:31,510 >> Jason Hirschhorn: Exactamente. 586 00:31:31,510 --> 00:31:36,370 587 00:31:36,370 --> 00:31:37,450 Pecha os ficheiros. 588 00:31:37,450 --> 00:31:38,400 Polo tanto, non é o noso pseudocódigo. 589 00:31:38,400 --> 00:31:41,870 Vou poñer o pseudocódigo en gedit, e nun par de minutos, 590 00:31:41,870 --> 00:31:44,626 codificará iso xuntos. 591 00:31:44,626 --> 00:33:55,280 592 00:33:55,280 --> 00:33:56,000 >> Aceptar. 593 00:33:56,000 --> 00:33:58,290 Imos comezar como un grupo. 594 00:33:58,290 --> 00:33:59,940 Nishant, eu teño o meu novo ficheiro. 595 00:33:59,940 --> 00:34:01,130 Acaba de abrir iso. 596 00:34:01,130 --> 00:34:01,880 Documento Untitled 1. 597 00:34:01,880 --> 00:34:05,490 Cal é o primeiro que debería facer? 598 00:34:05,490 --> 00:34:07,040 >> Nishant: Incluír bibliotecas? 599 00:34:07,040 --> 00:34:08,219 >> Jason Hirschhorn: Aceptar. 600 00:34:08,219 --> 00:34:11,070 Que as bibliotecas? 601 00:34:11,070 --> 00:34:17,570 >> Nishant: stdio.h, stdlib.h, eu creo? 602 00:34:17,570 --> 00:34:18,000 >> Jason Hirschhorn: Aceptar. 603 00:34:18,000 --> 00:34:21,592 Que é stdlib a? 604 00:34:21,592 --> 00:34:23,010 >> Nishant: eu esquezo. 605 00:34:23,010 --> 00:34:23,219 >> Jason Hirschhorn: Aceptar. 606 00:34:23,219 --> 00:34:24,179 Polo tanto, incluír stdio. 607 00:34:24,179 --> 00:34:28,630 ¿Que debería facer antes de Comezar a programar? 608 00:34:28,630 --> 00:34:29,710 >> Nishant Escribe unha cabeceira? 609 00:34:29,710 --> 00:34:31,830 >> Jason Hirschhorn: Como fago para obtelo colorido? 610 00:34:31,830 --> 00:34:34,060 >> [Voces interpondo] 611 00:34:34,060 --> 00:34:35,040 >> Nishant: Como conseguiu iso de cor? 612 00:34:35,040 --> 00:34:38,060 >> Jason Hirschhorn: Como podo colorear codificación? 613 00:34:38,060 --> 00:34:38,570 >> Nishant: Eu non sei. 614 00:34:38,570 --> 00:34:38,830 Oh 615 00:34:38,830 --> 00:34:39,389 Salva. 616 00:34:39,389 --> 00:34:39,929 >> Jason Hirschhorn: Gardar. 617 00:34:39,929 --> 00:34:40,270 Si 618 00:34:40,270 --> 00:34:41,760 Eu debería garda-lo como un arquivo. C. 619 00:34:41,760 --> 00:34:46,239 Entón salva-o no escritorio como cp.c. 620 00:34:46,239 --> 00:34:47,280 Doce. 621 00:34:47,280 --> 00:34:51,199 E se eu desexa estilo completo puntos, o que debo 622 00:34:51,199 --> 00:34:53,085 incluír na parte superior? 623 00:34:53,085 --> 00:34:58,390 >> Nishant: Vostede podería escribir o seu nome, nome do programa, eo obxectivo 624 00:34:58,390 --> 00:34:59,640 do programa tamén? 625 00:34:59,640 --> 00:35:08,400 626 00:35:08,400 --> 00:35:10,040 >> Jason Hirschhorn: Parece bo. 627 00:35:10,040 --> 00:35:10,470 Excelente. 628 00:35:10,470 --> 00:35:12,940 Entón comezou connosco perfectamente. 629 00:35:12,940 --> 00:35:13,720 # Include - 630 00:35:13,720 --> 00:35:15,365 Tamén imos escribir - 631 00:35:15,365 --> 00:35:30,050 632 00:35:30,050 --> 00:35:30,870 Aceptar. 633 00:35:30,870 --> 00:35:33,520 Entón, eu creo que estou preparado para ir. 634 00:35:33,520 --> 00:35:38,003 Quen ten a primeira liña de código para min - ou as primeiras liñas de código que 635 00:35:38,003 --> 00:35:41,280 que será necesario para satisfacer o noso primeiro comentar en pseudocódigo? 636 00:35:41,280 --> 00:35:41,985 Vostede 637 00:35:41,985 --> 00:35:48,780 >> ALUMNO 18: Non debería ser int argc e char * argv? 638 00:35:48,780 --> 00:35:49,490 >> Jason Hirschhorn: Eu creo que está certo. 639 00:35:49,490 --> 00:35:56,270 Imos mudalo para int principais, paréntese aberto, int argc, coma, char * argv? 640 00:35:56,270 --> 00:35:57,150 Así? 641 00:35:57,150 --> 00:35:57,410 >> ALUMNO 18: Soportes. 642 00:35:57,410 --> 00:35:58,260 >> Jason Hirschhorn: Soportes. 643 00:35:58,260 --> 00:35:59,860 Abrir soporte, preto do soporte, preto do pai. 644 00:35:59,860 --> 00:36:00,240 Perfecto. 645 00:36:00,240 --> 00:36:02,160 Agora podo ter argumentos de liña de comandos. 646 00:36:02,160 --> 00:36:02,430 Aceptar. 647 00:36:02,430 --> 00:36:04,250 Asegúrese de que está dado dous arquivos. 648 00:36:04,250 --> 00:36:07,905 Vostede me pode dar iso tamén. 649 00:36:07,905 --> 00:36:09,180 >> ALUMNO 18: Se argc - 650 00:36:09,180 --> 00:36:11,060 este non coincide 3. 651 00:36:11,060 --> 00:36:14,360 >> Jason Hirschhorn: Se paréntese aberta O argc non igual a 3? 652 00:36:14,360 --> 00:36:16,970 >> ALUMNO 18: Si, retornar 1 ou nada. 653 00:36:16,970 --> 00:36:17,460 >> Jason Hirschhorn: Sentímolo. 654 00:36:17,460 --> 00:36:19,120 >> ALUMNO 18: Return 1 ou nada. 655 00:36:19,120 --> 00:36:20,270 >> Jason Hirschhorn: Return 1. 656 00:36:20,270 --> 00:36:22,230 OK? 657 00:36:22,230 --> 00:36:22,970 Grande. 658 00:36:22,970 --> 00:36:24,290 Abre os dous arquivos. 659 00:36:24,290 --> 00:36:26,160 Quen me pode axudar a abrir os arquivos? 660 00:36:26,160 --> 00:36:28,125 Quen non me deu código aínda? 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: Entón, as tapas F-I-L-E Orixe estrela. 664 00:36:36,145 --> 00:36:39,390 665 00:36:39,390 --> 00:36:40,920 >> Jason Hirschhorn: Vou para sacar as vogal. 666 00:36:40,920 --> 00:36:41,570 Aqueles son legais. 667 00:36:41,570 --> 00:36:42,716 É como Tumblr. 668 00:36:42,716 --> 00:36:44,610 >> ALUMNO 18: Igual fopen - 669 00:36:44,610 --> 00:36:46,612 >> Jason Hirschhorn: Igual fopen? 670 00:36:46,612 --> 00:36:49,870 >> ALUMNO 18: paréntese aberto, argv, soporte aberto. 671 00:36:49,870 --> 00:36:50,055 >> Jason Hirschhorn: Agarde. 672 00:36:50,055 --> 00:36:50,240 Sentímolo. 673 00:36:50,240 --> 00:36:51,050 Abrir paréntese. 674 00:36:51,050 --> 00:36:51,456 Aceptar. 675 00:36:51,456 --> 00:36:53,080 >> ALUMNO 18: Yeah. 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 >> ALUMNO 18: Yeah. 679 00:36:56,140 --> 00:36:58,540 Argv soporte aberto 1 - 680 00:36:58,540 --> 00:36:59,730 Si 681 00:36:59,730 --> 00:37:06,470 E, a continuación coma, e logo abre o dobre cita, r, comiñas dobres, 682 00:37:06,470 --> 00:37:08,250 paren próximos, punto e coma. 683 00:37:08,250 --> 00:37:09,450 >> Jason Hirschhorn: Sweet. 684 00:37:09,450 --> 00:37:10,950 E sobre o outro? 685 00:37:10,950 --> 00:37:16,030 >> ALUMNO 18: Moi semellante, pero en vez de S-R-C, diría 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 Me gusta diso. 688 00:37:17,772 --> 00:37:20,010 >> ALUMNO 18: Só D-S-T. É. 689 00:37:20,010 --> 00:37:23,057 E, a continuación, argv, soporte aberto, 2. 690 00:37:23,057 --> 00:37:23,200 É. 691 00:37:23,200 --> 00:37:26,720 E, a continuación, no canto de w r. 692 00:37:26,720 --> 00:37:27,620 É. 693 00:37:27,620 --> 00:37:29,630 >> Jason Hirschhorn: gran. 694 00:37:29,630 --> 00:37:31,360 Seguinte par de liñas. 695 00:37:31,360 --> 00:37:34,040 Ademais, se alguén ten cousas a engadir ao liñas que fixemos, póñase en 696 00:37:34,040 --> 00:37:35,690 engade-as tamén. 697 00:37:35,690 --> 00:37:37,520 Asegúrese de que non é NULL. 698 00:37:37,520 --> 00:37:41,450 Quen me pode dar o código que eu teño satisfacer esta liña de pseudocódigo? 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 >> ARCHER: Se src igual iguais NULL ou dst iguais iguais 702 00:37:58,645 --> 00:38:04,590 NULL, entón volver - 703 00:38:04,590 --> 00:38:07,130 704 00:38:07,130 --> 00:38:07,976 >> Jason Hirschhorn: O que? 705 00:38:07,976 --> 00:38:08,890 >> ARCHER: Return 2? 706 00:38:08,890 --> 00:38:09,760 >> Jason Hirschhorn: Return 2. 707 00:38:09,760 --> 00:38:14,400 Entón, se paréntese aberta src igual é igual a NULL, ou - 708 00:38:14,400 --> 00:38:15,590 sexa alí o que thing 's - cachimbo? 709 00:38:15,590 --> 00:38:16,346 Cachimbo? 710 00:38:16,346 --> 00:38:17,140 Imos chamalo de tubulação. 711 00:38:17,140 --> 00:38:22,340 Pipe, cachimbo, dst iguais iguais NULL, o retorno 2. 712 00:38:22,340 --> 00:38:23,900 OK? 713 00:38:23,900 --> 00:38:26,060 Ata que estamos fóra de bytes - 714 00:38:26,060 --> 00:38:29,820 nós medio que pulou esa etapa de a parte pseudocódigo para ir aquí. 715 00:38:29,820 --> 00:38:31,970 >> Pero ata que estamos fóra de bytes - o que iso parece? 716 00:38:31,970 --> 00:38:34,680 Que tipo de estructura C - 717 00:38:34,680 --> 00:38:36,160 pero eu non usar a estrutura da palabra, porque nós imos comezar a usar 718 00:38:36,160 --> 00:38:37,350 que noutros casos - 719 00:38:37,350 --> 00:38:39,495 pero ferramenta C é que o son como? 720 00:38:39,495 --> 00:38:39,970 >> ALUMNO 19: Un lazo. 721 00:38:39,970 --> 00:38:40,980 >> Jason Hirschhorn: Un loop. 722 00:38:40,980 --> 00:38:43,060 Soa como un loop. 723 00:38:43,060 --> 00:38:49,670 Entón, quen me pode dar a primeira liña do código de loop aquí? 724 00:38:49,670 --> 00:38:56,320 725 00:38:56,320 --> 00:39:01,980 Tamén podes escoller o tipo de loop que quere, se me der 726 00:39:01,980 --> 00:39:03,215 esta liña de código. 727 00:39:03,215 --> 00:39:04,150 Existen tres tipos. 728 00:39:04,150 --> 00:39:06,530 Comeza a escoller. 729 00:39:06,530 --> 00:39:08,080 Quere suxerir un deses. 730 00:39:08,080 --> 00:39:08,410 Avi. 731 00:39:08,410 --> 00:39:09,230 Cal deles quere? 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 é igual a cero. 735 00:39:15,180 --> 00:39:17,360 >> Jason Hirschhorn: Aceptar. 736 00:39:17,360 --> 00:39:18,570 >> AVI: Esta parte eu non estou seguro. 737 00:39:18,570 --> 00:39:29,080 Pero i é menos que o tamaño de fonte de estrela? 738 00:39:29,080 --> 00:39:31,128 Eu non estou seguro diso. 739 00:39:31,128 --> 00:39:32,580 >> Jason Hirschhorn: Aceptar. 740 00:39:32,580 --> 00:39:35,870 >> AVI: Por quere a tamaño dun ficheiro, non? 741 00:39:35,870 --> 00:39:41,090 >> Jason Hirschhorn: Entón, iso probablemente non vai ofrécenos o tamaño do real 742 00:39:41,090 --> 00:39:43,010 ficheiro en bytes. 743 00:39:43,010 --> 00:39:47,680 Entón o que máis poderiamos facer? 744 00:39:47,680 --> 00:39:48,810 ¿Que é un outro tipo de loop? 745 00:39:48,810 --> 00:39:50,180 Ou debemos estar co loop FOR? 746 00:39:50,180 --> 00:39:55,350 747 00:39:55,350 --> 00:39:57,900 >> ALUMNO 20: Vostede podería facer un loop while? 748 00:39:57,900 --> 00:40:01,350 E entón, o que faría se you'd - 749 00:40:01,350 --> 00:40:03,930 porque temos un char * para o arquivo. 750 00:40:03,930 --> 00:40:07,950 Entón, se nós só seguir incrementando que ata que quere atopar o carácter NULL en 751 00:40:07,950 --> 00:40:08,500 o fin de todo? 752 00:40:08,500 --> 00:40:11,130 Ou non, é que non como os ficheiros de traballo? 753 00:40:11,130 --> 00:40:14,300 >> Jason Hirschhorn: Entón podemos manter incrementando o char * 754 00:40:14,300 --> 00:40:16,340 ata atopamos a NULL - 755 00:40:16,340 --> 00:40:18,580 >> ALUMNO 20: Esencialmente continuar carácter por carácter ata chegar 756 00:40:18,580 --> 00:40:21,250 a fin do ficheiro. 757 00:40:21,250 --> 00:40:21,600 >> Jason Hirschhorn: si. 758 00:40:21,600 --> 00:40:22,560 Entón é iso que queremos facer. 759 00:40:22,560 --> 00:40:24,545 Queremos manter a lectura, carácter polo personaxe, ata chegar ao 760 00:40:24,545 --> 00:40:25,080 a fin do ficheiro. 761 00:40:25,080 --> 00:40:25,375 >> ALUMNO 20: Yeah. 762 00:40:25,375 --> 00:40:25,860 Atope - 763 00:40:25,860 --> 00:40:28,540 o que é o fin ou sinal de parada ao final dun ficheiro de texto. 764 00:40:28,540 --> 00:40:28,620 >> Jason Hirschhorn: Aceptar. 765 00:40:28,620 --> 00:40:30,140 Así, cando chegar ao final do arquivo - como sabemos que chegamos 766 00:40:30,140 --> 00:40:33,200 o fin dun ficheiro? 767 00:40:33,200 --> 00:40:34,710 Se eu estou chamando - 768 00:40:34,710 --> 00:40:35,910 entón imos dar un paso atrás. 769 00:40:35,910 --> 00:40:37,550 ¿Que é unha función? 770 00:40:37,550 --> 00:40:39,360 Imos para esta liña aquí. 771 00:40:39,360 --> 00:40:40,630 Ler a partir do ficheiro de orixe. 772 00:40:40,630 --> 00:40:41,880 Quen me pode dar esa liña de código? 773 00:40:41,880 --> 00:40:45,592 774 00:40:45,592 --> 00:40:47,590 >> ALUMNO 21: fscanf? 775 00:40:47,590 --> 00:40:49,110 >> Jason Hirschhorn: fscanf. 776 00:40:49,110 --> 00:40:49,510 Aceptar. 777 00:40:49,510 --> 00:40:52,240 E se eu queira ler, moi especificamente, un byte? 778 00:40:52,240 --> 00:40:55,012 779 00:40:55,012 --> 00:40:56,860 >> ALUMNO 21: Eu non sei. 780 00:40:56,860 --> 00:40:57,110 >> Jason Hirschhorn: Aceptar. 781 00:40:57,110 --> 00:40:59,380 Aínda máis simple do que fscanf - o que é un - 782 00:40:59,380 --> 00:41:01,890 Quero ler desde un ficheiro de orixe? 783 00:41:01,890 --> 00:41:03,720 Ler un ficheiro de orixe. 784 00:41:03,720 --> 00:41:04,850 ¿Que é unha función - si. 785 00:41:04,850 --> 00:41:05,380 >> ALUMNO 22: É fread? 786 00:41:05,380 --> 00:41:06,070 >> Jason Hirschhorn: Fread. 787 00:41:06,070 --> 00:41:07,550 Creo que imos ir con que un por agora. 788 00:41:07,550 --> 00:41:10,380 789 00:41:10,380 --> 00:41:13,650 Que tipo de argumentos fread non tomar? 790 00:41:13,650 --> 00:41:17,410 >> ALUMNO 22: Probablemente o tipo de arquivo, e localización no arquivo? 791 00:41:17,410 --> 00:41:19,550 >> Jason Hirschhorn: Que podo escribir aquí para descubrir que o tipo de argumentos 792 00:41:19,550 --> 00:41:20,950 fread leva? 793 00:41:20,950 --> 00:41:23,710 >> ESTUDANTES múltiples: Home fread. 794 00:41:23,710 --> 00:41:24,740 >> Jason Hirschhorn: Home fread e fwrite. 795 00:41:24,740 --> 00:41:25,980 Parece que saen xuntos. 796 00:41:25,980 --> 00:41:29,589 Entón fread leva cantos argumentos? 797 00:41:29,589 --> 00:41:30,920 >> ALUMNO 23: Catro. 798 00:41:30,920 --> 00:41:32,690 >> Jason Hirschhorn: Leva catro argumentos. 799 00:41:32,690 --> 00:41:41,100 Hai que un punteiro, un tamaño, e que cousa, o que é raro, e algúns arquivos. 800 00:41:41,100 --> 00:41:42,000 OK? 801 00:41:42,000 --> 00:41:43,990 Imos ler sobre iso aquí. 802 00:41:43,990 --> 00:41:49,370 "A función fread le n memb elementos de datos, cada un de tamaño bytes 803 00:41:49,370 --> 00:41:53,840 de lonxitude, desde o fluxo apuntado por transmitir, almacenando os no lugar 804 00:41:53,840 --> 00:41:56,170 dada polo punteiro ". 805 00:41:56,170 --> 00:41:57,960 >> Entón, catro argumentos. 806 00:41:57,960 --> 00:42:04,510 Por que non podo simplemente copiar tanto, e pegalo aquí. 807 00:42:04,510 --> 00:42:10,060 808 00:42:10,060 --> 00:42:10,770 Aceptar. 809 00:42:10,770 --> 00:42:13,673 Entón, quen pode comezar a cubrir estes argumentos para min? 810 00:42:13,673 --> 00:42:15,840 Avi. 811 00:42:15,840 --> 00:42:17,720 >> AVI: Elimina o baleiro. 812 00:42:17,720 --> 00:42:20,530 Pon só src. 813 00:42:20,530 --> 00:42:23,142 Elimina do punteiro ea estrela. 814 00:42:23,142 --> 00:42:26,102 Pon src. 815 00:42:26,102 --> 00:42:27,050 Entón - 816 00:42:27,050 --> 00:42:28,500 >> Jason Hirschhorn: Entón eu vou deixar ti alí, por iso é incorrecto. 817 00:42:28,500 --> 00:42:32,590 818 00:42:32,590 --> 00:42:34,710 Está certo co src pero onde debe src ir? 819 00:42:34,710 --> 00:42:35,960 >> [Voces interpondo] 820 00:42:35,960 --> 00:42:38,976 821 00:42:38,976 --> 00:42:41,610 >> Jason Hirschhorn: debe pasar por riba aquí. 822 00:42:41,610 --> 00:42:43,790 Ese é o src - noso src é un tipo. 823 00:42:43,790 --> 00:42:44,610 Imos dar un ollo aquí. 824 00:42:44,610 --> 00:42:49,610 Isto é pedir a un tipo FILE *, nós de feito, normalmente velos así. 825 00:42:49,610 --> 00:42:57,630 Entón, iso é pedir a un argumento de tipo de ficheiro * chamado córrego que se src. 826 00:42:57,630 --> 00:42:58,480 OK? 827 00:42:58,480 --> 00:43:00,410 >> O tamaño das cousas facer queremos ler? 828 00:43:00,410 --> 00:43:03,340 Eu che dei iso no descrición do problema. 829 00:43:03,340 --> 00:43:04,370 >> ALUMNO 24: Un byte de cada vez. 830 00:43:04,370 --> 00:43:05,340 >> Jason Hirschhorn: Un byte. 831 00:43:05,340 --> 00:43:08,205 Cal é o tamaño dun byte? 832 00:43:08,205 --> 00:43:11,642 O seu tamaño é en bytes, entón o que Podo poñer alí? 833 00:43:11,642 --> 00:43:12,910 >> ALUMNO 25: Unha. 834 00:43:12,910 --> 00:43:14,730 >> Jason Hirschhorn: Unha. 835 00:43:14,730 --> 00:43:17,020 Correcto. 836 00:43:17,020 --> 00:43:19,940 O seu tamaño é de byte unidade, entón 1 é un byte. 837 00:43:19,940 --> 00:43:22,284 Cantos quero ler dunha vez. 838 00:43:22,284 --> 00:43:23,520 >> ALUMNO 26: One? 839 00:43:23,520 --> 00:43:24,270 >> Jason Hirschhorn: Unha cousa. 840 00:43:24,270 --> 00:43:28,540 Quero ler algo do tamaño 1, unha mordida de cada vez. 841 00:43:28,540 --> 00:43:32,110 E onde é que eu poñer-lo, xa que eu ler? 842 00:43:32,110 --> 00:43:35,050 843 00:43:35,050 --> 00:43:36,510 >> ALUMNO 27: Destino? 844 00:43:36,510 --> 00:43:39,270 >> Jason Hirschhorn: Entón, eu non podo poñer lo en liña recta en destino. 845 00:43:39,270 --> 00:43:40,800 >> ALUMNO 28: Vai poñer lo nun terceiro punteiro? 846 00:43:40,800 --> 00:43:41,780 >> ALUMNO 27: ao destino. 847 00:43:41,780 --> 00:43:42,270 >> Jason Hirschhorn: Aceptar. 848 00:43:42,270 --> 00:43:42,630 É. 849 00:43:42,630 --> 00:43:46,820 >> ALUMNO 29: Pode declarar algo a actuar como un almacenamento temporal anteriormente. 850 00:43:46,820 --> 00:43:47,350 >> Jason Hirschhorn: Aceptar. 851 00:43:47,350 --> 00:43:50,080 Dáme iso. 852 00:43:50,080 --> 00:43:53,930 >> ALUMNO 29: Outro ficheiro punteiro, quizais? 853 00:43:53,930 --> 00:43:54,220 >> Jason Hirschhorn: Aceptar. 854 00:43:54,220 --> 00:43:55,585 Polo tanto, esta é estrela baleiro - 855 00:43:55,585 --> 00:43:57,750 é un tipo void estrela, para que non ten que ser un punteiro de arquivo. 856 00:43:57,750 --> 00:44:02,520 E se eu estou lendo un byte, onde sería un bo lugar 857 00:44:02,520 --> 00:44:03,850 para almacenar un byte? 858 00:44:03,850 --> 00:44:04,660 >> ALUMNO 29: Unha matriz? 859 00:44:04,660 --> 00:44:05,770 >> Jason Hirschhorn: Unha matriz. 860 00:44:05,770 --> 00:44:07,730 Aceptar. 861 00:44:07,730 --> 00:44:14,040 E o que máis é algo que se só o tamaño dun byte? 862 00:44:14,040 --> 00:44:16,980 863 00:44:16,980 --> 00:44:18,060 >> ALUMNO 30: A char *? 864 00:44:18,060 --> 00:44:18,530 >> ALUMNO 29: Yeah. 865 00:44:18,530 --> 00:44:19,880 >> Jason Hirschhorn: Un char * non é un byte. 866 00:44:19,880 --> 00:44:20,440 >> ALUMNO 29: un char. 867 00:44:20,440 --> 00:44:21,810 >> Jason Hirschhorn: Un char é un byte. 868 00:44:21,810 --> 00:44:22,920 Non? 869 00:44:22,920 --> 00:44:26,740 Entón, imos chamar este búfer é un xenérico nome usado para estas cousas para gardar 870 00:44:26,740 --> 00:44:27,910 algo temporal. 871 00:44:27,910 --> 00:44:30,880 Así que crear un buffer. 872 00:44:30,880 --> 00:44:31,150 Non? 873 00:44:31,150 --> 00:44:32,990 Pero hai que ser un void *. 874 00:44:32,990 --> 00:44:38,660 Entón, talvez está certo, que el debe ser un tapón de tamaño 0. 875 00:44:38,660 --> 00:44:41,070 Entón, el almacena un - 876 00:44:41,070 --> 00:44:41,280 dereita. 877 00:44:41,280 --> 00:44:43,560 >> Por iso aquí - carácter buffer é un personaxe, pero 878 00:44:43,560 --> 00:44:45,110 iso leva un void * - 879 00:44:45,110 --> 00:44:45,870 un punteiro. 880 00:44:45,870 --> 00:44:50,640 Entón, eu podería facelo, e agora buffer é un punteiro. 881 00:44:50,640 --> 00:44:53,214 O que máis eu podería facer? 882 00:44:53,214 --> 00:44:55,775 >> ALUMNO 31: Pon unha estrela xunto a char. 883 00:44:55,775 --> 00:44:58,380 >> Jason Hirschhorn: eu podería telo creado char *. 884 00:44:58,380 --> 00:45:00,216 Aceptar. 885 00:45:00,216 --> 00:45:03,131 Qué é outra cousa que eu podería facer? 886 00:45:03,131 --> 00:45:04,050 Ou imos con este. 887 00:45:04,050 --> 00:45:05,740 Char * buffer, entón o que podo poñer aquí? 888 00:45:05,740 --> 00:45:08,290 889 00:45:08,290 --> 00:45:09,310 >> ALUMNO 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 é un punteiro para un char. 893 00:45:14,500 --> 00:45:19,480 E nese lugar, estamos poñendo un byte de algo que lin. 894 00:45:19,480 --> 00:45:19,980 É. 895 00:45:19,980 --> 00:45:20,700 Avi. 896 00:45:20,700 --> 00:45:21,230 >> AVI: Só unha pregunta rápida. 897 00:45:21,230 --> 00:45:24,440 Quere malloc tapón? 898 00:45:24,440 --> 00:45:25,930 >> Jason Hirschhorn: Quen pode responder a esta pregunta? 899 00:45:25,930 --> 00:45:30,210 >> ALUMNO 32: Ben, non realmente punto para nada agora, entón - 900 00:45:30,210 --> 00:45:32,610 >> Jason Hirschhorn: Pero facer queremos malloc isto? 901 00:45:32,610 --> 00:45:35,600 >> ALUMNO 32: Se tivese que facelo que xeito, creo, si, porque precisa 902 00:45:35,600 --> 00:45:36,990 algún lugar para el para apuntar para. 903 00:45:36,990 --> 00:45:38,350 >> Jason Hirschhorn: Será que ten que malloc isto? 904 00:45:38,350 --> 00:45:40,580 >> ALUMNO 33: Se está indo a usalo fóra do loop. 905 00:45:40,580 --> 00:45:42,524 >> Jason Hirschhorn: Será que imos usalo fóra do loop? 906 00:45:42,524 --> 00:45:44,392 >> ALUMNO 34: Si 907 00:45:44,392 --> 00:45:44,860 >> ALUMNO 35: Espera. 908 00:45:44,860 --> 00:45:46,980 Queremos declaralo la no circuíto ademais? 909 00:45:46,980 --> 00:45:50,100 >> Jason Hirschhorn: Entón eu creo que temos algúns pseudo loop while aquí que estamos 910 00:45:50,100 --> 00:45:51,950 tentando descubrir o que nós non tivemos aínda. 911 00:45:51,950 --> 00:45:54,710 912 00:45:54,710 --> 00:45:56,010 Non necesitamos malloc-lo. 913 00:45:56,010 --> 00:45:59,310 Estamos operando en principal, vai só para o uso dentro deste loop. 914 00:45:59,310 --> 00:46:00,540 Non precisa de existir fóra deste. 915 00:46:00,540 --> 00:46:02,340 >> Así, pode ser unha variable local. 916 00:46:02,340 --> 00:46:03,925 Ten un punteiro para unha variable local. 917 00:46:03,925 --> 00:46:07,984 918 00:46:07,984 --> 00:46:09,590 >> ALUMNO 36: Pero non é apuntando para calquera cousa. 919 00:46:09,590 --> 00:46:11,540 >> Jason Hirschhorn: Non, non é iniciar para nada. 920 00:46:11,540 --> 00:46:12,790 Pero nós non imos usalo tamén. 921 00:46:12,790 --> 00:46:15,300 Imos poñer algo en que a primeira vez que usalo. 922 00:46:15,300 --> 00:46:16,580 Así que parece Aceptar. 923 00:46:16,580 --> 00:46:17,780 Entón, nós non precisamos de malloc aquí. 924 00:46:17,780 --> 00:46:19,360 E eu creo que é OK como está. 925 00:46:19,360 --> 00:46:24,350 926 00:46:24,350 --> 00:46:25,790 Aceptar. 927 00:46:25,790 --> 00:46:27,190 Temos a liña fread. 928 00:46:27,190 --> 00:46:28,490 Imos facer a seguinte liña. 929 00:46:28,490 --> 00:46:32,984 >> Se queremos gravar nun ficheiro, o que é unha boa función para usar para facer iso? 930 00:46:32,984 --> 00:46:33,770 >> ALUMNO 37: fwrite? 931 00:46:33,770 --> 00:46:35,140 >> ALUMNO 38: fprintf? 932 00:46:35,140 --> 00:46:36,010 >> Jason Hirschhorn: fprintf é un deles. 933 00:46:36,010 --> 00:46:37,260 O que é máis unha? 934 00:46:37,260 --> 00:46:37,680 >> ALUMNO 39: fwrite. 935 00:46:37,680 --> 00:46:38,510 >> Jason Hirschhorn: fwrite. 936 00:46:38,510 --> 00:46:41,250 E, para os nosos propósitos, fwrite, que vimos aquí, é 937 00:46:41,250 --> 00:46:42,500 probablemente a mellor opción. 938 00:46:42,500 --> 00:46:51,970 939 00:46:51,970 --> 00:46:53,950 Leva catro argumentos tamén. 940 00:46:53,950 --> 00:46:57,570 Nishant, pode dar mos argumentos? 941 00:46:57,570 --> 00:47:00,570 >> Nishant: curso do primeiro un ser só tapón. 942 00:47:00,570 --> 00:47:02,210 >> Jason Hirschhorn: Aceptar. 943 00:47:02,210 --> 00:47:06,752 >> Nishant: A segunda de só será 1. 944 00:47:06,752 --> 00:47:09,510 Terceiro será 1. 945 00:47:09,510 --> 00:47:11,470 E o cuarto será dst. 946 00:47:11,470 --> 00:47:18,010 947 00:47:18,010 --> 00:47:19,550 >> Jason Hirschhorn: Alguén ten calquera dúbida sobre esta liña? 948 00:47:19,550 --> 00:47:28,370 949 00:47:28,370 --> 00:47:29,130 Isto parece bo. 950 00:47:29,130 --> 00:47:29,590 Aceptar. 951 00:47:29,590 --> 00:47:34,250 Entón, agora parece que o único que estamos falta - de feito, imos escribir 952 00:47:34,250 --> 00:47:35,090 esta última liña. 953 00:47:35,090 --> 00:47:36,300 Pecha os ficheiros. 954 00:47:36,300 --> 00:47:38,880 Quen pode concluír-nos a escritura estas dúas últimas liñas? 955 00:47:38,880 --> 00:47:39,120 Si 956 00:47:39,120 --> 00:47:39,850 Sentímolo, cal é o seu nome? 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 e despois fclose destino. 960 00:47:47,560 --> 00:47:52,430 >> Jason Hirschhorn: fclose, paréntese aberto, src, paren próximos, punto e coma. 961 00:47:52,430 --> 00:47:53,680 E fclose - 962 00:47:53,680 --> 00:47:57,560 963 00:47:57,560 --> 00:47:58,090 É mesmo? 964 00:47:58,090 --> 00:48:01,710 >> Lucy: Abrir parénteses, dst e logo, punto e coma. 965 00:48:01,710 --> 00:48:02,520 >> Jason Hirschhorn: gran. 966 00:48:02,520 --> 00:48:04,338 E o que debo incluír ao final? 967 00:48:04,338 --> 00:48:05,210 >> Lucy: Return 0. 968 00:48:05,210 --> 00:48:05,570 >> Jason Hirschhorn: Return 0. 969 00:48:05,570 --> 00:48:06,820 Teño que? 970 00:48:06,820 --> 00:48:10,560 971 00:48:10,560 --> 00:48:12,590 Só unha pregunta. 972 00:48:12,590 --> 00:48:14,957 Temos que incluír return 0? 973 00:48:14,957 --> 00:48:16,240 >> ESTUDANTES múltiples: Non 974 00:48:16,240 --> 00:48:16,430 >> Jason Hirschhorn: Non 975 00:48:16,430 --> 00:48:18,090 Iniciar fai iso automaticamente Se chegar ao final. 976 00:48:18,090 --> 00:48:20,580 Pero eu creo que é bo inclui-lo explicitamente. 977 00:48:20,580 --> 00:48:23,860 Especialmente cando estamos volvendo outro as cousas ao longo do programa. 978 00:48:23,860 --> 00:48:24,810 Aceptar. 979 00:48:24,810 --> 00:48:26,230 Isto é o que falta - 980 00:48:26,230 --> 00:48:28,520 Mentres o que? 981 00:48:28,520 --> 00:48:31,630 Quen pode pensar nalgunha - 982 00:48:31,630 --> 00:48:35,240 Ten algunha idea do que cousas podería entrar alí? 983 00:48:35,240 --> 00:48:37,350 Aínda que sexa só nun pseudocódigo como a linguaxe? 984 00:48:37,350 --> 00:48:41,330 >> O que estamos realmente - o que queremos ir? 985 00:48:41,330 --> 00:48:41,980 Si, Lucy. 986 00:48:41,980 --> 00:48:43,240 >> Lucy: O fin do ficheiro. 987 00:48:43,240 --> 00:48:44,990 >> Jason Hirschhorn: O fin do ficheiro. 988 00:48:44,990 --> 00:48:49,280 Entón, o que quere dicir co fin do ficheiro? 989 00:48:49,280 --> 00:48:50,955 >> Lucy: Cando chegar ao final do arquivo, pare. 990 00:48:50,955 --> 00:48:51,240 >> Jason Hirschhorn: Aceptar. 991 00:48:51,240 --> 00:48:53,460 Así, unha vez chegamos ao final do arquivo. 992 00:48:53,460 --> 00:48:56,893 Como sabemos cando chegamos a fin do ficheiro? 993 00:48:56,893 --> 00:48:59,900 >> ALUMNO 40: Creo tapón será definido como NULL. 994 00:48:59,900 --> 00:49:01,885 >> ALUMNO 41: Buffer é declarado dentro do loop. 995 00:49:01,885 --> 00:49:03,670 >> Jason Hirschhorn: Entón pensas buffer será definido como NULL. 996 00:49:03,670 --> 00:49:05,850 Por que o buffer definirse como NULL? 997 00:49:05,850 --> 00:49:10,420 >> ALUMNO 40: Porque cando fread, estás a poñer 998 00:49:10,420 --> 00:49:13,528 nada en buffer. 999 00:49:13,528 --> 00:49:13,980 >> Jason Hirschhorn: Aceptar. 1000 00:49:13,980 --> 00:49:15,550 Entón está a pensar fread - 1001 00:49:15,550 --> 00:49:19,000 cando chegamos ao final do ficheiro, o que é fread vai facer? 1002 00:49:19,000 --> 00:49:21,230 Creo que esa é a cuestión debemos descubrir. 1003 00:49:21,230 --> 00:49:21,960 Que fread facer? 1004 00:49:21,960 --> 00:49:25,640 Será que poñer NULL no buffer, ou fai outra cousa? 1005 00:49:25,640 --> 00:49:27,510 Como podemos descubrir o que fai? 1006 00:49:27,510 --> 00:49:28,190 >> ALUMNO 42: Home. 1007 00:49:28,190 --> 00:49:28,810 >> Jason Hirschhorn: Home. 1008 00:49:28,810 --> 00:49:32,280 Entón, imos ollar para aquí. 1009 00:49:32,280 --> 00:49:34,000 Valor de retorno. 1010 00:49:34,000 --> 00:49:39,620 En caso de éxito, fread e fwrite voltar a número de elementos lidos ou gravados. 1011 00:49:39,620 --> 00:49:43,700 Este número coincide co número de bytes trasladado só cando o tamaño é 1. 1012 00:49:43,700 --> 00:49:47,780 Se ocorrer un erro, ou a fin do ficheiro é alcanzado, o valor de retorno é un 1013 00:49:47,780 --> 00:49:51,490 conta de elementos curto ou 0. 1014 00:49:51,490 --> 00:49:57,860 >> Así, para os nosos propósitos, se alcances fread Ao final do proceso, e le-se a partir de 1015 00:49:57,860 --> 00:50:02,100 a fin do ficheiro, non hai máis nada de ler, que é o que vai volver? 1016 00:50:02,100 --> 00:50:03,290 >> ALUMNO 43: Cero? 1017 00:50:03,290 --> 00:50:04,540 >> Jason Hirschhorn: O que? 1018 00:50:04,540 --> 00:50:05,300 >> ALUMNO 43: Cero? 1019 00:50:05,300 --> 00:50:05,690 >> Jason Hirschhorn: Cero. 1020 00:50:05,690 --> 00:50:06,940 Vai voltar cero. 1021 00:50:06,940 --> 00:50:09,360 1022 00:50:09,360 --> 00:50:13,010 Entón, nós sabemos que fread, cando temos alcanzou o final do arquivo, vai 1023 00:50:13,010 --> 00:50:13,690 para volver a cero. 1024 00:50:13,690 --> 00:50:17,460 Como podemos usar isto ao noso favor? 1025 00:50:17,460 --> 00:50:21,733 >> AVI: Pode declarar unha variable fóra do circuíto de chamada de cheque. 1026 00:50:21,733 --> 00:50:27,040 Se a verificación é igual a - 1027 00:50:27,040 --> 00:50:28,190 polo de agora - un. 1028 00:50:28,190 --> 00:50:28,920 >> Jason Hirschhorn: Aceptar. 1029 00:50:28,920 --> 00:50:38,050 >> AVI: E entón podes poñer un IF declaración logo fread dicindo que se 1030 00:50:38,050 --> 00:50:42,600 fread é igual a cero - 1031 00:50:42,600 --> 00:50:43,850 ningún. 1032 00:50:43,850 --> 00:50:46,002 1033 00:50:46,002 --> 00:50:47,252 >> Jason Hirschhorn: Quen pode axudar Avi fóra? 1034 00:50:47,252 --> 00:50:49,690 1035 00:50:49,690 --> 00:50:52,410 >> AVI: Cal é o valor retorno por fread? 1036 00:50:52,410 --> 00:50:54,060 >> Jason Hirschhorn: Nós só pasou por riba diso. 1037 00:50:54,060 --> 00:50:55,450 >> AVI: Como representa-lo? 1038 00:50:55,450 --> 00:50:57,190 >> Jason Hirschhorn: El retorna - imos buscar por aquí - el retorna un 1039 00:50:57,190 --> 00:50:59,340 size_t, que é esencialmente un enteiro. 1040 00:50:59,340 --> 00:51:02,240 1041 00:51:02,240 --> 00:51:03,410 Entón, el retorna un enteiro. 1042 00:51:03,410 --> 00:51:05,160 E no noso caso, será voltar 1 ou 0 - 1043 00:51:05,160 --> 00:51:08,760 1 se ler unha cousa - un byte, e 0, se ten chegado ao fin. 1044 00:51:08,760 --> 00:51:13,560 1045 00:51:13,560 --> 00:51:16,450 Entón, se fread - 1046 00:51:16,450 --> 00:51:16,855 É mesmo? 1047 00:51:16,855 --> 00:51:20,330 >> ALUMNO 45: Non pode simplemente poñer o pleno fread (tapón, 1, 1, src) en 1048 00:51:20,330 --> 00:51:21,660 while? 1049 00:51:21,660 --> 00:51:26,510 >> Jason Hirschhorn: Entón propón facendo iso para alí? 1050 00:51:26,510 --> 00:51:27,600 >> [Voces interpondo] 1051 00:51:27,600 --> 00:51:29,520 >> Jason Hirschhorn: Espere un pouco. 1052 00:51:29,520 --> 00:51:30,885 Entón, nós estamos librando diso. 1053 00:51:30,885 --> 00:51:33,300 Entón, está propoñendo poñer en fread alí? 1054 00:51:33,300 --> 00:51:35,457 O que temos que tamén mover se quere facer isto? 1055 00:51:35,457 --> 00:51:36,740 >> ALUMNO 45: O búfer de fóra. 1056 00:51:36,740 --> 00:51:38,110 >> Jason Hirschhorn: Debemos tamén mover este aquí. 1057 00:51:38,110 --> 00:51:41,700 >> ALUMNO 45: Mais o fai constantemente movelo para adiante? 1058 00:51:41,700 --> 00:51:42,950 >> [Voces interpondo] 1059 00:51:42,950 --> 00:51:46,540 1060 00:51:46,540 --> 00:51:47,470 >> Jason Hirschhorn: Aceptar. 1061 00:51:47,470 --> 00:51:50,570 Entón é iso que Okshar proposto. 1062 00:51:50,570 --> 00:51:51,930 Creamos o noso buffer. 1063 00:51:51,930 --> 00:51:57,020 Nós Mentres fread, entón nós fwrite. 1064 00:51:57,020 --> 00:51:59,760 Pensa sobre iso? 1065 00:51:59,760 --> 00:52:04,050 >> ALUMNO 46: A miña única pregunta é: sería realmente executar a orde fread? 1066 00:52:04,050 --> 00:52:06,175 >> Jason Hirschhorn: Gran pregunta. 1067 00:52:06,175 --> 00:52:11,050 Cando está poñendo unha chamada de función dentro dunha condición, de que forma 1068 00:52:11,050 --> 00:52:12,300 chamada de función realizar? 1069 00:52:12,300 --> 00:52:15,760 1070 00:52:15,760 --> 00:52:17,770 Nós xa vimos exemplos diso antes. 1071 00:52:17,770 --> 00:52:24,900 1072 00:52:24,900 --> 00:52:25,660 Non? 1073 00:52:25,660 --> 00:52:26,125 >> ALUMNO 46: Aceptar. 1074 00:52:26,125 --> 00:52:26,590 É. 1075 00:52:26,590 --> 00:52:30,140 Entón fai executar. 1076 00:52:30,140 --> 00:52:31,790 >> Jason Hirschhorn: Vimos cousas así antes, onde temos unha 1077 00:52:31,790 --> 00:52:33,550 chamada de función dentro dunha condición. 1078 00:52:33,550 --> 00:52:35,540 Será que esta chamada de función realizar? 1079 00:52:35,540 --> 00:52:36,350 Si 1080 00:52:36,350 --> 00:52:37,410 Polo tanto, a resposta é si. 1081 00:52:37,410 --> 00:52:41,010 Esta chamada de función será executada. 1082 00:52:41,010 --> 00:52:42,418 Pero, de novo, iso é o que queremos? 1083 00:52:42,418 --> 00:52:49,250 1084 00:52:49,250 --> 00:52:52,204 >> ¿Que é un xeito que poderiamos imaxinar se é o que queremos? 1085 00:52:52,204 --> 00:52:53,470 >> ESTUDANTES múltiples: Executa-o? 1086 00:52:53,470 --> 00:52:54,460 >> Jason Hirschhorn: Podemos executalo. 1087 00:52:54,460 --> 00:52:57,500 Pero antes de facelo, poderiamos tamén razoar por iso. 1088 00:52:57,500 --> 00:52:57,920 Se - 1089 00:52:57,920 --> 00:53:01,920 dicir que temos un byte na nosa ficheiro, nós imos chegar ata aquí, 1090 00:53:01,920 --> 00:53:02,660 nós imos chegar a este código. 1091 00:53:02,660 --> 00:53:03,620 Este será executado. 1092 00:53:03,620 --> 00:53:07,780 fread volverá un byte e almacena-lo no buffer. 1093 00:53:07,780 --> 00:53:11,290 E iso vai avaliar a 1, dereito, despois de que el retorna 1. 1094 00:53:11,290 --> 00:53:12,640 >> Así, mentres a 1. 1095 00:53:12,640 --> 00:53:15,325 Isto significa que o código dentro o loop while levará a cabo? 1096 00:53:15,325 --> 00:53:15,453 >> ALUMNO 47: Yeah. 1097 00:53:15,453 --> 00:53:16,040 É certo. 1098 00:53:16,040 --> 00:53:16,290 >> Jason Hirschhorn: si. 1099 00:53:16,290 --> 00:53:17,490 1 é certo. 1100 00:53:17,490 --> 00:53:18,240 Non é 0. 1101 00:53:18,240 --> 00:53:20,360 Así, o código aquí dentro será executado. 1102 00:53:20,360 --> 00:53:22,300 Entón imos escribir isto. 1103 00:53:22,300 --> 00:53:25,340 Nós imos voltar a este liña unha vez máis. 1104 00:53:25,340 --> 00:53:26,850 Agora temos - 1105 00:53:26,850 --> 00:53:28,550 estamos ao final do noso arquivo. 1106 00:53:28,550 --> 00:53:30,980 Lemos desde o final do noso arquivo, porque só tiña un byte nela. 1107 00:53:30,980 --> 00:53:34,270 >> Fread retorna 0, tendas algo no tapón. 1108 00:53:34,270 --> 00:53:35,890 Eu honestamente non sei o que almacena en buffer. 1109 00:53:35,890 --> 00:53:38,380 Nós probablemente podería mirar para arriba a ver que fai. 1110 00:53:38,380 --> 00:53:40,130 Que eu sinceramente non sei. 1111 00:53:40,130 --> 00:53:43,090 Non sabemos, quen lle importa o que almacena en tapón? 1112 00:53:43,090 --> 00:53:44,010 Pero iso non voltar 0. 1113 00:53:44,010 --> 00:53:45,440 E será que, aínda que 0 realizar? 1114 00:53:45,440 --> 00:53:49,950 1115 00:53:49,950 --> 00:53:51,180 >> Mentres 0 non se levará a cabo. 1116 00:53:51,180 --> 00:53:54,030 Entón imos pasar por aquí. 1117 00:53:54,030 --> 00:53:58,870 Entón, imos comezar un concerto de mans, se esta é o código que debe ser executado, ou se 1118 00:53:58,870 --> 00:54:00,140 debe facer cambios en primeiro lugar. 1119 00:54:00,140 --> 00:54:02,180 Entón, se vostede pensa - ten que votar. 1120 00:54:02,180 --> 00:54:06,885 Se pensas que hai que executar este código como é, por favor, levante a man. 1121 00:54:06,885 --> 00:54:12,440 1122 00:54:12,440 --> 00:54:13,400 >> Aceptar. 1123 00:54:13,400 --> 00:54:14,315 Hai un - 1124 00:54:14,315 --> 00:54:17,260 ten unha dúbida, preocupación? 1125 00:54:17,260 --> 00:54:18,080 É. 1126 00:54:18,080 --> 00:54:21,240 >> ALUMNO 48: Despois de pasarmos tapón fóra do loop, nós 1127 00:54:21,240 --> 00:54:22,670 ten que malloc isto? 1128 00:54:22,670 --> 00:54:23,310 >> Jason Hirschhorn: Gran pregunta. 1129 00:54:23,310 --> 00:54:26,670 Despois de pasarmos tapón fóra do loop, temos que malloc isto? 1130 00:54:26,670 --> 00:54:28,400 Esta é unha cuestión de alcance. 1131 00:54:28,400 --> 00:54:32,130 Se iniciar o buffer fóra deste ciclo, vai existir 1132 00:54:32,130 --> 00:54:33,534 dentro do ciclo? 1133 00:54:33,534 --> 00:54:35,230 >> ESTUDANTES múltiples: Si 1134 00:54:35,230 --> 00:54:35,580 >> Jason Hirschhorn: si. 1135 00:54:35,580 --> 00:54:40,100 O seu ámbito de aplicación abrangue dentro do loop, e, en realidade, calquera cousa por baixo del dentro 1136 00:54:40,100 --> 00:54:42,460 deste código, incluíndo a as cousas aquí dentro. 1137 00:54:42,460 --> 00:54:43,930 Entón, nós non precisamos malloc-lo. 1138 00:54:43,930 --> 00:54:47,766 É unha variable local, eo seu ámbito aínda inclúe o loop. 1139 00:54:47,766 --> 00:54:49,540 >> ALUMNO 49: Será que necesitamos para liberalo la? 1140 00:54:49,540 --> 00:54:51,770 >> Jason Hirschhorn: Será que Debe buffer libre? 1141 00:54:51,770 --> 00:54:53,860 >> ALUMNO 49: Si, se non o facemos malloc. 1142 00:54:53,860 --> 00:54:55,750 >> Jason Hirschhorn: Será que Debe buffer libre? 1143 00:54:55,750 --> 00:54:57,160 Non. 1144 00:54:57,160 --> 00:55:01,280 De novo, é unha variable local, de modo que non necesitamos para liberalo la. 1145 00:55:01,280 --> 00:55:02,170 Aceptar. 1146 00:55:02,170 --> 00:55:03,480 Imos ver o que acontece. 1147 00:55:03,480 --> 00:55:17,290 1148 00:55:17,290 --> 00:55:18,220 Por iso, non é inicializar. 1149 00:55:18,220 --> 00:55:20,830 Isto foi o que algo que Marcus proposto anteriormente. 1150 00:55:20,830 --> 00:55:25,340 Polo tanto, temos que o erro, tapón variable é non iniciar cando usados ​​aquí. 1151 00:55:25,340 --> 00:55:26,590 >> Como podemos solucionar isto? 1152 00:55:26,590 --> 00:55:29,460 1153 00:55:29,460 --> 00:55:30,960 >> ALUMNO 50: malloc isto? 1154 00:55:30,960 --> 00:55:31,770 >> ALUMNO 51: Igual a NULL? 1155 00:55:31,770 --> 00:55:33,000 >> ALUMNO 52: Diga tapón é igual a NULL. 1156 00:55:33,000 --> 00:55:34,250 >> Jason Hirschhorn: Aceptar. 1157 00:55:34,250 --> 00:55:40,040 1158 00:55:40,040 --> 00:55:40,770 Parece bo. 1159 00:55:40,770 --> 00:55:42,410 Temos agora. 1160 00:55:42,410 --> 00:55:45,630 Imos crear algo para tratar de copia. 1161 00:55:45,630 --> 00:56:08,990 1162 00:56:08,990 --> 00:56:10,490 Entón, nós temos o noso arquivo de texto. 1163 00:56:10,490 --> 00:56:11,740 Como podemos executar este programa? 1164 00:56:11,740 --> 00:56:14,140 1165 00:56:14,140 --> 00:56:15,472 É. 1166 00:56:15,472 --> 00:56:22,230 >> ALUMNO 53: Podes facer dot cortar cp, teste.txt. 1167 00:56:22,230 --> 00:56:25,140 E entón pode nomear outro ficheiro que vai gardar a. 1168 00:56:25,140 --> 00:56:25,510 >> Jason Hirschhorn: Aceptar. 1169 00:56:25,510 --> 00:56:27,380 Imos chamalo out.txt. 1170 00:56:27,380 --> 00:56:28,630 Legal? 1171 00:56:28,630 --> 00:56:31,700 1172 00:56:31,700 --> 00:56:34,320 L culpa. 1173 00:56:34,320 --> 00:56:35,570 Reflexións sobre o fallo seg? 1174 00:56:35,570 --> 00:56:40,900 1175 00:56:40,900 --> 00:56:41,390 Isto é óptimo. 1176 00:56:41,390 --> 00:56:45,040 Como podemos descubrir onde a culpa é seg? 1177 00:56:45,040 --> 00:56:45,680 O que? 1178 00:56:45,680 --> 00:56:45,990 >> ALUMNO 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 Corremos gdb escribindo barra gdb punto, o nome do noso programa. 1182 00:56:55,300 --> 00:56:57,020 Non hai argumentos de liña de comandos alí. 1183 00:56:57,020 --> 00:56:59,570 Imos establecer un punto de interrupción na principal. 1184 00:56:59,570 --> 00:57:02,190 Se eu queira comezar gdb, o que fago? 1185 00:57:02,190 --> 00:57:02,730 >> ALUMNO 55: R. 1186 00:57:02,730 --> 00:57:08,910 >> Jason Hirschhorn: R. E despois? 1187 00:57:08,910 --> 00:57:09,400 >> ALUMNO 55: Os argumentos? 1188 00:57:09,400 --> 00:57:10,650 >> Jason Hirschhorn: A continuación, o argumentos de liña de comandos. 1189 00:57:10,650 --> 00:57:15,890 1190 00:57:15,890 --> 00:57:17,120 Imos examinar. 1191 00:57:17,120 --> 00:57:19,090 N é só me levando liña por liña. 1192 00:57:19,090 --> 00:57:21,450 Eu estou indo a ir ata Recibe a miña culpa seg. 1193 00:57:21,450 --> 00:57:22,700 Non é a miña culpa seg. 1194 00:57:22,700 --> 00:57:24,960 1195 00:57:24,960 --> 00:57:27,875 Parece que fread causado miña culpa seg. 1196 00:57:27,875 --> 00:57:30,570 1197 00:57:30,570 --> 00:57:32,770 Sei fread causada pola miña culpa Lun, porque esa era a 1198 00:57:32,770 --> 00:57:34,950 liña que só executado. 1199 00:57:34,950 --> 00:57:36,530 >> E o único que era pasando nesa liña - 1200 00:57:36,530 --> 00:57:37,520 dúas cousas foron a suceder. 1201 00:57:37,520 --> 00:57:40,610 Fread estaba indo, e despois fomos facendo algunhas probas while. 1202 00:57:40,610 --> 00:57:44,820 Eu estou disposto a apostar que a while verificación non estaba causando a miña culpa seg. 1203 00:57:44,820 --> 00:57:46,950 Moi probablemente, fread foi causando a miña culpa seg. 1204 00:57:46,950 --> 00:57:49,260 Eu tamén vexo algo aquí, memcopy. 1205 00:57:49,260 --> 00:57:50,500 >> Copia da memoria. 1206 00:57:50,500 --> 00:57:53,820 Soa como movendo de memoria un lugar a outro. 1207 00:57:53,820 --> 00:57:56,890 Soa como algo que ía ocorrer en fread, quizais algunha memoria 1208 00:57:56,890 --> 00:57:58,910 mover de aquí ata aquí. 1209 00:57:58,910 --> 00:58:01,740 1210 00:58:01,740 --> 00:58:03,860 Imos pasar por iso de novo. 1211 00:58:03,860 --> 00:58:06,900 ¿Como comezar de novo e executa-lo novo? 1212 00:58:06,900 --> 00:58:08,092 É. 1213 00:58:08,092 --> 00:58:15,140 >> ALUMNO 56: Debe poñer un e comercial antes de tapón? 1214 00:58:15,140 --> 00:58:17,800 >> Jason Hirschhorn: Entón e comercial antes buffer de me dar o enderezo de 1215 00:58:17,800 --> 00:58:22,330 buffer, que é un char *. 1216 00:58:22,330 --> 00:58:25,250 Imos percorrer este unha vez máis. 1217 00:58:25,250 --> 00:58:28,248 Como fago para executar con el unha vez máis? 1218 00:58:28,248 --> 00:58:29,210 >> ALUMNO 57: pode só escriba correr de novo? 1219 00:58:29,210 --> 00:58:32,050 >> Jason Hirschhorn: Escriba correr de novo. 1220 00:58:32,050 --> 00:58:33,415 Entón, nós non imos executar esta liña. 1221 00:58:33,415 --> 00:58:36,250 1222 00:58:36,250 --> 00:58:39,240 Entón buffer é un punteiro NULL. 1223 00:58:39,240 --> 00:58:40,490 Corrixa? 1224 00:58:40,490 --> 00:58:45,870 1225 00:58:45,870 --> 00:58:47,060 Está apuntando - imos ver. 1226 00:58:47,060 --> 00:58:48,500 Se temos a nosa - 1227 00:58:48,500 --> 00:58:50,430 sacar unha foto rápida deste. 1228 00:58:50,430 --> 00:58:53,500 Todo o mundo pode ver se Eu escribo aquí? 1229 00:58:53,500 --> 00:59:02,890 >> Entón, na pila, temos un lugar de variable e chámase buffer, e 1230 00:59:02,890 --> 00:59:08,230 é un punteiro para un char. 1231 00:59:08,230 --> 00:59:10,325 O enderezo é este carácter no? 1232 00:59:10,325 --> 00:59:12,550 >> ALUMNO 58: 0x0. 1233 00:59:12,550 --> 00:59:13,400 >> Jason Hirschhorn: Certo. 1234 00:59:13,400 --> 00:59:14,200 Iso é o que é. 1235 00:59:14,200 --> 00:59:17,600 Desde aquí, dentro de buffer, almacénase 0x0. 1236 00:59:17,600 --> 00:59:20,480 Iso é o que temos - o configuración que temos agora. 1237 00:59:20,480 --> 00:59:27,540 Entón esta liña, fread, pon algo da fonte onde? 1238 00:59:27,540 --> 00:59:30,560 Dentro desa caixa ou esta caixa? 1239 00:59:30,560 --> 00:59:31,060 Que caixa? 1240 00:59:31,060 --> 00:59:33,290 Caixa ou caixa dereita e esquerda? 1241 00:59:33,290 --> 00:59:34,750 Este cadro da dereita. 1242 00:59:34,750 --> 00:59:38,440 >> El segue o punteiro, e pon-lo aquí. 1243 00:59:38,440 --> 00:59:42,620 Cando tratamos e memoria toque localización 0, que é o que imos chegar? 1244 00:59:42,620 --> 00:59:45,050 Un fallo de segmento. 1245 00:59:45,050 --> 00:59:46,550 Ese é o erro que temos agora. 1246 00:59:46,550 --> 00:59:46,970 É. 1247 00:59:46,970 --> 00:59:48,410 >> ALUMNO 59: Non ten poñer tapón estrela? 1248 00:59:48,410 --> 00:59:49,180 Ou non? 1249 00:59:49,180 --> 00:59:50,050 Para fread? 1250 00:59:50,050 --> 00:59:51,450 >> Jason Hirschhorn: Entón fread leva un punteiro. 1251 00:59:51,450 --> 00:59:54,920 1252 00:59:54,920 --> 00:59:55,900 Así, el pasa en tapón. 1253 00:59:55,900 --> 00:59:58,980 E entón el vai de-referencia que nalgún lugar dentro fread. 1254 00:59:58,980 --> 01:00:00,700 Pero, de novo, nós vimos, é preciso un punteiro. 1255 01:00:00,700 --> 01:00:02,560 Non precisamos pasalo tapón estrela. 1256 01:00:02,560 --> 01:00:05,350 Iso sería pasar que o que está aquí. 1257 01:00:05,350 --> 01:00:07,980 E que, probablemente, darnos un erro porque estamos des referenciando-lo. 1258 01:00:07,980 --> 01:00:08,150 >> Non? 1259 01:00:08,150 --> 01:00:10,690 Cando de-referencia este punteiro cando intentamos acceder a este sitio, 1260 01:00:10,690 --> 01:00:13,140 estamos a recibir un erro - nosa fallo de segmento. 1261 01:00:13,140 --> 01:00:15,800 So - 1262 01:00:15,800 --> 01:00:16,690 oops. 1263 01:00:16,690 --> 01:00:19,090 Nós imos saír de gdb. 1264 01:00:19,090 --> 01:00:20,160 Nosa liña - 1265 01:00:20,160 --> 01:00:22,990 o noso problema - é certo aquí nesta liña. 1266 01:00:22,990 --> 01:00:26,410 E é un problema, porque desta liña. 1267 01:00:26,410 --> 01:00:31,780 >> Como podemos crear unha caixa que está accesible en fread. 1268 01:00:31,780 --> 01:00:31,980 Non? 1269 01:00:31,980 --> 01:00:35,190 Necesitamos crear unha caixa que é unha byte grande, o tamaño dun caracter. 1270 01:00:35,190 --> 01:00:38,590 Pero necesitamos que a caixa para ser accesible cando esta función é executada. 1271 01:00:38,590 --> 01:00:39,390 Entón, onde - 1272 01:00:39,390 --> 01:00:39,640 si. 1273 01:00:39,640 --> 01:00:40,440 Algunha idea? 1274 01:00:40,440 --> 01:00:43,615 >> ALUMNO 60: Só ten que configurar-lo como calquera de caracteres aleatorios. 1275 01:00:43,615 --> 01:00:49,150 1276 01:00:49,150 --> 01:00:51,640 Só ten que facer iguais char buffer o personaxe. 1277 01:00:51,640 --> 01:00:53,795 E entón, cando ten buffer de alí - 1278 01:00:53,795 --> 01:00:54,110 >> Jason Hirschhorn: Agarde. 1279 01:00:54,110 --> 01:00:55,110 Char tapón? 1280 01:00:55,110 --> 01:00:55,880 Entón, ningunha estrela? 1281 01:00:55,880 --> 01:00:56,390 >> ALUMNO 60: Yeah. 1282 01:00:56,390 --> 01:00:58,560 Elimina a estrela. 1283 01:00:58,560 --> 01:01:00,690 Igual a un personaxe ao chou. 1284 01:01:00,690 --> 01:01:01,460 >> Jason Hirschhorn: Aceptar. 1285 01:01:01,460 --> 01:01:02,420 Entón me dea un. 1286 01:01:02,420 --> 01:01:03,170 >> ALUMNO 60: Como un ou algo así. 1287 01:01:03,170 --> 01:01:06,160 E entón cando tes tapón alí, usa un - 1288 01:01:06,160 --> 01:01:06,420 >> ALUMNO 61: Star? 1289 01:01:06,420 --> 01:01:07,650 Ah, non, o E comercial. 1290 01:01:07,650 --> 01:01:09,000 >> ALUMNO 60: Utilice o comercial. 1291 01:01:09,000 --> 01:01:09,470 >> Jason Hirschhorn: Aceptar. 1292 01:01:09,470 --> 01:01:11,320 E que dicir en fwrite? 1293 01:01:11,320 --> 01:01:14,150 >> ALUMNO 60: Use o comercial de novo. 1294 01:01:14,150 --> 01:01:14,320 >> Jason Hirschhorn: Todo ben. 1295 01:01:14,320 --> 01:01:20,970 Polo tanto, a súa idea é, creamos un char e poñer algo nela, e, a continuación, 1296 01:01:20,970 --> 01:01:22,612 escribir para ese carácter. 1297 01:01:22,612 --> 01:01:23,760 >> ALUMNO 60: Yeah. 1298 01:01:23,760 --> 01:01:25,916 >> Jason Hirschhorn: Qué que a xente pensa? 1299 01:01:25,916 --> 01:01:27,770 >> ALUMNO 62: É complicado. 1300 01:01:27,770 --> 01:01:28,460 >> Jason Hirschhorn: Aceptar. 1301 01:01:28,460 --> 01:01:29,760 Imos tirala. 1302 01:01:29,760 --> 01:01:35,720 Entón, esta vez, eu vou chamar iso de vermello na pila aquí, e entón nós 1303 01:01:35,720 --> 01:01:36,410 terá - 1304 01:01:36,410 --> 01:01:36,822 ooh! 1305 01:01:36,822 --> 01:01:38,060 Sentímolo. 1306 01:01:38,060 --> 01:01:45,930 Entón, esta vez temos unha cousa chamada tapón, e é na pila. 1307 01:01:45,930 --> 01:01:48,430 Corrixa? 1308 01:01:48,430 --> 01:01:51,520 E nós estamos a gardar nunha, inicialmente. 1309 01:01:51,520 --> 01:01:53,830 >> Entón temos o noso chamamento para fread. 1310 01:01:53,830 --> 01:02:01,300 O fread fai é que leva un byte de noso arquivo e coloca-lo nalgún lugar. 1311 01:02:01,300 --> 01:02:04,570 Ela coloca-lo en calquera que sexa o cousa está a apuntar. 1312 01:02:04,570 --> 01:02:09,130 Ben, antes de que tivemos este enderezo - 1313 01:02:09,130 --> 01:02:10,250 0x0. 1314 01:02:10,250 --> 01:02:13,349 Agora, a dirección que temos? 1315 01:02:13,349 --> 01:02:14,650 >> ALUMNO 63: Sexa cal sexa tapón enderezo é. 1316 01:02:14,650 --> 01:02:15,970 >> Jason Hirschhorn: Whatever tapón enderezo é. 1317 01:02:15,970 --> 01:02:22,370 El probablemente vai ser algo parecido. 1318 01:02:22,370 --> 01:02:26,950 Probablemente vai comezar cun b e un f, e despois ten outros seis 1319 01:02:26,950 --> 01:02:27,970 díxitos hexadecimais. 1320 01:02:27,970 --> 01:02:28,480 Non importa. 1321 01:02:28,480 --> 01:02:29,470 Algúns enderezo. 1322 01:02:29,470 --> 01:02:31,410 E nós estamos pasando a dirección dentro 1323 01:02:31,410 --> 01:02:34,790 >> E nós imos poñer o noso único cousa byte naquel enderezo. 1324 01:02:34,790 --> 01:02:38,470 Entón, nós imos poñer o noso único byte cousa aquí dentro. 1325 01:02:38,470 --> 01:02:40,800 E entón imos escribir a partir de o que é sempre aquí dentro. 1326 01:02:40,800 --> 01:02:43,425 1327 01:02:43,425 --> 01:02:45,380 Alguén ten algunha dúbida sobre iso? 1328 01:02:45,380 --> 01:02:50,990 1329 01:02:50,990 --> 01:02:54,690 Quen pensa que este código vai funcionar? 1330 01:02:54,690 --> 01:02:56,020 >> Levante a man se pensas este código vai funcionar. 1331 01:02:56,020 --> 01:02:57,270 Ten que tomar unha posición. 1332 01:02:57,270 --> 01:03:00,670 1333 01:03:00,670 --> 01:03:02,500 E quen pensa que este código non vai funcionar? 1334 01:03:02,500 --> 01:03:04,610 Levante súa man. 1335 01:03:04,610 --> 01:03:06,750 Todo o mundo debe ser levantando a man. 1336 01:03:06,750 --> 01:03:07,670 Aceptar. 1337 01:03:07,670 --> 01:03:09,390 Michael, onde está de pé? 1338 01:03:09,390 --> 01:03:10,680 >> MICHAEL: Eu non podo decidir. 1339 01:03:10,680 --> 01:03:12,070 Kind of no medio. 1340 01:03:12,070 --> 01:03:12,736 >> Jason Hirschhorn: Vostede é no medio. 1341 01:03:12,736 --> 01:03:13,092 Escolla un. 1342 01:03:13,092 --> 01:03:14,400 >> MICHAEL: Vou ter fe e dicir que vai funcionar. 1343 01:03:14,400 --> 01:03:14,660 >> Jason Hirschhorn: Aceptar. 1344 01:03:14,660 --> 01:03:16,047 Vai ter fe e din que funciona? 1345 01:03:16,047 --> 01:03:26,490 1346 01:03:26,490 --> 01:03:27,020 Que pasou? 1347 01:03:27,020 --> 01:03:28,270 >> [Voces interpondo] 1348 01:03:28,270 --> 01:03:35,170 1349 01:03:35,170 --> 01:03:35,950 >> Jason Hirschhorn: Sen fallo seg. 1350 01:03:35,950 --> 01:03:40,320 Como podemos comprobar que dúas cousas son iguais? 1351 01:03:40,320 --> 01:03:42,060 Dous ficheiros son iguais. 1352 01:03:42,060 --> 01:03:43,300 >> ALUMNO 64: Dif. 1353 01:03:43,300 --> 01:03:45,490 >> Jason Hirschhorn: Dif. 1354 01:03:45,490 --> 01:03:51,630 Cheques Dif para as diferenzas entre dous arquivos, e se volve 1355 01:03:51,630 --> 01:03:52,890 nada, son idénticos. 1356 01:03:52,890 --> 01:03:59,030 E se abrir, temos o noso arquivo. 1357 01:03:59,030 --> 01:04:00,490 Entón esa foi a solución correcta. 1358 01:04:00,490 --> 01:04:01,780 Imos mirar para atrás, unha vez máis. 1359 01:04:01,780 --> 01:04:04,080 De feito, nin sequera necesario arrincar el. 1360 01:04:04,080 --> 01:04:05,520 >> El probablemente sería un pouco máis limpo, se non puxo 1361 01:04:05,520 --> 01:04:07,680 algo aleatorio alí. 1362 01:04:07,680 --> 01:04:13,070 A cuestión é, necesitas crear un espazo para gardar algo de 1363 01:04:13,070 --> 01:04:15,530 fread e tomar algo de fwrite. 1364 01:04:15,530 --> 01:04:18,400 E esa cousa tiña que ser un lugar de variable na pila - vostede 1365 01:04:18,400 --> 01:04:19,890 podería malloc algún espazo. 1366 01:04:19,890 --> 01:04:23,030 >> Entón, en realidade, podería malloc escrito aquí, e 1367 01:04:23,030 --> 01:04:25,420 que tería funcionando. 1368 01:04:25,420 --> 01:04:28,660 E, entón, sería o almacenamento nosas cousas en algún lugar en pila. 1369 01:04:28,660 --> 01:04:31,940 Pero este é, en realidade, probablemente, a solución máis elegante. 1370 01:04:31,940 --> 01:04:34,490 Só ten que crear un espazo na pila por estas cousas para ir. 1371 01:04:34,490 --> 01:04:37,690 1372 01:04:37,690 --> 01:04:38,990 >> Eu dous outros comentarios. 1373 01:04:38,990 --> 01:04:44,650 Se tivese que tomar a súa vez nesta, e logo se marcou con iso, os meus comentarios 1374 01:04:44,650 --> 01:04:47,400 sería do seguinte xeito. 1375 01:04:47,400 --> 01:04:54,300 Estes 1 está aquí, para min, mire como números máxicos. 1376 01:04:54,300 --> 01:04:56,860 Este 1, en termos de fread, ten sentido. 1377 01:04:56,860 --> 01:04:59,580 Ese é o número de cousas para ler ou escribir. 1378 01:04:59,580 --> 01:05:03,740 >> Pero este aquí debería probablemente ser outra cousa. 1379 01:05:03,740 --> 01:05:05,180 Entón, o que é unha solución? 1380 01:05:05,180 --> 01:05:06,545 >> ALUMNO 65: Tamaño de byte. 1381 01:05:06,545 --> 01:05:10,100 1382 01:05:10,100 --> 01:05:11,080 >> Jason Hirschhorn: Así? 1383 01:05:11,080 --> 01:05:13,130 >> ALUMNO 65: Tamaño de carbón. 1384 01:05:13,130 --> 01:05:13,820 >> Jason Hirschhorn: Tamaño de carbón. 1385 01:05:13,820 --> 01:05:15,290 Si, byte non é un tipo. 1386 01:05:15,290 --> 01:05:16,320 Así, o tamaño das obras de caracteres. 1387 01:05:16,320 --> 01:05:30,270 Poderiamos ten, na parte superior da o noso código, # definido que. 1388 01:05:30,270 --> 01:05:33,410 Chamado algo byte e é realmente un char. 1389 01:05:33,410 --> 01:05:37,675 En realidade, unha visión aínda mellor pode ser iso - 1390 01:05:37,675 --> 01:05:39,391 uint. 1391 01:05:39,391 --> 01:05:40,780 Alguén sabe o que é iso? 1392 01:05:40,780 --> 01:05:44,388 1393 01:05:44,388 --> 01:05:44,840 >> Sentímolo. 1394 01:05:44,840 --> 01:05:46,090 Teño-o para atrás. 1395 01:05:46,090 --> 01:05:51,620 1396 01:05:51,620 --> 01:05:52,200 Espera, non. 1397 01:05:52,200 --> 01:05:53,450 Cal é a forma que vai? 1398 01:05:53,450 --> 01:05:58,071 1399 01:05:58,071 --> 01:05:59,660 Alguén sabe o que é iso? 1400 01:05:59,660 --> 01:06:00,950 É. 1401 01:06:00,950 --> 01:06:05,650 >> ALUMNO 67: Suposto para axudar a estandarizar mediante sistemas de cousas que 1402 01:06:05,650 --> 01:06:08,760 ter - como enteiros sen signo que ten 8 bytes? 1403 01:06:08,760 --> 01:06:11,785 >> Jason Hirschhorn: Isto é exactamente correcto. 1404 01:06:11,785 --> 01:06:14,310 En máquinas diferentes, o tamaño dun char - 1405 01:06:14,310 --> 01:06:15,180 xeralmente non un char. 1406 01:06:15,180 --> 01:06:16,100 Chars son xeralmente un byte. 1407 01:06:16,100 --> 01:06:19,590 Pero o tamaño de outros tipos de datos son tamaños diferentes nunha máquina de 32 bits 1408 01:06:19,590 --> 01:06:21,370 contra unha máquina de 64 bits. 1409 01:06:21,370 --> 01:06:25,180 Un uint8_t sempre 8 bits - 1410 01:06:25,180 --> 01:06:27,210 sempre un byte. 1411 01:06:27,210 --> 01:06:29,580 >> E eu teño incluír este arquivo de cabeceira int estándar. 1412 01:06:29,580 --> 01:06:35,040 Entón, agora, este probablemente sería o mellor xeito de escribir este código. 1413 01:06:35,040 --> 01:06:40,160 1414 01:06:40,160 --> 01:06:41,450 Entón, para me librar dos números máxicos. 1415 01:06:41,450 --> 01:06:44,690 E eu tamén teño un máis lóxico tipo de buffer. 1416 01:06:44,690 --> 01:06:49,450 Non é simplemente un carbón animal, que é un byte, que é o que esperamos que sexa. 1417 01:06:49,450 --> 01:06:53,400 >> E aquí, temos realmente foi un pouco máis robusto. 1418 01:06:53,400 --> 01:06:55,190 Non estamos chamando iso de char, que - 1419 01:06:55,190 --> 01:06:58,630 quizais, quen sabe - pode ser un diferente tamaño en diferentes máquinas. 1420 01:06:58,630 --> 01:07:02,025 En realidade, estamos dicindo que iso é un byte, sempre, non importa o que. 1421 01:07:02,025 --> 01:07:05,810 E se miramos aquí, facemos CP. 1422 01:07:05,810 --> 01:07:08,340 Uh-oh. 1423 01:07:08,340 --> 01:07:09,590 Que pasou? 1424 01:07:09,590 --> 01:07:14,470 1425 01:07:14,470 --> 01:07:16,170 >> ALUMNO 68: Pode ser trocada. 1426 01:07:16,170 --> 01:07:17,880 >> Jason Hirschhorn: O que? 1427 01:07:17,880 --> 01:07:19,130 >> ALUMNO 69: É? 1428 01:07:19,130 --> 01:07:21,940 1429 01:07:21,940 --> 01:07:25,080 >> ALUMNO 70: Non fixo define-lo como un tipo. 1430 01:07:25,080 --> 01:07:28,684 >> ALUMNO 71: pero debe ser definidos na norma. 1431 01:07:28,684 --> 01:07:29,934 >> ALUMNO 72: O que está a suceder? 1432 01:07:29,934 --> 01:07:37,660 1433 01:07:37,660 --> 01:07:40,210 >> ALUMNO 73: Debe definir todas as tapas? 1434 01:07:40,210 --> 01:07:41,370 >> Jason Hirschhorn: Entón non é # define. 1435 01:07:41,370 --> 01:07:45,490 De feito, neste caso, eu son vai utilizar typedef. 1436 01:07:45,490 --> 01:07:48,590 Porque nós estamos usando-o como un tipo nun único local. 1437 01:07:48,590 --> 01:07:51,990 Polo tanto, neste caso, nós realmente queremos typedef que estamos imprimindo un novo tipo 1438 01:07:51,990 --> 01:07:54,490 byte, e é, esencialmente, este. 1439 01:07:54,490 --> 01:07:56,590 É un pouco diferente do que # define. 1440 01:07:56,590 --> 01:08:02,740 >> E agora, o noso código funciona perfectamente. 1441 01:08:02,740 --> 01:08:05,230 Entón, unha vez máis, # define leva algo, substitúe-lo en todas as partes 1442 01:08:05,230 --> 01:08:06,780 coa outra cousa. 1443 01:08:06,780 --> 01:08:07,920 É só unha macro - 1444 01:08:07,920 --> 01:08:09,420 taquigrafia para se librar dos números máxicos. 1445 01:08:09,420 --> 01:08:11,360 Pero neste caso, porque somos utilizando-a como un tipo - 1446 01:08:11,360 --> 01:08:12,180 aquí - 1447 01:08:12,180 --> 01:08:19,880 para que isto funcione, necesitamos typedef para todo o que é byte. 1448 01:08:19,880 --> 01:08:21,840 >> E nós estamos definindo-o aquí. 1449 01:08:21,840 --> 01:08:24,750 Non é un struct, é realmente só un enteiro sen sinal. 1450 01:08:24,750 --> 01:08:27,680 É un byte. 1451 01:08:27,680 --> 01:08:31,910 Este código está dispoñible en liña, e vostedes todos deben te-lo agora. 1452 01:08:31,910 --> 01:08:33,830 >> Entón temos - 1453 01:08:33,830 --> 01:08:34,250 perfecto - 1454 01:08:34,250 --> 01:08:41,359 13 minutos á esquerda para entrar problema ao longo do xogo 5. 1455 01:08:41,359 --> 01:08:44,270 Quero camiñar a través copy.c xuntos, e despois imos falar brevemente 1456 01:08:44,270 --> 01:08:47,120 sobre as outras partes do conxunto de problemas. 1457 01:08:47,120 --> 01:08:48,899 Entón deixe-me puxar arriba copy.c. 1458 01:08:48,899 --> 01:09:03,930 1459 01:09:03,930 --> 01:09:08,810 E o máis legal é que realmente xa escribiu unha morea de este código. 1460 01:09:08,810 --> 01:09:11,180 >> O código que escribimos literalmente saíu de aquí cando eu era 1461 01:09:11,180 --> 01:09:13,120 escribindo isto por conta propia. 1462 01:09:13,120 --> 01:09:16,990 Pero iso é copy.c, constitúe a base para as dúas primeiras partes da 1463 01:09:16,990 --> 01:09:22,340 o conxunto de problema para whodunit.c, que ten que escribir, e resize.c. 1464 01:09:22,340 --> 01:09:27,050 Recover.c, que é a terceira e última parte do conxunto de problemas, non é 1465 01:09:27,050 --> 01:09:29,529 baseado fóra deste ficheiro. 1466 01:09:29,529 --> 01:09:32,200 >> Vas a necesidade de escribir o ficheiro, nós dámoslle un modelo para que 1467 01:09:32,200 --> 01:09:34,620 ficheiro, mais non ten nada a ver con copy.c. 1468 01:09:34,620 --> 01:09:38,675 Senón porque copy.c é a base para as dúas primeiras partes, nós imos 1469 01:09:38,675 --> 01:09:42,000 de atravesa-la agora, así que ten unha boa idea do que fai. 1470 01:09:42,000 --> 01:09:43,640 >> E os comentarios dar un pouco del. 1471 01:09:43,640 --> 01:09:45,120 Nós xa escribimos algo iso. 1472 01:09:45,120 --> 01:09:49,220 En primeiro lugar, estamos asegurarse de temos tres argumentos. 1473 01:09:49,220 --> 01:09:50,560 A continuación, imos lembrar o nome do ficheiro. 1474 01:09:50,560 --> 01:09:52,960 Entón, nós saltamos esta etapa cando codificamos nosa cousa - 1475 01:09:52,960 --> 01:09:54,700 cando o noso CP. 1476 01:09:54,700 --> 01:09:56,750 Pero aquí, están facendo algo máis limpo. 1477 01:09:56,750 --> 01:09:59,350 >> Eles están comprobando se ambos os ficheiros son bos, en 1478 01:09:59,350 --> 01:10:00,450 Ademais de abri-los. 1479 01:10:00,450 --> 01:10:04,760 Nós escribir todo este código só agora, polo que estou non vou me debruzouse sobre este código. 1480 01:10:04,760 --> 01:10:09,670 A continuación é algo que é específico para tipo de arquivos que estamos a usar, o que 1481 01:10:09,670 --> 01:10:12,240 son arquivos de mapa de bits. 1482 01:10:12,240 --> 01:10:15,660 Arquivos de mapa de bits ten algúns metadatos que lles están asociados. 1483 01:10:15,660 --> 01:10:20,190 >> Así, o primeiro par de bytes informarlles lo sobre o arquivo. 1484 01:10:20,190 --> 01:10:23,460 Non son as cores da o pixel na referida imaxe. 1485 01:10:23,460 --> 01:10:25,120 Din-lle sobre o arquivo. 1486 01:10:25,120 --> 01:10:28,220 E se ler o conxunto de problemas, terá moita máis información 1487 01:10:28,220 --> 01:10:33,100 sobre que tipo de estruturas de metadatos están incluídos con bitmaps. 1488 01:10:33,100 --> 01:10:39,350 >> Pero é por iso que temos este primeiro conxunto de - este código aquí. 1489 01:10:39,350 --> 01:10:42,490 Estamos lendo os metadatos - 1490 01:10:42,490 --> 01:10:45,800 dous anacos de metadatos - o ficheiro cabeceira eo cabeceira info. 1491 01:10:45,800 --> 01:10:51,030 E estamos comprobando algunhas partes del para asegúrese de que é un ficheiro de mapa de bits certo 1492 01:10:51,030 --> 01:10:52,420 antes de continuar. 1493 01:10:52,420 --> 01:10:55,470 >> E unha vez máis, estes son detalles que Non é necesario entrar en momento. 1494 01:10:55,470 --> 01:10:57,720 Se ler o conxunto de problemas, vai entender iso. 1495 01:10:57,720 --> 01:11:01,370 Para reducir a historia, estes son só dicindo, este é un ficheiro de mapa de bits e 1496 01:11:01,370 --> 01:11:02,810 confirmando que. 1497 01:11:02,810 --> 01:11:05,180 >> Logo estamos escribindo os para o arquivo para fóra. 1498 01:11:05,180 --> 01:11:05,660 Vemos que aquí. 1499 01:11:05,660 --> 01:11:06,910 Estamos escribindo para o punteiro para fóra. 1500 01:11:06,910 --> 01:11:09,260 1501 01:11:09,260 --> 01:11:11,320 Logo estamos determinando estofado. 1502 01:11:11,320 --> 01:11:15,240 Entón, de novo, como é particularidade con un ficheiro de mapa de bits, algunhas liñas de incluír 1503 01:11:15,240 --> 01:11:16,840 recheo ao final. 1504 01:11:16,840 --> 01:11:19,000 E se ler o conxunto de problemas, vai aprender máis sobre o recheo. 1505 01:11:19,000 --> 01:11:22,330 Esta é a fórmula para determinar o recheo. 1506 01:11:22,330 --> 01:11:23,610 >> Importante lembrar - 1507 01:11:23,610 --> 01:11:29,720 cando cambiar o tamaño dun bitmap ficheiro, o recheo cambios. 1508 01:11:29,720 --> 01:11:31,970 Cando cambia o tamaño dun ficheiro, o recheo cambios. 1509 01:11:31,970 --> 01:11:34,310 Isto non vai ser máis de 3 - 1510 01:11:34,310 --> 01:11:36,510 será de 0 a 3, inclusive. 1511 01:11:36,510 --> 01:11:38,930 Pero cando cambiar o tamaño da algo, os cambios de enchido. 1512 01:11:38,930 --> 01:11:47,100 >> Se eu tivera só un pixel nesa liña, eu precisa de tres bytes de recheo, xa que 1513 01:11:47,100 --> 01:11:51,190 cada liña ten que ser múltiplos de catro bytes nun ficheiro de mapa de bits. 1514 01:11:51,190 --> 01:11:56,120 Pero se eu dobre-lo, para ir dun píxel de dous píxeles, cada un dos cales, 1515 01:11:56,120 --> 01:11:59,510 imos dicir, é un byte, entón eu teño dous bytes de recheo para facer 1516 01:11:59,510 --> 01:12:00,970 que igual a catro. 1517 01:12:00,970 --> 01:12:04,200 >> Entón, cando cambiar o tamaño de algo, Eu teño cambiar a cantidade 1518 01:12:04,200 --> 01:12:06,551 de recheo que eu teño. 1519 01:12:06,551 --> 01:12:08,100 Isto ten sentido para todos? 1520 01:12:08,100 --> 01:12:12,020 1521 01:12:12,020 --> 01:12:18,720 Logo iterado sobre cada liña, ou a través de todas as liñas. 1522 01:12:18,720 --> 01:12:21,400 E, entón, iterado cada columna en cada liña. 1523 01:12:21,400 --> 01:12:25,330 Estamos tratando este como bitmap unha reixa, como temos tratado 1524 01:12:25,330 --> 01:12:26,490 a tarxeta en 15. 1525 01:12:26,490 --> 01:12:29,200 >> Como nós tratamos os ladrillos cando nós impreso-los na pantalla. 1526 01:12:29,200 --> 01:12:31,350 Unha reixa de liñas e columnas. 1527 01:12:31,350 --> 01:12:32,350 Entón - vimos isto. 1528 01:12:32,350 --> 01:12:33,840 Nós, en realidade, só codificado esta. 1529 01:12:33,840 --> 01:12:35,780 Creamos algunhas almacenamento temporal. 1530 01:12:35,780 --> 01:12:38,710 Lemos alí, e, a continuación, nós escribilo. 1531 01:12:38,710 --> 01:12:42,680 Este é o que nós fixemos. 1532 01:12:42,680 --> 01:12:46,760 >> Logo, porque eu dixen que cada liña remata nalgún estofado, nós 1533 01:12:46,760 --> 01:12:48,260 saltar que estofado - 1534 01:12:48,260 --> 01:12:51,000 o antigo estofado. 1535 01:12:51,000 --> 01:12:52,630 E, entón, engadir lo de volta. 1536 01:12:52,630 --> 01:12:55,140 Neste caso, estamos creando exactamente o mesmo ficheiro. 1537 01:12:55,140 --> 01:12:56,180 Estamos só copialo. 1538 01:12:56,180 --> 01:12:57,700 Polo tanto, esta liña é medio parvo. 1539 01:12:57,700 --> 01:12:59,660 Poderiamos literalmente poñer o recheo interior 1540 01:12:59,660 --> 01:13:04,290 >> Pero se cambiar o tamaño do arquivo, aínda quere esta liña? 1541 01:13:04,290 --> 01:13:08,510 1542 01:13:08,510 --> 01:13:11,560 Entón, se nós cambiar o tamaño dun ficheiro, aínda quero saltar 1543 01:13:11,560 --> 01:13:12,810 sobre o antigo estofado? 1544 01:13:12,810 --> 01:13:15,170 1545 01:13:15,170 --> 01:13:15,970 >> ALUMNO 74: Si 1546 01:13:15,970 --> 01:13:17,090 >> Jason Hirschhorn: Entón, o que facemos. 1547 01:13:17,090 --> 01:13:19,290 Porque este, unha vez máis, ofertas co arquivo de orixe. 1548 01:13:19,290 --> 01:13:21,570 Nós non nos importa sobre o recheo do ficheiro de orixe. 1549 01:13:21,570 --> 01:13:23,410 Queremos ir á seguinte liña. 1550 01:13:23,410 --> 01:13:28,850 Pero non basta poñer de volta o vello cantidade de recheo. 1551 01:13:28,850 --> 01:13:31,540 Necesitamos poñer de volta o nova cantidade de recheo. 1552 01:13:31,540 --> 01:13:35,810 >> Entón, cando nós estamos cambiando o tamaño dunha arquivo, aínda queremos saltar o 1553 01:13:35,810 --> 01:13:38,270 recheo no ficheiro de idade - o que estamos lendo en partir. 1554 01:13:38,270 --> 01:13:40,370 Pero o que estamos escribindo para, imos a necesidade de poñer de volta un pouco diferente 1555 01:13:40,370 --> 01:13:41,890 número de recheo que nós determinado. 1556 01:13:41,890 --> 01:13:42,780 É. 1557 01:13:42,780 --> 01:13:44,550 >> ALUMNO 75: A orde dos dous liñas non importa, non? 1558 01:13:44,550 --> 01:13:46,160 Porque está lidando arquivos diferentes. 1559 01:13:46,160 --> 01:13:46,620 >> Jason Hirschhorn: Exactamente. 1560 01:13:46,620 --> 01:13:48,220 A orde destas dúas liñas non importa. 1561 01:13:48,220 --> 01:13:49,790 Nós escribir esta liña. 1562 01:13:49,790 --> 01:13:51,430 Este é aquí para o arquivo estamos escribindo. 1563 01:13:51,430 --> 01:13:54,370 Isto é importante, polo que temos a cantidade correcta de estofado. 1564 01:13:54,370 --> 01:13:57,560 Isto ten que xestionar o arquivo en formato. 1565 01:13:57,560 --> 01:13:58,560 Queremos saltar sobre o recheo. 1566 01:13:58,560 --> 01:13:59,470 >> Non quero ler - 1567 01:13:59,470 --> 01:14:01,500 se estamos a ler un byte de cada vez, nós non se preocupan eses bytes de enchido. 1568 01:14:01,500 --> 01:14:04,070 Queremos pasar á seguinte liña. 1569 01:14:04,070 --> 01:14:11,800 Por último, así como Lucy deu para nós, imos pechar os ficheiros e voltar 0. 1570 01:14:11,800 --> 01:14:13,890 Polo tanto, esta é copy.c. 1571 01:14:13,890 --> 01:14:17,850 E nós realmente escribiu - que pasou a maior parte da sección escribindo isto, esencialmente. 1572 01:14:17,850 --> 01:14:18,740 >> Vostede fixo iso. 1573 01:14:18,740 --> 01:14:22,440 Polo tanto, esperamos que teña un sentido común do que está pasando aquí. 1574 01:14:22,440 --> 01:14:25,890 A gran diferenza, sinceramente, é só Nesta primeira parte que trata sobre 1575 01:14:25,890 --> 01:14:29,970 peculiaridades de arquivos de mapa de bits. 1576 01:14:29,970 --> 01:14:33,570 Entón, eu teño como o meu seguinte diapositiva, o que necesitamos facer? 1577 01:14:33,570 --> 01:14:35,510 Ben, imos pensar en novela policial. 1578 01:14:35,510 --> 01:14:38,080 >> E para alguén que ler o conxunto de problemas, que é o que imos 1579 01:14:38,080 --> 01:14:41,410 cómpre facer a whodunit? 1580 01:14:41,410 --> 01:14:42,080 Simply. 1581 01:14:42,080 --> 01:14:42,460 Aleja. 1582 01:14:42,460 --> 01:14:48,570 >> ALEJA: Pode aproveitar a parte de cada pixel, que indica a vermello. 1583 01:14:48,570 --> 01:14:49,730 E entón - 1584 01:14:49,730 --> 01:14:50,730 especie de? 1585 01:14:50,730 --> 01:14:51,860 >> Jason Hirschhorn: Aceptar. 1586 01:14:51,860 --> 01:14:54,460 Entón, elimina a parte de cada un pixel que indica vermello. 1587 01:14:54,460 --> 01:14:57,234 É preto, pero non todo isto. 1588 01:14:57,234 --> 01:14:59,780 >> ALUMNO 76: Ben, non hai diferentes formas de facelo. 1589 01:14:59,780 --> 01:14:59,870 >> Jason Hirschhorn: Aceptar. 1590 01:14:59,870 --> 01:15:03,070 Déame un xeito. 1591 01:15:03,070 --> 01:15:08,240 >> ALUMNO 76: Elimina todo o vermello, e logo destacar o azul eo verde. 1592 01:15:08,240 --> 01:15:10,010 >> Jason Hirschhorn: Aceptar. 1593 01:15:10,010 --> 01:15:11,830 Así, dado estes dous aspectos - 1594 01:15:11,830 --> 01:15:15,210 parece que darlle un pixel, el ten un nivel de vermello, azul e verde. 1595 01:15:15,210 --> 01:15:19,350 Queremos cambiar os niveis relativos de o vermello, azul e verde, en función 1596 01:15:19,350 --> 01:15:20,740 en que o pixel. 1597 01:15:20,740 --> 01:15:28,380 Onde neste código debemos cambiar o parente vermello, azul e verde 1598 01:15:28,380 --> 01:15:29,720 os niveis de un dato pixel. 1599 01:15:29,720 --> 01:15:30,600 Despois de que o lin - 1600 01:15:30,600 --> 01:15:32,520 antes de gravala-lo? 1601 01:15:32,520 --> 01:15:34,564 Dáme o número da liña. 1602 01:15:34,564 --> 01:15:35,950 >> ESTUDANTES múltiples: 83. 1603 01:15:35,950 --> 01:15:37,320 >> Jason Hirschhorn: 83. 1604 01:15:37,320 --> 01:15:38,570 Entón aquí. 1605 01:15:38,570 --> 01:15:40,830 1606 01:15:40,830 --> 01:15:45,710 Para whodunit, o código que precisa para write todos deben ir á dereita alí. 1607 01:15:45,710 --> 01:15:47,640 E iso é o único código ten que escribir. 1608 01:15:47,640 --> 01:15:51,520 Porque, como escoitamos, todo o que precisa facer é cambiar estes azul relativa, 1609 01:15:51,520 --> 01:15:54,420 niveis de vermello, verde e de cada pixel. 1610 01:15:54,420 --> 01:15:58,250 >> Le-lo, e agora está indo a escribilo. 1611 01:15:58,250 --> 01:16:03,100 ¿Como que - se eu teño esa cousa chamado triple, ben aquí, e é de 1612 01:16:03,100 --> 01:16:04,570 escriba RGBTRIPLE - 1613 01:16:04,570 --> 01:16:08,650 ben, se olhássemos en bmp.h, o que é RGBTRIPLE? 1614 01:16:08,650 --> 01:16:11,450 1615 01:16:11,450 --> 01:16:12,700 >> ALUMNO 77: É un struct. 1616 01:16:12,700 --> 01:16:17,440 1617 01:16:17,440 --> 01:16:18,900 >> Jason Hirschhorn: RGBTRIPLE é un struct. 1618 01:16:18,900 --> 01:16:22,330 Vemos que ben aquí. 1619 01:16:22,330 --> 01:16:26,600 E así se eu quería acceso, por exemplo, o nivel vermello da estrutura, como fago 1620 01:16:26,600 --> 01:16:30,005 acceder o nivel vermello desta struct? 1621 01:16:30,005 --> 01:16:37,280 >> [CLASE murmura] 1622 01:16:37,280 --> 01:16:38,530 >> ALUMNO 78: RGBTRIPLE.rgbtred? 1623 01:16:38,530 --> 01:16:47,250 1624 01:16:47,250 --> 01:16:48,856 >> Jason Hirschhorn: Isto é correcta? 1625 01:16:48,856 --> 01:16:53,040 >> ALUMNO 79: Debe ser triplo punto, en vez de RGBTRIPLE punto? 1626 01:16:53,040 --> 01:16:54,120 >> Jason Hirschhorn: Triple. 1627 01:16:54,120 --> 01:16:56,700 Triple é a variable local, así aquí, non hai indicadores aquí. 1628 01:16:56,700 --> 01:16:58,400 Entón, é só usar a notación de punto. 1629 01:16:58,400 --> 01:17:00,480 Isto vai me dar o nivel de vermello. 1630 01:17:00,480 --> 01:17:06,180 Se quero cambiar isto, eu só definir que equivalen a algo diferente. 1631 01:17:06,180 --> 01:17:13,190 Entón, de novo, esta liña de código accede esta variable dentro desa estrutura, e 1632 01:17:13,190 --> 01:17:15,070 podemos definilo como algo novo. 1633 01:17:15,070 --> 01:17:20,040 >> Así, para whodunit, de novo, iso é, en esencia, o que necesitamos facer. 1634 01:17:20,040 --> 01:17:21,170 Moi sinxelo. 1635 01:17:21,170 --> 01:17:25,020 Só ten que cambiar algúns niveis relativos, e este é o lugar onde este código vai. 1636 01:17:25,020 --> 01:17:27,720 Cambiar o tamaño, por outra banda, é un pouco máis complicado. 1637 01:17:27,720 --> 01:17:30,900 En realidade, é probablemente o redimensionamento máis complicada parte deste conxunto de problemas. 1638 01:17:30,900 --> 01:17:32,720 Temos tres minutos para pasar por iso. 1639 01:17:32,720 --> 01:17:34,910 >> Pero, de novo, xa escribimos a maior parte deste código, de xeito que 1640 01:17:34,910 --> 01:17:36,500 debe ser moi familiar. 1641 01:17:36,500 --> 01:17:40,750 Cales son algunhas das cousas que queremos facer en cambiar o tamaño, se xa leu sobre o 1642 01:17:40,750 --> 01:17:43,470 conxunto de problemas? 1643 01:17:43,470 --> 01:17:45,290 Se lles dá a min, nós Pode falar sobre elas. 1644 01:17:45,290 --> 01:17:47,340 Cales son algunhas das cousas que queremos facer? 1645 01:17:47,340 --> 01:17:47,970 >> ALUMNO 80: vertical - 1646 01:17:47,970 --> 01:17:52,360 así que ten que horizontal redimensiona-la, pero vertical redimensiona-la tamén? 1647 01:17:52,360 --> 01:17:58,475 >> Jason Hirschhorn: Entón, se nós estamos dando un pixel, e queremos redimensiona-la por un 1648 01:17:58,475 --> 01:18:03,460 factor de dous, agora hai que redimensionadas horizontal e redimensionadas 1649 01:18:03,460 --> 01:18:05,220 vertical. 1650 01:18:05,220 --> 01:18:06,640 Será que isto ten sentido? 1651 01:18:06,640 --> 01:18:07,060 É. 1652 01:18:07,060 --> 01:18:09,300 Entón, esta é probablemente a maior desafío. 1653 01:18:09,300 --> 01:18:10,430 E imos falar sobre iso nun segundo. 1654 01:18:10,430 --> 01:18:11,065 É. 1655 01:18:11,065 --> 01:18:15,270 >> ALUMNO 81: O xeito que eu penso niso foille necesario imprimir lo - 1656 01:18:15,270 --> 01:18:15,490 >> Jason Hirschhorn: Agarde. 1657 01:18:15,490 --> 01:18:17,580 Non diga-nos o que fixo. 1658 01:18:17,580 --> 01:18:20,620 Imos falar de lóxica. 1659 01:18:20,620 --> 01:18:21,870 >> ALUMNO 81: Aceptar. 1660 01:18:21,870 --> 01:18:25,090 1661 01:18:25,090 --> 01:18:27,410 Cal foi a pregunta? 1662 01:18:27,410 --> 01:18:28,892 >> Jason Hirschhorn: Só levantou a súa man. 1663 01:18:28,892 --> 01:18:31,600 Non había dúbida. 1664 01:18:31,600 --> 01:18:32,520 Deixe-me presenta-lo. 1665 01:18:32,520 --> 01:18:34,560 Déixeme discutir iso brevemente. 1666 01:18:34,560 --> 01:18:38,400 Polo tanto, temos un pixel, queremos Replica-lo, tanto en horizontal como 1667 01:18:38,400 --> 01:18:39,360 vertical. 1668 01:18:39,360 --> 01:18:48,920 Así, idealmente o que facemos aquí é que nós ler na nosa píxeles, escribimos 1669 01:18:48,920 --> 01:18:51,690 porén moitos dos tempos. 1670 01:18:51,690 --> 01:18:54,720 >> Pero, entón, temos o noso truco aquí, porque entón queremos ir ao 1671 01:18:54,720 --> 01:18:57,660 seguinte liña e gravala-lo no ao comezo da seguinte liña. 1672 01:18:57,660 --> 01:19:02,960 Polo tanto, se queremos replicar tanto horizontal e vertical, o que é 1673 01:19:02,960 --> 01:19:05,050 unha boa forma de facelo - 1674 01:19:05,050 --> 01:19:06,780 un bo aínda que a facelo? 1675 01:19:06,780 --> 01:19:11,950 Entón, nós non precisamos buscar constantemente en torno ao noso arquivo para poñer as cousas. 1676 01:19:11,950 --> 01:19:14,360 >> Esa pregunta non pode ter tiña sentido, pero eu creo que un 1677 01:19:14,360 --> 01:19:15,800 responder a el vai axudar. 1678 01:19:15,800 --> 01:19:17,210 >> ALUMNO 82: Crear unha matriz? 1679 01:19:17,210 --> 01:19:20,090 >> Jason Hirschhorn: Entón, imos pensar de cada ficheiro como unha liña. 1680 01:19:20,090 --> 01:19:22,550 Imos pensar en termos de liñas. 1681 01:19:22,550 --> 01:19:26,670 Se temos a nosa primeira liña de noso pequeno imaxe, podemos facer esa liña 1682 01:19:26,670 --> 01:19:30,640 nunha gran liña dunha imaxe grande, e logo, replicar esa liña con todo 1683 01:19:30,640 --> 01:19:34,250 moitas veces ten que ser replicado, en vez de ir pixel por pixel, 1684 01:19:34,250 --> 01:19:37,260 que queda confuso cando xestionar ficheiros. 1685 01:19:37,260 --> 01:19:38,730 >> Porque se tivemos - 1686 01:19:38,730 --> 01:19:41,260 Eu estou quedando sen espazo. 1687 01:19:41,260 --> 01:19:46,490 Se este é o noso arquivo, e temos que un pixel alí, e queremos poñelo 1688 01:19:46,490 --> 01:19:49,840 alí, aínda temos algunhas cousas que necesidade de ir alí cando estamos 1689 01:19:49,840 --> 01:19:51,450 escribir e crear o noso novo arquivo - 1690 01:19:51,450 --> 01:19:53,250 o noso arquivo que é dúas veces maior. 1691 01:19:53,250 --> 01:19:56,820 >> Pero é realmente difícil, con funcións de arquivo para ir en torno de novas liñas 1692 01:19:56,820 --> 01:20:00,260 así, e despois volver aquí e poñer as cousas alí dentro. 1693 01:20:00,260 --> 01:20:04,500 É case imposible facer algo así, se iso ten sentido. 1694 01:20:04,500 --> 01:20:10,180 Entón, se pensamos en termos de liñas, podemos levar a nosa liña e, a continuación, colocar-lo - 1695 01:20:10,180 --> 01:20:11,720 replicar liñas vertical. 1696 01:20:11,720 --> 01:20:15,860 >> E é así que lidamos co redimensionamento vertical no canto de horizontal. 1697 01:20:15,860 --> 01:20:18,810 Isto era unha especie de rápido, e un pouco confuso. 1698 01:20:18,810 --> 01:20:22,375 Desafortunadamente o noso tempo rematou. 1699 01:20:22,375 --> 01:20:27,340 Vou ir de fóra para aqueles de vostedes aquí quen ten dúbidas sobre o 1700 01:20:27,340 --> 01:20:30,500 conxunto de problemas, incluíndo a recuperar. 1701 01:20:30,500 --> 01:20:32,320 >> Entón, imos adiar por agora. 1702 01:20:32,320 --> 01:20:34,480 E, de novo, se ten algunha preguntas, podemos falar por aí. 1703 01:20:34,480 --> 01:20:38,294