1 00:00:00,000 --> 00:00:07,810 2 00:00:07,810 --> 00:00:09,840 >> JASON Hirschhorn: Velkommen, alle, til uke seks. 3 00:00:09,840 --> 00:00:14,790 Jeg er glad for å se dere alle lever i beste velgående etter Quiz 0, fordi jeg vet at 4 00:00:14,790 --> 00:00:15,810 var litt ujevn. 5 00:00:15,810 --> 00:00:18,370 Men heldigvis, dere alle gjorde utrolig godt. 6 00:00:18,370 --> 00:00:21,680 Og så det er fantastisk. 7 00:00:21,680 --> 00:00:25,840 Hvis du er i min del, har jeg gitt mest av dere støtt dine quizer allerede. 8 00:00:25,840 --> 00:00:28,050 >> Et par av dere, jeg møte etter klasse. 9 00:00:28,050 --> 00:00:32,360 Og hvis du er en forlengelse student og du ikke har mottatt din quiz tilbake 10 00:00:32,360 --> 00:00:35,490 ennå, er din TF trolig jobber med saken og gradering det, og vil få den tilbake 11 00:00:35,490 --> 00:00:36,490 til deg snart. 12 00:00:36,490 --> 00:00:39,650 Så min forlengelse studenter som er ser på akkurat nå - forhåpentligvis leve - 13 00:00:39,650 --> 00:00:42,880 Jeg vil få dine quizer kort tid også. 14 00:00:42,880 --> 00:00:45,670 >> Vår agenda for i dag er som følger. 15 00:00:45,670 --> 00:00:50,170 Først skal vi gå over noen ressurser som CS50 gir til deg. 16 00:00:50,170 --> 00:00:54,590 Vi kommer til å gå over Quiz 0 neste, og Jeg skal svare på noen spørsmål noen 17 00:00:54,590 --> 00:00:57,360 har om spesielle problemer. 18 00:00:57,360 --> 00:01:02,050 Og da vil vi gå over fil I / O og oppgavesettet fem. 19 00:01:02,050 --> 00:01:07,360 De to siste emnene vil ta hoveddelen av seksjonen i dag. 20 00:01:07,360 --> 00:01:11,680 >> Jeg satte denne listen opp hver uke som en påminnelse til dere alle, men av kjernen 21 00:01:11,680 --> 00:01:14,650 seksjon, vi har bare 90 minutter - vi er ikke i stand til å dekke alt som jeg 22 00:01:14,650 --> 00:01:16,280 ville elske å dekke for dere. 23 00:01:16,280 --> 00:01:21,170 Men vi har massevis av ressurser for du å trekke på som du blir kjent med 24 00:01:21,170 --> 00:01:24,000 materialet og arbeidet gjennom problemet setter. 25 00:01:24,000 --> 00:01:30,810 >> En påminnelse om at jeg har nettet en tekst boksen, satt opp for deg å fylle ut hvis du 26 00:01:30,810 --> 00:01:33,250 har noen tilbakemeldinger for meg, både positive og 27 00:01:33,250 --> 00:01:35,180 konstruktiv, om seksjonen. 28 00:01:35,180 --> 00:01:38,600 At URL ligger rett ned her. 29 00:01:38,600 --> 00:01:43,250 Så vær så snill, ta et øyeblikk hvis du har noen tilbakemelding, enten under seksjonen, 30 00:01:43,250 --> 00:01:48,030 eller etter, eller etter at du se videoen på nettet, for å gi meg tilbakemelding. 31 00:01:48,030 --> 00:01:52,100 Jeg virkelig setter pris på alle av det. 32 00:01:52,100 --> 00:01:55,730 >> Så jeg har hatt små samtaler med mye av min 33 00:01:55,730 --> 00:01:59,350 studenter i løpet av uken - så jeg hånden tilbake quizer, snakker om 34 00:01:59,350 --> 00:02:01,480 Selvfølgelig, å se hvordan du gjør. 35 00:02:01,480 --> 00:02:05,120 Og ett tema har kommet opp igjen og enn i å snakke om - i 36 00:02:05,120 --> 00:02:05,660 spesielt - 37 00:02:05,660 --> 00:02:07,710 oppgavesett. 38 00:02:07,710 --> 00:02:13,090 Og jeg har innkapslet som tema på bordet akkurat nå. 39 00:02:13,090 --> 00:02:16,630 >> I hovedsak er det en forskjell mellom å slå på noe som er 40 00:02:16,630 --> 00:02:19,590 gjort riktig og noe som er gjort godt. 41 00:02:19,590 --> 00:02:22,920 De fleste mennesker har gjort fantastisk i form av nøyaktighet - 42 00:02:22,920 --> 00:02:25,460 5-er eller 4 er på alle psets. 43 00:02:25,460 --> 00:02:27,930 De fleste får de hele tiden. 44 00:02:27,930 --> 00:02:31,150 >> Men bare fordi du har gjort noe riktig betyr ikke at du har 45 00:02:31,150 --> 00:02:34,450 gjort noe så elegant, eller effektivt, eller så rent som du 46 00:02:34,450 --> 00:02:35,270 kunne ha gjort det. 47 00:02:35,270 --> 00:02:36,790 Og det er hva design - 48 00:02:36,790 --> 00:02:39,230 og i mindre grad, stil - 49 00:02:39,230 --> 00:02:40,450 aksene er for. 50 00:02:40,450 --> 00:02:45,130 Så jeg skyve dere alle, og andre TFs presser dere, å ikke bare turn 51 00:02:45,130 --> 00:02:48,320 i ting som er riktig, men slår i de tingene som er kodet godt. 52 00:02:48,320 --> 00:02:53,060 >> Ikke gjør unødvendig FOR sløyfer, ikke rekalkulerer variabler hvis 53 00:02:53,060 --> 00:02:53,800 du trenger ikke å. 54 00:02:53,800 --> 00:02:58,520 For eksempel, ser tilbake til oppgavesettet 4, når du plasserer klossene på 55 00:02:58,520 --> 00:03:03,070 skjermen, hver rad - hver murstein i en gitt rad har samme y-koordinaten - 56 00:03:03,070 --> 00:03:04,390 samme høyde koordinat. 57 00:03:04,390 --> 00:03:07,930 >> Slik at y-koordinat ikke trenger å beregnes på innsiden av indre 58 00:03:07,930 --> 00:03:11,070 nestet FOR løkke som du sannsynligvis brukt å sette disse murstein på skjermen. 59 00:03:11,070 --> 00:03:14,030 Den trenger bare skal beregnes hver gangen du slo på rad, eller 60 00:03:14,030 --> 00:03:15,200 beveget seg nedover en rad. 61 00:03:15,200 --> 00:03:19,760 Så si hvis det er 10 klosser i en rad, kan hver murstein har samme 62 00:03:19,760 --> 00:03:22,260 y-koordinat, og at y-koordinaten kan bare beregnes 63 00:03:22,260 --> 00:03:23,550 en gang for alle disse. 64 00:03:23,550 --> 00:03:27,810 >> Det trenger ikke å bli beregnet 10 tiden, og heller ikke at beregnings behov 65 00:03:27,810 --> 00:03:30,220 skje i selve funksjon samtale - 66 00:03:30,220 --> 00:03:33,020 den nye gracked funksjon samtale. 67 00:03:33,020 --> 00:03:37,820 Så hvis det var litt forvirrende for du, mer generelt, ting som 68 00:03:37,820 --> 00:03:40,730 trenger ikke å skje hver eneste gang du går gjennom en FOR løkke bør ikke være 69 00:03:40,730 --> 00:03:42,900 satt inne i for-løkken, og bør ikke skje hver gang du går 70 00:03:42,900 --> 00:03:44,080 gjennom FOR løkke. 71 00:03:44,080 --> 00:03:49,270 >> En annen god design eksempel vi så i uke 3 for 15, kunne du holde 72 00:03:49,270 --> 00:03:50,500 spor på null. 73 00:03:50,500 --> 00:03:53,600 Så når du initial brettet, du spare - i en global variabel, kanskje - 74 00:03:53,600 --> 00:03:56,140 x-og y-koordinaten null. 75 00:03:56,140 --> 00:03:57,520 Og så når du - 76 00:03:57,520 --> 00:04:00,310 i ditt trekk funksjon, når du gjør et vellykket trekk, oppdaterer du den 77 00:04:00,310 --> 00:04:02,040 Plasseringen av null. 78 00:04:02,040 --> 00:04:06,240 >> Det vil spare deg fra å måtte gjøre nestet FOR sløyfer å se gjennom 79 00:04:06,240 --> 00:04:10,700 borde hver gang i ditt trekk funksjon og finne null, eller finne flisen, 80 00:04:10,700 --> 00:04:12,460 og sjekk deretter hva som er ved siden av den. 81 00:04:12,460 --> 00:04:16,329 I stedet må du plasseringen av null, kan du bare se over, under, 82 00:04:16,329 --> 00:04:21,160 og til venstre og høyre for det, for å finne flisen du var ute etter. 83 00:04:21,160 --> 00:04:24,970 >> Så i forhold til programmene vi er skriving, de er aldri stor nok 84 00:04:24,970 --> 00:04:28,580 at noen av disse designbeslutninger er virkelig kommer til å hemme din 85 00:04:28,580 --> 00:04:31,670 program, eller at det går saktere, eller kanskje til og med gå tom for minne. 86 00:04:31,670 --> 00:04:35,030 Men vi er fortsatt presser dere å skrive så elegant og 87 00:04:35,030 --> 00:04:36,450 effektiv kode som mulig. 88 00:04:36,450 --> 00:04:39,910 >> Så hvis du ender opp med å skrive ting som har en betydelig større 89 00:04:39,910 --> 00:04:44,660 omfang, vil de være skrevet med god utforme i tillegg til å være korrekte. 90 00:04:44,660 --> 00:04:46,300 Så mange av dere har brakte det ut. 91 00:04:46,300 --> 00:04:48,560 Det er noe vi leter etter - noe vi kommer til å fortsette å 92 00:04:48,560 --> 00:04:49,840 presse deg gutta på. 93 00:04:49,840 --> 00:04:52,460 >> Hvis du har spørsmål om utformingen av programmet, gjerne 94 00:04:52,460 --> 00:04:56,870 å nå ut til meg, og jeg er glad for å gå gjennom programmet med deg, 95 00:04:56,870 --> 00:05:01,320 og peke ut noen av design beslutningene du har gjort, og gi deg noen 96 00:05:01,320 --> 00:05:06,240 forslag til hvordan å gjøre selv bedre design beslutninger. 97 00:05:06,240 --> 00:05:08,870 >> Så vi kommer til å gå videre å snakke om Quiz 0. 98 00:05:08,870 --> 00:05:11,300 Før vi gjør det, gjør noen har noen spørsmål om hva 99 00:05:11,300 --> 00:05:14,252 Jeg har dekket så langt? 100 00:05:14,252 --> 00:05:21,500 >> [Raslende STØY] 101 00:05:21,500 --> 00:05:22,750 >> JASON Hirschhorn: Syv sekunder. 102 00:05:22,750 --> 00:05:23,250 OK. 103 00:05:23,250 --> 00:05:24,970 La oss snakke om Quiz 0 for en bit. 104 00:05:24,970 --> 00:05:26,700 De fleste av dere har din Quiz 0 rygg. 105 00:05:26,700 --> 00:05:29,820 Hvis du ikke gjør det, forhåpentligvis Husker du den litt. 106 00:05:29,820 --> 00:05:34,770 Men hvis du har tatt Quiz 0, så du har også tilgang til PDF på nettet i 107 00:05:34,770 --> 00:05:35,890 eksempel løsninger. 108 00:05:35,890 --> 00:05:39,480 >> Er det noen som har noen spørsmål før vi hopper inn i ukens materiale om 109 00:05:39,480 --> 00:05:41,520 et spesielt problem på Quiz 0 - 110 00:05:41,520 --> 00:05:44,630 hvorfor svaret er hva det er? 111 00:05:44,630 --> 00:05:47,255 Er det noen forvirret om noe? 112 00:05:47,255 --> 00:05:50,230 Selv om du fikk problemet rett, men bare vil at jeg skal forklare det litt 113 00:05:50,230 --> 00:05:52,640 mer, er jeg glad for å gjøre det nå. 114 00:05:52,640 --> 00:05:57,800 >> Så jeg har bedt dere til kommer forberedt med noen 115 00:05:57,800 --> 00:05:59,440 tanker om Quiz 0. 116 00:05:59,440 --> 00:06:02,660 Så hvem ønsker å få oss startet med et spørsmål eller 117 00:06:02,660 --> 00:06:04,655 kommentere om Quiz 0? 118 00:06:04,655 --> 00:06:07,435 119 00:06:07,435 --> 00:06:10,410 >> [PAPIR rasling] 120 00:06:10,410 --> 00:06:11,470 >> JASON Hirschhorn: Ikke alle gjorde perfekt. 121 00:06:11,470 --> 00:06:12,720 Så jeg vet [ler] 122 00:06:12,720 --> 00:06:15,950 det må være noen spørsmål om Quiz 0. 123 00:06:15,950 --> 00:06:27,940 124 00:06:27,940 --> 00:06:28,590 OK. 125 00:06:28,590 --> 00:06:29,210 Ja. 126 00:06:29,210 --> 00:06:29,600 Ompica. 127 00:06:29,600 --> 00:06:30,520 >> OMPICA: Number 10. 128 00:06:30,520 --> 00:06:33,560 >> JASON Hirschhorn: Number 10. 129 00:06:33,560 --> 00:06:35,400 Hvilken var nummer 10? 130 00:06:35,400 --> 00:06:35,840 >> OMPICA: The - 131 00:06:35,840 --> 00:06:36,420 >> JASON Hirschhorn: jeg ikke har det - 132 00:06:36,420 --> 00:06:37,670 >> OMPICA: Den omfatter - 133 00:06:37,670 --> 00:06:40,060 134 00:06:40,060 --> 00:06:42,180 >> JASON Hirschhorn: Nummer 10 var åtte til i - å skrive åtte til jeg? 135 00:06:42,180 --> 00:06:42,980 >> OMPICA: Yeah. 136 00:06:42,980 --> 00:06:43,630 >> JASON Hirschhorn: OK. 137 00:06:43,630 --> 00:06:47,390 Så et annet spørsmål du kan ha spurte var jeg forutseende? 138 00:06:47,390 --> 00:06:48,630 Svaret er ja. 139 00:06:48,630 --> 00:06:52,060 I avsnittet før quizen, spurte jeg dere å kode både Sterling og 140 00:06:52,060 --> 00:06:52,980 åtte til jeg. 141 00:06:52,980 --> 00:06:54,770 Begge skjedde med vises på quiz. 142 00:06:54,770 --> 00:06:57,510 Så forhåpentligvis, du har betalt oppmerksomhet til det. 143 00:06:57,510 --> 00:07:02,520 >> Og hvis du hadde, så ville du ha sannsynligvis gjort det bra på de to. 144 00:07:02,520 --> 00:07:06,030 Men åtte til jeg, gjorde vi ikke egentlig kode den i klassen, men det var igjen, 145 00:07:06,030 --> 00:07:07,500 spurte på quiz. 146 00:07:07,500 --> 00:07:13,270 Så et par ting å ta oppmerksom når koding åtte til jeg. 147 00:07:13,270 --> 00:07:17,320 Det første, per spørsmålet, var at du trengte å sjekke om strengen 148 00:07:17,320 --> 00:07:20,300 var lik null. 149 00:07:20,300 --> 00:07:28,060 >> Et par folk prøvde å sjekke senere i programmet hvis s brakett jeg var - 150 00:07:28,060 --> 00:07:30,940 slik at en bestemt karakter i den string - var lik null. 151 00:07:30,940 --> 00:07:35,600 Men husk, at null er egentlig - det er godt å tenke på 152 00:07:35,600 --> 00:07:39,100 null etter en null spisser - en peker til null - 153 00:07:39,100 --> 00:07:40,920 et sted i minnet hvor du kan aldri få tilgang. 154 00:07:40,920 --> 00:07:44,730 >> Så hvis noe er lik null, du vet at det ikke er blitt initialisert, 155 00:07:44,730 --> 00:07:46,430 eller det er ingenting der. 156 00:07:46,430 --> 00:07:50,950 Så s er en røye stjerne, s brakett jeg er en røye. 157 00:07:50,950 --> 00:07:57,410 Derfor er det fornuftig å sammenligne s til null, men ikke s brakett jeg til null. 158 00:07:57,410 --> 00:07:59,390 Men igjen - så det var det første at du skulle gjøre - 159 00:07:59,390 --> 00:08:03,510 sjekk for å forsikre deg om at du faktisk fikk en skikkelig streng. 160 00:08:03,510 --> 00:08:08,020 >> Deretter ønsket du å gå gjennom hvert tegn i strengen. 161 00:08:08,020 --> 00:08:12,500 Og så det ville være som en s brakett Jeg, for eksempel, hvis jeg er din iterator. 162 00:08:12,500 --> 00:08:17,250 Og ta det tegnet, og få sin faktiske verdien. 163 00:08:17,250 --> 00:08:21,800 Du har det lagret som en røye, men ASCII-verdien for null - 164 00:08:21,800 --> 00:08:23,010 null som et tegn - 165 00:08:23,010 --> 00:08:25,450 er faktisk ikke heltall null. 166 00:08:25,450 --> 00:08:28,700 Det er noen andre nummer som du kan slå opp i ASCII-tabellen. 167 00:08:28,700 --> 00:08:30,790 >> Så en måte å korrigere for det - sannsynligvis den beste måten for å korrigere for 168 00:08:30,790 --> 00:08:33,760 det - er trekke fra det tegnet verdi - 169 00:08:33,760 --> 00:08:35,140 null som et tegn. 170 00:08:35,140 --> 00:08:38,490 Så minus enkelt sitat, null, en annen enkel apostrof. 171 00:08:38,490 --> 00:08:44,620 Det vil ta det nummeret du har som en røye, og få det lik 172 00:08:44,620 --> 00:08:46,720 antall som en faktisk heltall. 173 00:08:46,720 --> 00:08:50,300 >> Og det er svært lik den tilnærmingen mange mennesker tok i 174 00:08:50,300 --> 00:08:52,800 Problemet satt to, med Caesar og Viginere - 175 00:08:52,800 --> 00:08:55,160 disse koder, når du ble rotere dem. 176 00:08:55,160 --> 00:08:59,210 Så etter at du har det som et nummer fra null til ni, da - avhengig av 177 00:08:59,210 --> 00:09:02,750 hvor det går i den ultimate nummer - du trenger å multiplisere det 178 00:09:02,750 --> 00:09:04,120 av en strøm av 10 år. 179 00:09:04,120 --> 00:09:07,340 >> Noen mennesker flyttet fra baksiden til front, og multiplisert den enkelte 180 00:09:07,340 --> 00:09:08,940 tallet med en effekt på 10. 181 00:09:08,940 --> 00:09:11,160 Noen mennesker flyttet fra den foran til bak - 182 00:09:11,160 --> 00:09:14,430 og så tok den høyeste bestille tall først - 183 00:09:14,430 --> 00:09:18,190 og vil lagre dem i en global tellervariabelen. 184 00:09:18,190 --> 00:09:20,880 Og så hver gang gjennom FOR loop, multipliserer det gigantiske globale 185 00:09:20,880 --> 00:09:25,640 motvirke variabel ved 10, for å gjøre plass for neste røye. 186 00:09:25,640 --> 00:09:28,750 >> Så det var litt forvirrende uten meg å skrive det på tavlen. 187 00:09:28,750 --> 00:09:31,550 Men prøveløsningen er tilgjengelig for deg. 188 00:09:31,550 --> 00:09:32,870 Men det var de store tingene vi var ute etter. 189 00:09:32,870 --> 00:09:36,400 Også en sjekk for å være sikker på at hver individuell karakter var faktisk en 190 00:09:36,400 --> 00:09:39,780 karakter mellom null og ni, og ikke en annen karakter, som en A, 191 00:09:39,780 --> 00:09:41,160 for eksempel. 192 00:09:41,160 --> 00:09:43,150 >> Det var de tingene vi var ute for i det spørsmålet. 193 00:09:43,150 --> 00:09:46,510 194 00:09:46,510 --> 00:09:47,980 Besvarer det spørsmålet ditt? 195 00:09:47,980 --> 00:09:49,320 >> OMPICA: Yeah. 196 00:09:49,320 --> 00:09:50,240 >> JASON Hirschhorn: OK. 197 00:09:50,240 --> 00:09:53,940 Er det noen andre spørsmål om Quiz 0? 198 00:09:53,940 --> 00:09:55,440 Hva om kompilering? 199 00:09:55,440 --> 00:09:56,740 Everybody kompilering rett? 200 00:09:56,740 --> 00:09:58,370 Nei. 201 00:09:58,370 --> 00:09:58,840 Det var en - 202 00:09:58,840 --> 00:10:01,010 [Ler] 203 00:10:01,010 --> 00:10:03,265 Eventuelle spørsmål om kompilering prosessen? 204 00:10:03,265 --> 00:10:06,050 205 00:10:06,050 --> 00:10:06,966 Wow. 206 00:10:06,966 --> 00:10:11,090 >> [PAPIR rasling] 207 00:10:11,090 --> 00:10:11,520 >> JASON Hirschhorn: Ja. 208 00:10:11,520 --> 00:10:11,700 Michael. 209 00:10:11,700 --> 00:10:14,140 >> MICHAEL: Er nummer syv - tilfeldig? 210 00:10:14,140 --> 00:10:16,500 >> JASON Hirschhorn: Nummer syv. 211 00:10:16,500 --> 00:10:20,670 Nummer 7 var få et tilfeldig heltall. 212 00:10:20,670 --> 00:10:21,110 Utmerket. 213 00:10:21,110 --> 00:10:25,630 Så du får et heltall a og en heltall b, og du vil ha en tilfeldig 214 00:10:25,630 --> 00:10:28,710 heltall mellom a og b. 215 00:10:28,710 --> 00:10:31,740 Vi kan faktisk skrive denne på styret, fordi dette 216 00:10:31,740 --> 00:10:33,320 var en kodelinje - 217 00:10:33,320 --> 00:10:34,390 én måte å gjøre det. 218 00:10:34,390 --> 00:10:37,810 >> Så vi får drand som en funksjon vi kunne bruke. 219 00:10:37,810 --> 00:10:38,820 Og hva betyr drand - 220 00:10:38,820 --> 00:10:40,290 forutsatt at det er blitt sådd - 221 00:10:40,290 --> 00:10:42,316 hva betyr drand tilbake? 222 00:10:42,316 --> 00:10:44,840 >> MICHAEL: En flottør mellom 0,0 og 1,0. 223 00:10:44,840 --> 00:10:45,530 >> JASON Hirschhorn: En rekke - ja. 224 00:10:45,530 --> 00:10:47,910 Et tall mellom 0 og 1.. 225 00:10:47,910 --> 00:10:51,760 Og så har vi b og en. 226 00:10:51,760 --> 00:10:55,480 Og så har vi vår tilfeldige tall mellom 0 og 1 gitt oss av drand. 227 00:10:55,480 --> 00:11:01,480 228 00:11:01,480 --> 00:11:06,630 Noen prøvde å sette b, eller b minus en, eller noe inni dem 229 00:11:06,630 --> 00:11:07,960 parenteser. 230 00:11:07,960 --> 00:11:11,210 Det ville bety at de er argumenter til denne funksjonen. 231 00:11:11,210 --> 00:11:13,450 >> drand ikke tar noen argumenter - som getString gjør 232 00:11:13,450 --> 00:11:14,330 ikke ta noen argumenter. 233 00:11:14,330 --> 00:11:16,600 Så det er bare åpne paren, nær paren - og det er i seg selv 234 00:11:16,600 --> 00:11:17,330 funksjonskallet. 235 00:11:17,330 --> 00:11:19,770 Og det gir deg et nummer mellom 0 og 1. 236 00:11:19,770 --> 00:11:22,820 Selvfølgelig har vi en hel rekke at tallene kan være i. 237 00:11:22,820 --> 00:11:28,470 >> Si, hvis b er 10 og en er fem, vi egentlig ønsker et tall med et utvalg av fem. 238 00:11:28,470 --> 00:11:36,940 Så neste ting vi trenger å gjøre er multiplisere dette med utvalget b minus en. 239 00:11:36,940 --> 00:11:40,380 Så antar det er multiplisert. 240 00:11:40,380 --> 00:11:42,590 Og det vil gi oss et tall innenfor et gitt område. 241 00:11:42,590 --> 00:11:46,610 Og det bestemt utvalg blir Forskjellen mellom b minus en. 242 00:11:46,610 --> 00:11:50,030 >> Og til slutt, det vil bare gi den fra - si området mellom b minus 243 00:11:50,030 --> 00:11:52,520 er 5, som vil gi oss en nummer fra 0 til 5.. 244 00:11:52,520 --> 00:11:56,000 Men hvis en er faktisk fem, trenger vi å øke denne serien opp til der det er 245 00:11:56,000 --> 00:12:01,380 faktisk er ment å være, ved tilsetning av en. 246 00:12:01,380 --> 00:12:02,580 Så det blir logikken høyre. 247 00:12:02,580 --> 00:12:03,745 Og så, ville du ha et annet spørsmål? 248 00:12:03,745 --> 00:12:04,547 >> MICHAEL: Nei. 249 00:12:04,547 --> 00:12:06,010 Jeg bare føler meg veldig dum akkurat nå. 250 00:12:06,010 --> 00:12:06,405 [Ler] 251 00:12:06,405 --> 00:12:06,730 >> JASON Hirschhorn: Nei. 252 00:12:06,730 --> 00:12:08,640 Ikke føler virkelig dum. 253 00:12:08,640 --> 00:12:10,560 En rekke mennesker kjempet med dette spørsmålet. 254 00:12:10,560 --> 00:12:13,920 Og så er det andre spørsmålet, drand, du sa, gir deg en dupp - 255 00:12:13,920 --> 00:12:14,940 returnerer en float. 256 00:12:14,940 --> 00:12:18,020 Men denne funksjonen faktisk spurt for et helt tall som skal returneres. 257 00:12:18,020 --> 00:12:23,700 >> Du trenger ikke å kaste dette eksplisitt til et heltall, fordi disse 258 00:12:23,700 --> 00:12:29,090 operasjoner vil behandle det som alt en flyte - som et flyttall. 259 00:12:29,090 --> 00:12:31,570 Liker du dette vilje - selv om dette er et helt tall, vil dette 260 00:12:31,570 --> 00:12:32,890 multipliseres riktig. 261 00:12:32,890 --> 00:12:34,000 All multiplikasjon vil fungere. 262 00:12:34,000 --> 00:12:35,060 Du trenger ikke å kaste den her. 263 00:12:35,060 --> 00:12:36,480 Faktisk bør du ikke kaste det. 264 00:12:36,480 --> 00:12:37,310 >> Det ville - 265 00:12:37,310 --> 00:12:40,750 hvis du vil kaste en rekke det er mellom 0 og 1 - 266 00:12:40,750 --> 00:12:42,680 et tilfeldig tall, et flyttall - 267 00:12:42,680 --> 00:12:47,850 så vil det enten bare være 0 eller 1, slik at vil du miste alt dette presisjon. 268 00:12:47,850 --> 00:12:50,120 Men på slutten, når du kommer tilbake, det blir automatisk 269 00:12:50,120 --> 00:12:51,620 sendes tilbake som et heltall. 270 00:12:51,620 --> 00:12:56,870 Så du trenger ikke å gjøre at avstøpning selv. 271 00:12:56,870 --> 00:13:00,810 >> Så dette var svaret på det spørsmålet, nummer syv. 272 00:13:00,810 --> 00:13:02,190 Eventuelle andre spørsmål om Quiz 0? 273 00:13:02,190 --> 00:13:03,300 Ja, Annie. 274 00:13:03,300 --> 00:13:05,050 >> ANNIE: Når bruker vi rekursiv - 275 00:13:05,050 --> 00:13:07,850 da bruker vi iterative sløyfer? 276 00:13:07,850 --> 00:13:10,210 >> JASON Hirschhorn: Når du bruker rekursiv - så mer generelt, 277 00:13:10,210 --> 00:13:14,110 fordeler og ulemper med rekursjon versus en iterativ tilnærming. 278 00:13:14,110 --> 00:13:17,110 Kan noen gi en pro eller en con? 279 00:13:17,110 --> 00:13:19,460 Vennligst? 280 00:13:19,460 --> 00:13:20,140 Ikke kan noen. 281 00:13:20,140 --> 00:13:22,526 Hvem kan tilby en pro eller en con? 282 00:13:22,526 --> 00:13:26,963 >> [PAPIR rasling] 283 00:13:26,963 --> 00:13:29,730 >> STUDENT 1: Rekursiv er mindre koding - mindre å skrive? 284 00:13:29,730 --> 00:13:33,170 >> JASON Hirschhorn: Så generelt, rekursjon spesielt, en funksjon - 285 00:13:33,170 --> 00:13:35,750 eller en algoritme som fusjonerer sort - som gir seg 286 00:13:35,750 --> 00:13:37,300 til en rekursiv tilnærming - 287 00:13:37,300 --> 00:13:40,710 kan være mer oversiktlig å kode rekursivt. 288 00:13:40,710 --> 00:13:43,940 Og bare være mer fornuftig å gjøre det rekursivt. 289 00:13:43,940 --> 00:13:46,230 Så det ville være en proff til å rekursjon. 290 00:13:46,230 --> 00:13:46,610 Andre? 291 00:13:46,610 --> 00:13:47,467 Yeah? 292 00:13:47,467 --> 00:13:49,240 >> STUDENT 2: Con til rekursjon - 293 00:13:49,240 --> 00:13:50,940 Den bruker mer minne. 294 00:13:50,940 --> 00:13:52,200 >> JASON Hirschhorn: Så helt riktig. 295 00:13:52,200 --> 00:13:55,720 En rekursiv funksjon vil fortsette å legge stabelen rammer til bunken. 296 00:13:55,720 --> 00:13:59,690 Så hvis du opererer på en rekke tall, og må ringe dette 297 00:13:59,690 --> 00:14:02,560 fungere mye, da vil du sikkert ta opp mer minne, mens 298 00:14:02,560 --> 00:14:05,810 en iterativ tilnærming vil bare sette ett stable rammen på stabelen, fordi 299 00:14:05,810 --> 00:14:08,420 alt skjer innen én funksjon. 300 00:14:08,420 --> 00:14:11,010 >> Eventuelle andre fordeler og ulemper? 301 00:14:11,010 --> 00:14:11,500 Yeah. 302 00:14:11,500 --> 00:14:12,550 >> STUDENT 3: Argumenter for rekursjon. 303 00:14:12,550 --> 00:14:15,950 Du trenger ikke å avgjøre i forhånd hvor mange ganger 304 00:14:15,950 --> 00:14:17,660 kode måtte gjentas. 305 00:14:17,660 --> 00:14:22,810 Du kan ha et forhåndsbestemt antall ganger som du må reagere, deretter 306 00:14:22,810 --> 00:14:26,420 rekursjon er bedre, fordi det tar det resultatet. 307 00:14:26,420 --> 00:14:27,780 >> JASON Hirschhorn: Jeg tror det er sant. 308 00:14:27,780 --> 00:14:30,770 Men jeg tror i begge tilfeller du ville aldri - 309 00:14:30,770 --> 00:14:33,290 du vil sannsynligvis få litt input fra brukeren. 310 00:14:33,290 --> 00:14:35,990 Eller denne funksjonen ville ha noen innspill som ville finne ut hvor mange ganger det 311 00:14:35,990 --> 00:14:36,730 bør kjøre. 312 00:14:36,730 --> 00:14:39,520 Så generelt, du ville ikke vanskelig kode - selv i en iterativ tilnærming - hvordan 313 00:14:39,520 --> 00:14:40,940 mange ganger at loopen skal kjøres. 314 00:14:40,940 --> 00:14:46,100 315 00:14:46,100 --> 00:14:48,670 >> Hadde du en annen du var tenker, Annie? 316 00:14:48,670 --> 00:14:49,330 OK. 317 00:14:49,330 --> 00:14:51,650 Så de er sannsynligvis de to - 318 00:14:51,650 --> 00:14:54,370 den største pro og den største con til en rekursiv versus 319 00:14:54,370 --> 00:14:57,080 en iterativ tilnærming. 320 00:14:57,080 --> 00:14:57,690 OK. 321 00:14:57,690 --> 00:14:59,465 Noe annet på Quiz 0? 322 00:14:59,465 --> 00:15:08,940 323 00:15:08,940 --> 00:15:09,920 >> La oss gå videre. 324 00:15:09,920 --> 00:15:15,260 Fil I / O. Det er en fantastisk kort denne uken på fil I / O som forhåpentligvis 325 00:15:15,260 --> 00:15:19,270 du har sett flere ganger, og beundret. 326 00:15:19,270 --> 00:15:22,910 Mye av arbeidet gikk inn i det, og jeg har hørt det er sinnsykt nyttig. 327 00:15:22,910 --> 00:15:25,740 Jeg har også tatt med linken på dette lysbildet, i tilfelle du ikke har hatt en 328 00:15:25,740 --> 00:15:29,160 sjanse til å se den 10 ganger. 329 00:15:29,160 --> 00:15:35,280 >> Så, skal vi gå kort over store skritt til å åpne og arbeide 330 00:15:35,280 --> 00:15:38,400 med filer, og deretter skal vi dykke inn i en koding problem før 331 00:15:38,400 --> 00:15:40,400 undersøke problemet sett. 332 00:15:40,400 --> 00:15:44,330 Så igjen, jeg kommer til å sette dette opp på skjermen, men jeg kommer til å snakke for 333 00:15:44,330 --> 00:15:47,630 bare et øyeblikk om hva vi er gjør her med fil I/O-- 334 00:15:47,630 --> 00:15:49,090 hva betyr det? 335 00:15:49,090 --> 00:15:55,280 >> Det betyr at vi kan lage vår programmer, og da har våre programmer 336 00:15:55,280 --> 00:16:00,370 exit, og ikke har gjort noen innvirkning på verden utenfor vårt program. 337 00:16:00,370 --> 00:16:04,630 Men når vi begynner å arbeide med filer - både å lese dem inn og skape 338 00:16:04,630 --> 00:16:10,460 dem - kan ha en viss effekt på verden utenfor vårt program. 339 00:16:10,460 --> 00:16:15,440 >> Akkurat som om Microsoft Word var ikke i stand å gjøre noen Word-dokumenter, og deretter 340 00:16:15,440 --> 00:16:18,710 når Microsoft Word slutte, all din Arbeidet vil bli borte, og det ville 341 00:16:18,710 --> 00:16:19,740 virkelig være ubrukelig. 342 00:16:19,740 --> 00:16:23,620 Vi vil til syvende og sist vil kunne skrive programmer som kan påvirke 343 00:16:23,620 --> 00:16:31,350 verden rundt dem, både ved å ta i komplekse innganger - i form av filer og 344 00:16:31,350 --> 00:16:37,080 via filer, og også skape interessant og overbevisende utganger - 345 00:16:37,080 --> 00:16:39,520 i form av forskjellige typer filer. 346 00:16:39,520 --> 00:16:43,730 >> Så det er grunnen til at vi begynner å lære å arbeide med filer. 347 00:16:43,730 --> 00:16:47,080 Mer spesielt hva vi gjør er som følger. 348 00:16:47,080 --> 00:16:47,680 Det er veldig enkelt. 349 00:16:47,680 --> 00:16:51,530 Det er bare et par skritt, og de er oppført her på denne koden. 350 00:16:51,530 --> 00:16:55,130 Så vi kommer til å gå gjennom denne koden linje for linje. 351 00:16:55,130 --> 00:16:57,630 >> Først ser du uthevet - 352 00:16:57,630 --> 00:17:01,330 når du arbeider med en fil, uavhengig av hvilken type fil det er, 353 00:17:01,330 --> 00:17:02,670 du trenger for å åpne den. 354 00:17:02,670 --> 00:17:05,130 Og det er med en oppfordring til fopen - 355 00:17:05,130 --> 00:17:05,950 akkurat her. 356 00:17:05,950 --> 00:17:07,980 Du inkludere navnet på filen. 357 00:17:07,980 --> 00:17:11,930 Hvis filen ikke er i telefonboken, eller mappen hvor dette programmet 358 00:17:11,930 --> 00:17:15,910 liv, så må du også inkludere en bane til hvor filen er. 359 00:17:15,910 --> 00:17:19,099 >> Vi kommer til å anta at dette fil som heter "text.txt" - 360 00:17:19,099 --> 00:17:24,220 en enkelt tekstdokument - er i samme mappe som dette programmet er. 361 00:17:24,220 --> 00:17:26,859 Så det er en annen ting å huske på tankene - at hvis du ønsker å åpne en fil 362 00:17:26,859 --> 00:17:30,050 et annet sted, du faktisk trenger å omfatte plasseringen. 363 00:17:30,050 --> 00:17:33,520 >> For det andre, kan du passere et argument for å fopen, og det er det du ønsker å gjøre 364 00:17:33,520 --> 00:17:34,620 med filen. 365 00:17:34,620 --> 00:17:38,450 Det er tre hovedargumenter at du kommer til å passere til fopen. 366 00:17:38,450 --> 00:17:40,060 Hvem kan gi meg de tre? 367 00:17:40,060 --> 00:17:44,960 368 00:17:44,960 --> 00:17:47,130 Hvem kan gi meg en av dem? 369 00:17:47,130 --> 00:17:48,130 Ja. 370 00:17:48,130 --> 00:17:50,010 >> STUDENT 4: Filnavnet? 371 00:17:50,010 --> 00:17:50,440 >> JASON Hirschhorn: Beklager. 372 00:17:50,440 --> 00:17:55,490 Tre hovedargumenter du kan passere som det andre argumentet til fopen. 373 00:17:55,490 --> 00:17:57,060 Du har rett - filnavnet er det første argumentet. 374 00:17:57,060 --> 00:18:01,620 Men det andre argumentet til fopen er vanligvis tre strenger, og - ja. 375 00:18:01,620 --> 00:18:02,210 Aleja. 376 00:18:02,210 --> 00:18:03,490 >> Aleja: A for append. 377 00:18:03,490 --> 00:18:06,840 >> JASON Hirschhorn: A, hvis du ønsker å føye til en fil som allerede eksisterer. 378 00:18:06,840 --> 00:18:07,810 >> STUDENT 5: R for lese. 379 00:18:07,810 --> 00:18:09,930 >> JASON Hirschhorn: R, hvis du ønsker å lese fra en fil. 380 00:18:09,930 --> 00:18:10,670 >> STUDENT 6: W for skriving. 381 00:18:10,670 --> 00:18:12,840 >> JASON Hirschhorn: Og w, hvis du ønsker å skrive til en fil. 382 00:18:12,840 --> 00:18:17,570 Så i dette tilfellet, vi skriver til filen, slik at vi har w. 383 00:18:17,570 --> 00:18:22,360 Du åpner den, må du også lagre fil et sted, og det er med 384 00:18:22,360 --> 00:18:26,000 koden til venstre side av oppdraget operatør - 385 00:18:26,000 --> 00:18:31,220 Jeg oppretter en peker til en fil heter, i dette tilfellet, fil. 386 00:18:31,220 --> 00:18:36,070 >> Vi kommer ikke til å bekymre hva dette alle caps FIL ting er. 387 00:18:36,070 --> 00:18:40,600 Det er nok å si, er det en lang strøm av nuller og enere. 388 00:18:40,600 --> 00:18:44,970 Og det er hvordan vi skal betjene det og forstår det. 389 00:18:44,970 --> 00:18:47,300 >> Det neste vi må gjøre - og Dette er utrolig viktig - 390 00:18:47,300 --> 00:18:49,070 når du åpner en fil - 391 00:18:49,070 --> 00:18:54,250 faktisk, når du kaller malloc, for eksempel, og få litt minne og prøv 392 00:18:54,250 --> 00:18:57,980 og lagre den i en peker, du alltid ønsker å sjekke for å være sikker på at det 393 00:18:57,980 --> 00:19:00,230 funksjon returnerte ikke null. 394 00:19:00,230 --> 00:19:05,230 >> Så i dette tilfellet, vi kontrollerer sikker på at vi faktisk åpnet 395 00:19:05,230 --> 00:19:10,230 filen på riktig måte, og det var ingen feil i programmet vårt. 396 00:19:10,230 --> 00:19:15,160 Neste, når vi har sjekket for å være sikker at vi har en fungerende fil, kan vi 397 00:19:15,160 --> 00:19:18,520 skrive til eller lese fra, eller føye til filen. 398 00:19:18,520 --> 00:19:24,270 I dette tilfellet, er jeg rett og slett å skrive ut én linje til denne filen. 399 00:19:24,270 --> 00:19:25,450 >> Hvordan vet jeg det? 400 00:19:25,450 --> 00:19:27,990 Vel, jeg bruker denne funksjonen kalt fprintf. 401 00:19:27,990 --> 00:19:30,970 Alle funksjonene du skal bruke når du skriver til eller leser fra, eller 402 00:19:30,970 --> 00:19:34,950 manipulere filer vil være lik funksjonene du har sett før, men 403 00:19:34,950 --> 00:19:38,420 starter med bokstaven F, står for filen. 404 00:19:38,420 --> 00:19:43,440 Og fprintf, i motsetning til våre vanlige print app, tar ett ekstra argument, 405 00:19:43,440 --> 00:19:47,800 og det er den filen der du ønsker å skrive ut denne linjen til. 406 00:19:47,800 --> 00:19:50,640 >> Jeg har ikke noe å rett ohai. 407 00:19:50,640 --> 00:19:52,860 Jeg har ikke den tredje argument for å printf - 408 00:19:52,860 --> 00:19:57,030 eller det andre argumentet til printf, den tredje argument til fprintf, fordi jeg 409 00:19:57,030 --> 00:19:59,480 har ikke noen plassholdere her. 410 00:19:59,480 --> 00:20:01,070 Jeg er ikke inkludert noen variabler. 411 00:20:01,070 --> 00:20:06,070 Men igjen, fprintf og alle disse fil funksjoner som opererer med filer 412 00:20:06,070 --> 00:20:09,820 er generelt kommer til å trenge filen der de opererer. 413 00:20:09,820 --> 00:20:15,960 >> Til slutt, den siste viktig ting til gjøre er å lukke filen, akkurat som 414 00:20:15,960 --> 00:20:19,530 med - når vi malloc noe, vi ønsker å frigjøre noe, så vi 415 00:20:19,530 --> 00:20:22,730 har en minnelekkasje - vi ønsker å lukke filen vår. 416 00:20:22,730 --> 00:20:28,180 Hvis dette programmet gått ut uten å lukke filen, oddsen er ingenting ville gå 417 00:20:28,180 --> 00:20:30,050 galt, spesielt hvis det ble en liten fil. 418 00:20:30,050 --> 00:20:35,020 >> Men det er absolutt god koding stil og praksis for å alltid lukke filen 419 00:20:35,020 --> 00:20:38,050 når du er ferdig med å bruke det. 420 00:20:38,050 --> 00:20:43,630 Så det er det grunnleggende fil I / O. Du har sikkert sett det før, eller 421 00:20:43,630 --> 00:20:45,710 så det i den fantastiske kort. 422 00:20:45,710 --> 00:20:48,410 Er det noen som har noen spørsmål, før vi går inn i noen praksis koding 423 00:20:48,410 --> 00:20:51,800 problemer, om fil I / O-eller fremgangsmåten jeg bare gikk over? 424 00:20:51,800 --> 00:21:00,198 425 00:21:00,198 --> 00:21:03,162 >> [TYPING LYDER] 426 00:21:03,162 --> 00:21:04,150 >> JASON Hirschhorn: Har du har et spørsmål, Avi? 427 00:21:04,150 --> 00:21:04,660 >> AVI: Nei. 428 00:21:04,660 --> 00:21:04,740 >> JASON Hirschhorn: OK. 429 00:21:04,740 --> 00:21:06,746 Jeg kommer til å vente en annen sju sekunder. 430 00:21:06,746 --> 00:21:07,590 [Ler] 431 00:21:07,590 --> 00:21:08,620 Det er et veldig godt tips. 432 00:21:08,620 --> 00:21:10,750 Dere har bare ikke liker stille spørsmål. 433 00:21:10,750 --> 00:21:11,660 Det er fint. 434 00:21:11,660 --> 00:21:12,330 OK. 435 00:21:12,330 --> 00:21:17,620 Så vår første praksis problemet er, vi er kommer til å kopiere funksjonen 436 00:21:17,620 --> 00:21:22,330 et kommandolinje verktøy som du sannsynligvis brukt før - kopi - 437 00:21:22,330 --> 00:21:23,500 kopien verktøyet. 438 00:21:23,500 --> 00:21:28,050 Hvis du skriver cp og deretter gi det to argumenter i terminalen, kan du 439 00:21:28,050 --> 00:21:28,980 kopiere en fil. 440 00:21:28,980 --> 00:21:31,220 Og det er det vi skal å skrive akkurat nå. 441 00:21:31,220 --> 00:21:35,830 >> Så igjen, leser ut av dette lysbildet, hadde jeg du å skrive et program som tar 442 00:21:35,830 --> 00:21:38,130 to og bare to kommandolinje argumenter - 443 00:21:38,130 --> 00:21:40,750 en kildefil og målfil - 444 00:21:40,750 --> 00:21:44,590 og kopierer innholdet i kilden filen til målfilen 445 00:21:44,590 --> 00:21:46,960 en byte om gangen. 446 00:21:46,960 --> 00:21:48,510 Så det er mye å be om. 447 00:21:48,510 --> 00:21:52,200 >> Igjen, en god tilnærming til dette er å ikke gå rett til C-kode, men 448 00:21:52,200 --> 00:21:54,280 bryte det ned i et par trinn. 449 00:21:54,280 --> 00:21:58,400 Tenk først om logikken - nøyaktig det jeg spør deg om å gjøre - 450 00:21:58,400 --> 00:22:00,620 og forstå alle de trinn til dette problemet. 451 00:22:00,620 --> 00:22:04,410 Ikke i C, bare i noen pseudo, eller til en modell av mental 452 00:22:04,410 --> 00:22:06,030 hva som skjer. 453 00:22:06,030 --> 00:22:10,050 >> Neste, når du har den pseudo ned, finne ut hvordan pseudo 454 00:22:10,050 --> 00:22:14,600 kart på verktøy og tingene vi har lært å bruke i C. 455 00:22:14,600 --> 00:22:19,070 >> Og til slutt, når du har alt som sammen, kan du kode problemet. 456 00:22:19,070 --> 00:22:23,370 Ta 5 til 10 minutter til jobbe med dette problemet. 457 00:22:23,370 --> 00:22:25,800 Jeg skal sette instruksjonene opp igjen i et sekund. 458 00:22:25,800 --> 00:22:27,990 Og så kommer vi til å gå over den pseudo, og kode 459 00:22:27,990 --> 00:22:29,230 det leve som en gruppe. 460 00:22:29,230 --> 00:22:31,640 >> Hvis du har noen spørsmål mens du er jobber med dette, gjerne heve 461 00:22:31,640 --> 00:22:34,260 din hånd, og jeg vil komme rundt og svare på dem. 462 00:22:34,260 --> 00:22:37,020 463 00:22:37,020 --> 00:22:39,330 >> STUDENT 7: Kan jeg sveiper et stykke papir? 464 00:22:39,330 --> 00:22:41,537 >> JASON Hirschhorn: Hva skjer? 465 00:22:41,537 --> 00:26:46,047 466 00:26:46,047 --> 00:26:48,043 >> [TYPING LYDER] 467 00:26:48,043 --> 00:26:48,730 >> JASON Hirschhorn: OK. 468 00:26:48,730 --> 00:26:51,710 La oss gå over pseudo først, og så skal jeg gi deg et par mer 469 00:26:51,710 --> 00:26:52,960 minutter å fullføre koding. 470 00:26:52,960 --> 00:26:55,540 471 00:26:55,540 --> 00:26:58,650 >> Hvem ønsker å starte meg av med den første linjen i 472 00:26:58,650 --> 00:27:00,030 pseudo for denne funksjonen? 473 00:27:00,030 --> 00:27:03,330 474 00:27:03,330 --> 00:27:05,740 >> STUDENT 8: Kontroller at du fikk to filer. 475 00:27:05,740 --> 00:27:06,990 >> JASON Hirschhorn: OK. 476 00:27:06,990 --> 00:27:21,270 477 00:27:21,270 --> 00:27:22,990 Og hvis vi ikke? 478 00:27:22,990 --> 00:27:25,974 >> STUDENT 8: Jeg vil returnere 0. 479 00:27:25,974 --> 00:27:27,872 >> JASON Hirschhorn: Bør vi tilbake 0? 480 00:27:27,872 --> 00:27:30,182 >> STUDENT 8: Gå tilbake en - 481 00:27:30,182 --> 00:27:30,650 blanking. 482 00:27:30,650 --> 00:27:30,850 Unnskyld. 483 00:27:30,850 --> 00:27:31,210 >> JASON Hirschhorn: Yeah. 484 00:27:31,210 --> 00:27:32,710 Sannsynligvis ikke 0. 485 00:27:32,710 --> 00:27:34,680 Fordi 0 betyr alt var bra. 486 00:27:34,680 --> 00:27:35,030 OK. 487 00:27:35,030 --> 00:27:36,730 Så det er den første linjen av pseudo. 488 00:27:36,730 --> 00:27:38,715 Hvem har den andre linjen av pseudo? 489 00:27:38,715 --> 00:27:40,630 >> STUDENT 9: Åpne begge filene? 490 00:27:40,630 --> 00:27:41,880 >> JASON Hirschhorn: Åpne begge filer. 491 00:27:41,880 --> 00:27:49,970 492 00:27:49,970 --> 00:27:50,920 OK? 493 00:27:50,920 --> 00:27:52,850 >> STUDENT 10: Kontroller hvis filen er NULL? 494 00:27:52,850 --> 00:28:10,906 495 00:28:10,906 --> 00:28:12,580 >> JASON Hirschhorn: Kontroller at verken er NULL. 496 00:28:12,580 --> 00:28:15,800 Som en digresjon - 497 00:28:15,800 --> 00:28:17,540 slash 0 - 498 00:28:17,540 --> 00:28:18,887 er at NULL? 499 00:28:18,887 --> 00:28:20,080 >> STUDENT 11: Nei. 500 00:28:20,080 --> 00:28:21,190 >> JASON Hirschhorn: Det er ikke NULL. 501 00:28:21,190 --> 00:28:23,400 Det kalles NULL terminator. 502 00:28:23,400 --> 00:28:25,580 Det er faktisk spelt med bare én liter. 503 00:28:25,580 --> 00:28:28,580 Så sjekker noe imot det - det er faktisk et tegn - 504 00:28:28,580 --> 00:28:31,710 så sjekker noe imot det er ikke det samme som å sjekke for å se om det 505 00:28:31,710 --> 00:28:32,690 lik NULL. 506 00:28:32,690 --> 00:28:34,100 >> Og noen mennesker - 507 00:28:34,100 --> 00:28:36,040 på sine quizer og deres problem sett - har fått 508 00:28:36,040 --> 00:28:36,890 to av dem forvirret. 509 00:28:36,890 --> 00:28:38,830 Men to av dem er faktisk forskjellige. 510 00:28:38,830 --> 00:28:40,220 Man ender en streng - 511 00:28:40,220 --> 00:28:43,210 en er en peker til 0. 512 00:28:43,210 --> 00:28:46,490 >> STUDENT 12: Hvorfor vil ikke du sjekke for å sørge for at filene ikke er NULL 513 00:28:46,490 --> 00:28:48,670 før du åpner dem? 514 00:28:48,670 --> 00:28:54,772 >> JASON Hirschhorn: Så åpen sparer noe i denne filen. 515 00:28:54,772 --> 00:28:57,780 Og hvis du går tilbake hit - 516 00:28:57,780 --> 00:28:59,520 så denne linjen - fopen - 517 00:28:59,520 --> 00:29:05,300 vil gi deg en adresse og butikk som adresse i filen hvis det fungerer. 518 00:29:05,300 --> 00:29:07,650 Hvis det ikke fungerer, det vil lagre NULL - 519 00:29:07,650 --> 00:29:08,020 >> STUDENT 12: Oh. 520 00:29:08,020 --> 00:29:08,180 OK. 521 00:29:08,180 --> 00:29:08,500 Fikk du. 522 00:29:08,500 --> 00:29:09,050 >> JASON Hirschhorn: I fil. 523 00:29:09,050 --> 00:29:11,990 Så du kan ikke sjekke for NULL før du har åpnet dem. 524 00:29:11,990 --> 00:29:13,520 NULL betyr noe ikke fungere korrekt. 525 00:29:13,520 --> 00:29:18,030 526 00:29:18,030 --> 00:29:18,740 OK. 527 00:29:18,740 --> 00:29:22,590 Så sjekk for å kontrollere at verken si? 528 00:29:22,590 --> 00:29:23,200 Eller er? 529 00:29:23,200 --> 00:29:23,770 Hva tror vi? 530 00:29:23,770 --> 00:29:24,310 Vi vil gå med det. 531 00:29:24,310 --> 00:29:24,520 >> STUDENT 13: Is. 532 00:29:24,520 --> 00:29:25,020 >> JASON Hirschhorn: Er? 533 00:29:25,020 --> 00:29:25,930 Det er heller ikke? 534 00:29:25,930 --> 00:29:26,350 >> STUDENT 13: Is. 535 00:29:26,350 --> 00:29:26,390 >> JASON Hirschhorn: OK. 536 00:29:26,390 --> 00:29:28,510 Vi synes å ha noen enighet om det. 537 00:29:28,510 --> 00:29:30,520 Verken er NULL. 538 00:29:30,520 --> 00:29:32,250 OK, neste linje av pseudo. 539 00:29:32,250 --> 00:29:33,600 Hvem har ikke gitt meg en linje ennå? 540 00:29:33,600 --> 00:29:37,350 541 00:29:37,350 --> 00:29:38,295 Vi vil vente på deg. 542 00:29:38,295 --> 00:29:39,020 Yeah. 543 00:29:39,020 --> 00:29:40,895 >> STUDENT 14: Du må lese fra den første filen? 544 00:29:40,895 --> 00:29:42,290 >> JASON Hirschhorn: OK. 545 00:29:42,290 --> 00:29:46,240 >> STUDENT 14: Eller vi bruker fscanf eller noe sånt som at den første filen? 546 00:29:46,240 --> 00:29:50,650 >> JASON Hirschhorn: Så vi ønsker å lese fra den første filen og - 547 00:29:50,650 --> 00:29:51,900 la oss sette det riktig her. 548 00:29:51,900 --> 00:30:00,600 549 00:30:00,600 --> 00:30:01,880 Lese fra kildefilen. 550 00:30:01,880 --> 00:30:05,370 Og så, hva skal vi gjøre etter at vi lese fra kildefilen? 551 00:30:05,370 --> 00:30:06,620 Noen andre? 552 00:30:06,620 --> 00:30:09,150 553 00:30:09,150 --> 00:30:12,190 >> STUDENT 15: Skriv inn målfilen? 554 00:30:12,190 --> 00:30:22,080 555 00:30:22,080 --> 00:30:25,620 >> JASON Hirschhorn: Vi skriver til målfilen, og - 556 00:30:25,620 --> 00:30:26,210 OK. 557 00:30:26,210 --> 00:30:30,030 Hva annet skal vi mangler? 558 00:30:30,030 --> 00:30:32,460 Noen andre som ikke har gitt meg en linje med kode ennå - av pseudo. 559 00:30:32,460 --> 00:30:33,510 Yeah. 560 00:30:33,510 --> 00:30:36,540 >> STUDENT 16: Kanskje kan du alltid sjekke om det er noe å lese for, 561 00:30:36,540 --> 00:30:37,970 som neste linje? 562 00:30:37,970 --> 00:30:39,550 Det er som den neste linje, se om den finnes. 563 00:30:39,550 --> 00:30:40,660 >> [ELEKTRONISK BEEP] 564 00:30:40,660 --> 00:30:41,095 >> JASON Hirschhorn: Oops. 565 00:30:41,095 --> 00:30:43,120 Det er min journalføring programvare. 566 00:30:43,120 --> 00:30:43,580 Yeah? 567 00:30:43,580 --> 00:30:44,960 >> STUDENT 16: Yeah. 568 00:30:44,960 --> 00:30:48,940 >> JASON Hirschhorn: Så gi det til meg en gang til. 569 00:30:48,940 --> 00:30:51,640 >> STUDENT 16: Sjekk om det er fremdeles en neste linje fra 570 00:30:51,640 --> 00:30:52,920 kildefilen å lese. 571 00:30:52,920 --> 00:30:53,500 >> JASON Hirschhorn: OK. 572 00:30:53,500 --> 00:30:56,060 Så vi ikke leser linjer - leste bytes her - 573 00:30:56,060 --> 00:30:57,590 men du er korrekt. 574 00:30:57,590 --> 00:31:00,040 Vi ønsker å lese og skrive til er det ingen flere byte. 575 00:31:00,040 --> 00:31:11,430 576 00:31:11,430 --> 00:31:11,735 OK. 577 00:31:11,735 --> 00:31:16,940 Og så disse bør virkelig være innrykket litt, fordi de er under der. 578 00:31:16,940 --> 00:31:17,470 Høyre? 579 00:31:17,470 --> 00:31:20,620 Inntil vi er ute av bytes, skal vi lese fra kildefilen og skrive 580 00:31:20,620 --> 00:31:22,160 til mål-fil. 581 00:31:22,160 --> 00:31:24,510 >> Og så, hva er den siste linje av pseudo? 582 00:31:24,510 --> 00:31:26,380 Noen som ikke er gitt meg noe ennå. 583 00:31:26,380 --> 00:31:29,270 584 00:31:29,270 --> 00:31:30,260 >> STUDENT 17: Lukk filene? 585 00:31:30,260 --> 00:31:31,510 >> JASON Hirschhorn: Nettopp. 586 00:31:31,510 --> 00:31:36,370 587 00:31:36,370 --> 00:31:37,450 Lukk filene. 588 00:31:37,450 --> 00:31:38,400 Så det er vår pseudo. 589 00:31:38,400 --> 00:31:41,870 Jeg kommer til å sette pseudo inn gedit, og i et par minutter vi 590 00:31:41,870 --> 00:31:44,626 vil kode dette sammen. 591 00:31:44,626 --> 00:33:55,280 592 00:33:55,280 --> 00:33:56,000 >> OK. 593 00:33:56,000 --> 00:33:58,290 La oss komme i gang som en gruppe. 594 00:33:58,290 --> 00:33:59,940 Nishant, har jeg min nye filen. 595 00:33:59,940 --> 00:34:01,130 Jeg har nettopp åpnet dette opp. 596 00:34:01,130 --> 00:34:01,880 Untitled Document en. 597 00:34:01,880 --> 00:34:05,490 Hva er det første jeg bør gjøre? 598 00:34:05,490 --> 00:34:07,040 >> Nishant: Inkluder bibliotekene? 599 00:34:07,040 --> 00:34:08,219 >> JASON Hirschhorn: OK. 600 00:34:08,219 --> 00:34:11,070 Hva bibliotekene? 601 00:34:11,070 --> 00:34:17,570 >> Nishant: stdio.h, stdlib.h, tror jeg? 602 00:34:17,570 --> 00:34:18,000 >> JASON Hirschhorn: OK. 603 00:34:18,000 --> 00:34:21,592 Hva er stdlib for? 604 00:34:21,592 --> 00:34:23,010 >> Nishant: Jeg glemte. 605 00:34:23,010 --> 00:34:23,219 >> JASON Hirschhorn: OK. 606 00:34:23,219 --> 00:34:24,179 Så inkluderer stdio. 607 00:34:24,179 --> 00:34:28,630 Hva bør jeg gjøre selv før Jeg starte koding? 608 00:34:28,630 --> 00:34:29,710 >> Nishant: Skriv en header? 609 00:34:29,710 --> 00:34:31,830 >> JASON Hirschhorn: Hvordan kan jeg få det farget? 610 00:34:31,830 --> 00:34:34,060 >> [interposing VOICES] 611 00:34:34,060 --> 00:34:35,040 >> Nishant: Hvordan får du det farget? 612 00:34:35,040 --> 00:34:38,060 >> JASON Hirschhorn: Hvordan kan jeg farge koding? 613 00:34:38,060 --> 00:34:38,570 >> Nishant: Jeg vet ikke. 614 00:34:38,570 --> 00:34:38,830 Oh. 615 00:34:38,830 --> 00:34:39,389 Lagre. 616 00:34:39,389 --> 00:34:39,929 >> JASON Hirschhorn: Save. 617 00:34:39,929 --> 00:34:40,270 Ja. 618 00:34:40,270 --> 00:34:41,760 Jeg skulle lagre det som en. C.. 619 00:34:41,760 --> 00:34:46,239 Så lagre den på skrivebordet som cp.c. 620 00:34:46,239 --> 00:34:47,280 Søt. 621 00:34:47,280 --> 00:34:51,199 Og hvis jeg ønsker å få full stil poeng, hva skal jeg 622 00:34:51,199 --> 00:34:53,085 omfatter på toppen? 623 00:34:53,085 --> 00:34:58,390 >> Nishant: Du kan skrive navnet ditt, navnet av programmet, og formålet 624 00:34:58,390 --> 00:34:59,640 av programmet også? 625 00:34:59,640 --> 00:35:08,400 626 00:35:08,400 --> 00:35:10,040 >> JASON Hirschhorn: Ser bra ut. 627 00:35:10,040 --> 00:35:10,470 Utmerket. 628 00:35:10,470 --> 00:35:12,940 Så du har startet oss perfekt. 629 00:35:12,940 --> 00:35:13,720 # Include - 630 00:35:13,720 --> 00:35:15,365 Vi vil også skrive - 631 00:35:15,365 --> 00:35:30,050 632 00:35:30,050 --> 00:35:30,870 OK. 633 00:35:30,870 --> 00:35:33,520 Så jeg tror jeg er klar til start. 634 00:35:33,520 --> 00:35:38,003 Hvem har den første linje med kode for meg - eller de første linjer med kode som 635 00:35:38,003 --> 00:35:41,280 det vil ta å tilfredsstille vår første kommentere i pseudokode? 636 00:35:41,280 --> 00:35:41,985 Du. 637 00:35:41,985 --> 00:35:48,780 >> STUDENT 18: Burde ikke det være int argc, og deretter char * argv? 638 00:35:48,780 --> 00:35:49,490 >> JASON Hirschhorn: Jeg tror du har rett. 639 00:35:49,490 --> 00:35:56,270 La oss endre det til int viktigste, åpne paren, int argc, komma, char * argv? 640 00:35:56,270 --> 00:35:57,150 Sånn? 641 00:35:57,150 --> 00:35:57,410 >> STUDENT 18: Brak. 642 00:35:57,410 --> 00:35:58,260 >> JASON Hirschhorn: Brak. 643 00:35:58,260 --> 00:35:59,860 Åpen brakett, nær brakett, nær forelder. 644 00:35:59,860 --> 00:36:00,240 Perfekt. 645 00:36:00,240 --> 00:36:02,160 Nå kan jeg ta kommandolinjeargumenter. 646 00:36:02,160 --> 00:36:02,430 OK. 647 00:36:02,430 --> 00:36:04,250 Sikre at vi får to filer. 648 00:36:04,250 --> 00:36:07,905 Du kan gi meg det også. 649 00:36:07,905 --> 00:36:09,180 >> STUDENT 18: Hvis argc - 650 00:36:09,180 --> 00:36:11,060 dette ikke lik tre. 651 00:36:11,060 --> 00:36:14,360 >> JASON Hirschhorn: Hvis åpne paren argc ikke lik 3? 652 00:36:14,360 --> 00:36:16,970 >> STUDENT 18: Ja, kommer du tilbake 1 eller noe. 653 00:36:16,970 --> 00:36:17,460 >> JASON Hirschhorn: Beklager. 654 00:36:17,460 --> 00:36:19,120 >> STUDENT 18: Return 1 eller noe. 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 Flott. 658 00:36:22,970 --> 00:36:24,290 Åpne begge filene. 659 00:36:24,290 --> 00:36:26,160 Hvem kan hjelpe meg å åpne begge filene? 660 00:36:26,160 --> 00:36:28,125 Hvem har ikke gitt meg koden ennå? 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: Så alle caps F-I-L-E Star kilde. 664 00:36:36,145 --> 00:36:39,390 665 00:36:39,390 --> 00:36:40,920 >> JASON Hirschhorn: Jeg kommer å ta ut vokalene. 666 00:36:40,920 --> 00:36:41,570 De er kule. 667 00:36:41,570 --> 00:36:42,716 Det er som Tumblr. 668 00:36:42,716 --> 00:36:44,610 >> STUDENT 18: Er lik fopen - 669 00:36:44,610 --> 00:36:46,612 >> JASON Hirschhorn: Er lik fopen? 670 00:36:46,612 --> 00:36:49,870 >> STUDENT 18: Åpne paren, argv, åpen brakett. 671 00:36:49,870 --> 00:36:50,055 >> JASON Hirschhorn: Vent. 672 00:36:50,055 --> 00:36:50,240 Unnskyld. 673 00:36:50,240 --> 00:36:51,050 Åpen paren. 674 00:36:51,050 --> 00:36:51,456 OK. 675 00:36:51,456 --> 00:36:53,080 >> STUDENT 18: Yeah. 676 00:36:53,080 --> 00:36:55,110 Argv sub en. 677 00:36:55,110 --> 00:36:55,860 >> JASON Hirschhorn: Sub 1? 678 00:36:55,860 --> 00:36:56,140 >> STUDENT 18: Yeah. 679 00:36:56,140 --> 00:36:58,540 Argv åpen brakett 1 - 680 00:36:58,540 --> 00:36:59,730 Ja. 681 00:36:59,730 --> 00:37:06,470 Og så komma, og deretter åpne dobbel sitat, r, dobbelt anførselstegn, 682 00:37:06,470 --> 00:37:08,250 nære paren, semikolon. 683 00:37:08,250 --> 00:37:09,450 >> JASON Hirschhorn: Søt. 684 00:37:09,450 --> 00:37:10,950 Og hva med den andre? 685 00:37:10,950 --> 00:37:16,030 >> STUDENT 18: Svært lik, men i stedet av S-R-C, vil du kalle det d-S-T. 686 00:37:16,030 --> 00:37:17,060 >> JASON Hirschhorn: Oo! 687 00:37:17,060 --> 00:37:17,772 Jeg liker det. 688 00:37:17,772 --> 00:37:20,010 >> STUDENT 18: Just D-S-T. Yeah. 689 00:37:20,010 --> 00:37:23,057 Og så ARGV, åpen brakett, to. 690 00:37:23,057 --> 00:37:23,200 Yeah. 691 00:37:23,200 --> 00:37:26,720 Og deretter w istedenfor r. 692 00:37:26,720 --> 00:37:27,620 Yeah. 693 00:37:27,620 --> 00:37:29,630 >> JASON Hirschhorn: Great. 694 00:37:29,630 --> 00:37:31,360 Neste par linjer. 695 00:37:31,360 --> 00:37:34,040 Også, hvis noen har ting å legge til linjer som vi har gjort, gjerne 696 00:37:34,040 --> 00:37:35,690 legge dem også. 697 00:37:35,690 --> 00:37:37,520 Kontroller at ingen av dem er NULL. 698 00:37:37,520 --> 00:37:41,450 Hvem kan gi meg koden jeg trenger for å tilfredsstille den linjen av pseudo? 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: Hvis src tilsvarer likemenn NULL eller dst tilsvarer likemenn 702 00:37:58,645 --> 00:38:04,590 NULL, så du kommer tilbake - 703 00:38:04,590 --> 00:38:07,130 704 00:38:07,130 --> 00:38:07,976 >> JASON Hirschhorn: Hva? 705 00:38:07,976 --> 00:38:08,890 >> ARCHER: Return to? 706 00:38:08,890 --> 00:38:09,760 >> JASON Hirschhorn: Return to. 707 00:38:09,760 --> 00:38:14,400 Så hvis åpen paren src lik lik NULL, eller - 708 00:38:14,400 --> 00:38:15,590 hva som thing's - rør? 709 00:38:15,590 --> 00:38:16,346 Pipe? 710 00:38:16,346 --> 00:38:17,140 Vi kaller det røret. 711 00:38:17,140 --> 00:38:22,340 Pipe, pipe, dst tilsvarer likemenn NULL, tilbake to. 712 00:38:22,340 --> 00:38:23,900 OK? 713 00:38:23,900 --> 00:38:26,060 Inntil vi er ute av byte - 714 00:38:26,060 --> 00:38:29,820 vi liksom hoppes over dette trinnet fra den pseudo del å gå på her. 715 00:38:29,820 --> 00:38:31,970 >> Men før vi er ute av byte - hva høres det ut? 716 00:38:31,970 --> 00:38:34,680 Hvilken type C struktur - 717 00:38:34,680 --> 00:38:36,160 men jeg bruker ikke ordet struktur, fordi vi kommer til å begynne å bruke 718 00:38:36,160 --> 00:38:37,350 som i andre tilfeller - 719 00:38:37,350 --> 00:38:39,495 men C verktøyet gjør det høres ut som? 720 00:38:39,495 --> 00:38:39,970 >> STUDENT 19: En løkke. 721 00:38:39,970 --> 00:38:40,980 >> JASON Hirschhorn: En løkke. 722 00:38:40,980 --> 00:38:43,060 Høres ut som en sløyfe. 723 00:38:43,060 --> 00:38:49,670 Så hvem kan gi meg den første linjen av loopen koden rett her? 724 00:38:49,670 --> 00:38:56,320 725 00:38:56,320 --> 00:39:01,980 Du kan også velge hva slags loop du vil, hvis du gir meg 726 00:39:01,980 --> 00:39:03,215 denne linjen med kode. 727 00:39:03,215 --> 00:39:04,150 Det er tre typer. 728 00:39:04,150 --> 00:39:06,530 Du får velge. 729 00:39:06,530 --> 00:39:08,080 Jeg ville foreslå en av dem. 730 00:39:08,080 --> 00:39:08,410 Avi. 731 00:39:08,410 --> 00:39:09,230 Hvilken vil du ha? 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 lik null. 735 00:39:15,180 --> 00:39:17,360 >> JASON Hirschhorn: OK. 736 00:39:17,360 --> 00:39:18,570 >> AVI: Denne delen er jeg ikke sikker på. 737 00:39:18,570 --> 00:39:29,080 Men i er mindre enn størrelsen av stjerne kilde? 738 00:39:29,080 --> 00:39:31,128 Jeg er ikke sikker på det. 739 00:39:31,128 --> 00:39:32,580 >> JASON Hirschhorn: OK. 740 00:39:32,580 --> 00:39:35,870 >> AVI: Fordi du vil at størrelsen på en fil, ikke sant? 741 00:39:35,870 --> 00:39:41,090 >> JASON Hirschhorn: Så dette sannsynligvis ikke vil gi oss størrelsen av selve 742 00:39:41,090 --> 00:39:43,010 fil i byte. 743 00:39:43,010 --> 00:39:47,680 Så hva annet kan vi gjøre? 744 00:39:47,680 --> 00:39:48,810 Hva er en annen type løkke? 745 00:39:48,810 --> 00:39:50,180 Eller skal vi feste med for loop? 746 00:39:50,180 --> 00:39:55,350 747 00:39:55,350 --> 00:39:57,900 >> STUDENT 20: Kan du gjøre en while-loop? 748 00:39:57,900 --> 00:40:01,350 Og så, hva du vil gjøre, er Hvor sterkt - 749 00:40:01,350 --> 00:40:03,930 fordi vi har en char * for filen. 750 00:40:03,930 --> 00:40:07,950 Så hvis vi bare fortsette å øke verdien for at inntil vi ville finne den NULL tegn på 751 00:40:07,950 --> 00:40:08,500 slutten av den? 752 00:40:08,500 --> 00:40:11,130 Eller nei, det er ikke hvordan filene fungerer? 753 00:40:11,130 --> 00:40:14,300 >> JASON Hirschhorn: Så vi kan holde økes røye * 754 00:40:14,300 --> 00:40:16,340 til vi finner NULL - 755 00:40:16,340 --> 00:40:18,580 >> STUDENT 20: I hovedsak holde det gående tegn for tegn til vi treffer 756 00:40:18,580 --> 00:40:21,250 slutten av filen. 757 00:40:21,250 --> 00:40:21,600 >> JASON Hirschhorn: Ja. 758 00:40:21,600 --> 00:40:22,560 Så det er det vi ønsker å gjøre. 759 00:40:22,560 --> 00:40:24,545 Vi ønsker å holde lesing, karakter av karakter, før vi kommer til 760 00:40:24,545 --> 00:40:25,080 slutten av filen. 761 00:40:25,080 --> 00:40:25,375 >> STUDENT 20: Yeah. 762 00:40:25,375 --> 00:40:25,860 Finn - 763 00:40:25,860 --> 00:40:28,540 hva er slutten eller stoppskilt ved enden av en tekstfil. 764 00:40:28,540 --> 00:40:28,620 >> JASON Hirschhorn: OK. 765 00:40:28,620 --> 00:40:30,140 Så når vi kommer til slutten av filen - hvordan vet vi vi har nådd 766 00:40:30,140 --> 00:40:33,200 enden av en fil? 767 00:40:33,200 --> 00:40:34,710 Hvis jeg ringer - 768 00:40:34,710 --> 00:40:35,910 så la oss ta et skritt tilbake. 769 00:40:35,910 --> 00:40:37,550 Hva er en funksjon? 770 00:40:37,550 --> 00:40:39,360 La oss gå til denne linjen her. 771 00:40:39,360 --> 00:40:40,630 Lese fra kildefilen. 772 00:40:40,630 --> 00:40:41,880 Hvem kan gi meg den linjen med kode? 773 00:40:41,880 --> 00:40:45,592 774 00:40:45,592 --> 00:40:47,590 >> STUDENT 21: Fscanf? 775 00:40:47,590 --> 00:40:49,110 >> JASON Hirschhorn: Fscanf. 776 00:40:49,110 --> 00:40:49,510 OK. 777 00:40:49,510 --> 00:40:52,240 Hva om jeg ønsker å lese, veldig spesielt, en byte? 778 00:40:52,240 --> 00:40:55,012 779 00:40:55,012 --> 00:40:56,860 >> STUDENT 21: Jeg vet ikke. 780 00:40:56,860 --> 00:40:57,110 >> JASON Hirschhorn: OK. 781 00:40:57,110 --> 00:40:59,380 Enda enklere enn fscanf - hva er en - 782 00:40:59,380 --> 00:41:01,890 Jeg ønsker å lese fra en kilde fil? 783 00:41:01,890 --> 00:41:03,720 Les fra en kilde fil. 784 00:41:03,720 --> 00:41:04,850 Hva er en funksjon - ja. 785 00:41:04,850 --> 00:41:05,380 >> STUDENT 22: Det er fread? 786 00:41:05,380 --> 00:41:06,070 >> JASON Hirschhorn: fread. 787 00:41:06,070 --> 00:41:07,550 Jeg tror la oss holde fast med at en for nå. 788 00:41:07,550 --> 00:41:10,380 789 00:41:10,380 --> 00:41:13,650 Hva slags argumenter tar fread? 790 00:41:13,650 --> 00:41:17,410 >> STUDENT 22: Trolig filtype, og deretter plassering i fil? 791 00:41:17,410 --> 00:41:19,550 >> JASON Hirschhorn: Hva kan jeg skrive her å finne ut hva slags argumenter 792 00:41:19,550 --> 00:41:20,950 fread tar? 793 00:41:20,950 --> 00:41:23,710 >> FLERE STUDENTER: Man fread. 794 00:41:23,710 --> 00:41:24,740 >> JASON Hirschhorn: Man fread og fwrite. 795 00:41:24,740 --> 00:41:25,980 Ser ut som de henger ut sammen. 796 00:41:25,980 --> 00:41:29,589 Så fread tar hvor mange argumenter? 797 00:41:29,589 --> 00:41:30,920 >> STUDENT 23: Fire. 798 00:41:30,920 --> 00:41:32,690 >> JASON Hirschhorn: Det tar fire argumenter. 799 00:41:32,690 --> 00:41:41,100 Det tar en peker, en størrelse, og at ting, som er rare, og noen fil. 800 00:41:41,100 --> 00:41:42,000 OK? 801 00:41:42,000 --> 00:41:43,990 La oss lese om det her. 802 00:41:43,990 --> 00:41:49,370 "Funksjonen fread leser n medl. elementer av data, hver størrelse bytes 803 00:41:49,370 --> 00:41:53,840 lang, fra bekken påpekt av streame, lagre dem på stedet 804 00:41:53,840 --> 00:41:56,170 gitt av pekeren. " 805 00:41:56,170 --> 00:41:57,960 >> Så fire argumenter. 806 00:41:57,960 --> 00:42:04,510 Hvorfor kan jeg ikke bare kopiere dette, og lim det rett her. 807 00:42:04,510 --> 00:42:10,060 808 00:42:10,060 --> 00:42:10,770 OK. 809 00:42:10,770 --> 00:42:13,673 Så hvem kan begynne å fylle ut disse argumentene for meg? 810 00:42:13,673 --> 00:42:15,840 Avi. 811 00:42:15,840 --> 00:42:17,720 >> AVI: Ta ut tomrommet. 812 00:42:17,720 --> 00:42:20,530 Sett bare src. 813 00:42:20,530 --> 00:42:23,142 Ta ut pekeren og stjernen. 814 00:42:23,142 --> 00:42:26,102 Sett src. 815 00:42:26,102 --> 00:42:27,050 Så - 816 00:42:27,050 --> 00:42:28,500 >> JASON Hirschhorn: Så jeg kommer til å slutte du det, fordi det er feil. 817 00:42:28,500 --> 00:42:32,590 818 00:42:32,590 --> 00:42:34,710 Du har rett med src, men hvor skal src gå? 819 00:42:34,710 --> 00:42:35,960 >> [interposing VOICES] 820 00:42:35,960 --> 00:42:38,976 821 00:42:38,976 --> 00:42:41,610 >> JASON Hirschhorn: Det bør gå over her. 822 00:42:41,610 --> 00:42:43,790 Det er src - vår src er en type. 823 00:42:43,790 --> 00:42:44,610 La oss se her. 824 00:42:44,610 --> 00:42:49,610 Dette er å be om en type fil *, vi faktisk vanligvis ser dem sånn. 825 00:42:49,610 --> 00:42:57,630 Så dette er å be om et argument for skriver FIL * kalles bekk som er src. 826 00:42:57,630 --> 00:42:58,480 OK? 827 00:42:58,480 --> 00:43:00,410 >> Hva størrelsen på ting å gjøre vi ønsker å lese? 828 00:43:00,410 --> 00:43:03,340 Jeg ga deg dette i problembeskrivelse. 829 00:43:03,340 --> 00:43:04,370 >> STUDENT 24: En byte om gangen. 830 00:43:04,370 --> 00:43:05,340 >> JASON Hirschhorn: En byte. 831 00:43:05,340 --> 00:43:08,205 Hvor stor er en byte? 832 00:43:08,205 --> 00:43:11,642 Størrelsen er i bytes, så hva kan jeg sette akkurat der? 833 00:43:11,642 --> 00:43:12,910 >> STUDENT 25: One. 834 00:43:12,910 --> 00:43:14,730 >> JASON Hirschhorn: One. 835 00:43:14,730 --> 00:43:17,020 Høyre. 836 00:43:17,020 --> 00:43:19,940 Størrelsen er i enhet byte, så en er en byte. 837 00:43:19,940 --> 00:43:22,284 Hvor mange ønsker jeg å lese på en gang. 838 00:43:22,284 --> 00:43:23,520 >> STUDENT 26: One? 839 00:43:23,520 --> 00:43:24,270 >> JASON Hirschhorn: En ting. 840 00:43:24,270 --> 00:43:28,540 Jeg ønsker å lese en ting av størrelse 1, en bit av gangen. 841 00:43:28,540 --> 00:43:32,110 Og hvor kan jeg si det, når jeg leste det? 842 00:43:32,110 --> 00:43:35,050 843 00:43:35,050 --> 00:43:36,510 >> STUDENT 27: Destination? 844 00:43:36,510 --> 00:43:39,270 >> JASON Hirschhorn: Så jeg kan ikke sette det rett inn i målet. 845 00:43:39,270 --> 00:43:40,800 >> STUDENT 28: Du skal sette det inn i en tredje peker? 846 00:43:40,800 --> 00:43:41,780 >> STUDENT 27: Til bestemmelsesstedet. 847 00:43:41,780 --> 00:43:42,270 >> JASON Hirschhorn: OK. 848 00:43:42,270 --> 00:43:42,630 Yeah. 849 00:43:42,630 --> 00:43:46,820 >> STUDENT 29: Du kan erklære noe å virke som en midlertidig lagrings tidligere. 850 00:43:46,820 --> 00:43:47,350 >> JASON Hirschhorn: OK. 851 00:43:47,350 --> 00:43:50,080 Gi meg den. 852 00:43:50,080 --> 00:43:53,930 >> STUDENT 29: En annen fil pekeren, kanskje? 853 00:43:53,930 --> 00:43:54,220 >> JASON Hirschhorn: OK. 854 00:43:54,220 --> 00:43:55,585 Så dette er ugyldig stjerne - 855 00:43:55,585 --> 00:43:57,750 det er en type ugyldig stjerne, så det gjør ikke ikke å være en filpekeren. 856 00:43:57,750 --> 00:44:02,520 Og hvis jeg leser en byte, hvor ville være et godt sted 857 00:44:02,520 --> 00:44:03,850 å lagre en byte? 858 00:44:03,850 --> 00:44:04,660 >> STUDENT 29: En rekke? 859 00:44:04,660 --> 00:44:05,770 >> JASON Hirschhorn: En matrise. 860 00:44:05,770 --> 00:44:07,730 OK. 861 00:44:07,730 --> 00:44:14,040 Og hva annet er noe som er bare størrelse ett byte? 862 00:44:14,040 --> 00:44:16,980 863 00:44:16,980 --> 00:44:18,060 >> STUDENT 30: En char *? 864 00:44:18,060 --> 00:44:18,530 >> STUDENT 29: Yeah. 865 00:44:18,530 --> 00:44:19,880 >> JASON Hirschhorn: En char * er ikke en byte. 866 00:44:19,880 --> 00:44:20,440 >> STUDENT 29: En røye. 867 00:44:20,440 --> 00:44:21,810 >> JASON Hirschhorn: En røye er én byte. 868 00:44:21,810 --> 00:44:22,920 Høyre? 869 00:44:22,920 --> 00:44:26,740 Så la oss kalle denne bufferen er en generisk navnet som brukes for disse tingene til å lagre 870 00:44:26,740 --> 00:44:27,910 noe midlertidig. 871 00:44:27,910 --> 00:44:30,880 Så lager jeg en buffer. 872 00:44:30,880 --> 00:44:31,150 Høyre? 873 00:44:31,150 --> 00:44:32,990 Men det tar et tomrom *. 874 00:44:32,990 --> 00:44:38,660 Så kanskje du har rett, at det bør være en buffer av størrelse 0. 875 00:44:38,660 --> 00:44:41,070 Så den lagrer ett - 876 00:44:41,070 --> 00:44:41,280 høyre. 877 00:44:41,280 --> 00:44:43,560 >> Fordi dette her - røye buffer er en karakter, men 878 00:44:43,560 --> 00:44:45,110 dette tar et tomrom * - 879 00:44:45,110 --> 00:44:45,870 en peker. 880 00:44:45,870 --> 00:44:50,640 Så jeg kunne gjøre dette og nå buffer er en peker. 881 00:44:50,640 --> 00:44:53,214 Hva annet kunne jeg gjøre? 882 00:44:53,214 --> 00:44:55,775 >> STUDENT 31: Sett en stjerne ved siden av røye. 883 00:44:55,775 --> 00:44:58,380 >> JASON Hirschhorn: jeg kunne har skapt det char *. 884 00:44:58,380 --> 00:45:00,216 OK. 885 00:45:00,216 --> 00:45:03,131 Hva er en annen ting jeg kunne gjøre? 886 00:45:03,131 --> 00:45:04,050 Eller la oss gå med denne. 887 00:45:04,050 --> 00:45:05,740 Char * buffer, så hva setter jeg inn her? 888 00:45:05,740 --> 00:45:08,290 889 00:45:08,290 --> 00:45:09,310 >> STUDENT 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 er en peker til en char. 893 00:45:14,500 --> 00:45:19,480 Og med denne plasseringen, vi setter en byte av noe vi har lest. 894 00:45:19,480 --> 00:45:19,980 Yeah. 895 00:45:19,980 --> 00:45:20,700 Avi. 896 00:45:20,700 --> 00:45:21,230 >> AVI: Bare en rask spørsmål. 897 00:45:21,230 --> 00:45:24,440 Ønsker du å malloc buffer? 898 00:45:24,440 --> 00:45:25,930 >> JASON Hirschhorn: Hvem kan svare på det spørsmålet? 899 00:45:25,930 --> 00:45:30,210 >> STUDENT 32: Vel, det gjør egentlig ikke punkt til noe akkurat nå, så - 900 00:45:30,210 --> 00:45:32,610 >> JASON Hirschhorn: Men gjøre vi ønsker å malloc det? 901 00:45:32,610 --> 00:45:35,600 >> STUDENT 32: Hvis du skulle gjøre det som måte, tror jeg, ja, fordi du trenger 902 00:45:35,600 --> 00:45:36,990 et sted for det å peke på. 903 00:45:36,990 --> 00:45:38,350 >> JASON Hirschhorn: Har vi må malloc det? 904 00:45:38,350 --> 00:45:40,580 >> STUDENT 33: Hvis du kommer til å bruke den utenfor løkken. 905 00:45:40,580 --> 00:45:42,524 >> JASON Hirschhorn: Skal vi bruke den utenfor løkken? 906 00:45:42,524 --> 00:45:44,392 >> STUDENT 34: Ja. 907 00:45:44,392 --> 00:45:44,860 >> STUDENT 35: Vent. 908 00:45:44,860 --> 00:45:46,980 Ønsker vi å erklære det i loopen til utover? 909 00:45:46,980 --> 00:45:50,100 >> JASON Hirschhorn: Så jeg tror vi har noen pseudo mens loop her at vi er 910 00:45:50,100 --> 00:45:51,950 prøver å finne ut, at vi har ikke fått til ennå. 911 00:45:51,950 --> 00:45:54,710 912 00:45:54,710 --> 00:45:56,010 Vi trenger ikke å malloc det. 913 00:45:56,010 --> 00:45:59,310 Vi opererer i hovedsak er det bare å gå som skal brukes inne i denne sløyfen. 914 00:45:59,310 --> 00:46:00,540 Det trenger ikke å eksistere på utsiden av denne. 915 00:46:00,540 --> 00:46:02,340 >> Så det kan være en lokal variabel. 916 00:46:02,340 --> 00:46:03,925 Du har en peker til en lokal variabel. 917 00:46:03,925 --> 00:46:07,984 918 00:46:07,984 --> 00:46:09,590 >> STUDENT 36: Men det er ikke peke på noe. 919 00:46:09,590 --> 00:46:11,540 >> JASON Hirschhorn: Nei, det er ikke initialisert til noe. 920 00:46:11,540 --> 00:46:12,790 Men vi kommer ikke til å bruke det også. 921 00:46:12,790 --> 00:46:15,300 Vi kommer til å sette noe i det første gang vi bruker den. 922 00:46:15,300 --> 00:46:16,580 Så det virker OK. 923 00:46:16,580 --> 00:46:17,780 Så vi trenger ikke malloc her. 924 00:46:17,780 --> 00:46:19,360 Og jeg tror det er OK som den er. 925 00:46:19,360 --> 00:46:24,350 926 00:46:24,350 --> 00:46:25,790 OK. 927 00:46:25,790 --> 00:46:27,190 Vi har fread linje. 928 00:46:27,190 --> 00:46:28,490 La oss gjøre neste linje. 929 00:46:28,490 --> 00:46:32,984 >> Hvis vi ønsker å skrive til en fil, hva er en god funksjon for å bruke for å gjøre det? 930 00:46:32,984 --> 00:46:33,770 >> STUDENT 37: fwrite? 931 00:46:33,770 --> 00:46:35,140 >> STUDENT 38: fprintf? 932 00:46:35,140 --> 00:46:36,010 >> JASON Hirschhorn: fprintf er ett. 933 00:46:36,010 --> 00:46:37,260 Hva er en annen en? 934 00:46:37,260 --> 00:46:37,680 >> STUDENT 39: fwrite. 935 00:46:37,680 --> 00:46:38,510 >> JASON Hirschhorn: fwrite. 936 00:46:38,510 --> 00:46:41,250 Og for vårt formål, fwrite, som vi så her, er 937 00:46:41,250 --> 00:46:42,500 sannsynligvis et bedre valg. 938 00:46:42,500 --> 00:46:51,970 939 00:46:51,970 --> 00:46:53,950 Det tar fire argumenter også. 940 00:46:53,950 --> 00:46:57,570 Nishant, kan du gi me argumentene? 941 00:46:57,570 --> 00:47:00,570 >> Nishant: Den første kommer å være bare buffer. 942 00:47:00,570 --> 00:47:02,210 >> JASON Hirschhorn: OK. 943 00:47:02,210 --> 00:47:06,752 >> Nishant: Den andre ens bare kommer til å bli en. 944 00:47:06,752 --> 00:47:09,510 Tredje man kommer til å bli en. 945 00:47:09,510 --> 00:47:11,470 Og den fjerde kommer til å være dst. 946 00:47:11,470 --> 00:47:18,010 947 00:47:18,010 --> 00:47:19,550 >> JASON Hirschhorn: Er det noen som har spørsmål om den linjen? 948 00:47:19,550 --> 00:47:28,370 949 00:47:28,370 --> 00:47:29,130 Det ser bra ut. 950 00:47:29,130 --> 00:47:29,590 OK. 951 00:47:29,590 --> 00:47:34,250 Så nå ser det ut som den ene tingen vi er mangler - faktisk, la oss skrive 952 00:47:34,250 --> 00:47:35,090 denne siste linjen. 953 00:47:35,090 --> 00:47:36,300 Lukk filene. 954 00:47:36,300 --> 00:47:38,880 Hvem kan fullføre oss opp skriftlig disse to siste linjene? 955 00:47:38,880 --> 00:47:39,120 Ja. 956 00:47:39,120 --> 00:47:39,850 Sorry, hva heter du? 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: fclose src og deretter fclose destinasjon. 960 00:47:47,560 --> 00:47:52,430 >> JASON Hirschhorn: fclose, åpen paren, src, nære paren, semikolon. 961 00:47:52,430 --> 00:47:53,680 Og fclose - 962 00:47:53,680 --> 00:47:57,560 963 00:47:57,560 --> 00:47:58,090 ja? 964 00:47:58,090 --> 00:48:01,710 >> LUCY: Åpen parentes, dst og deretter semikolon. 965 00:48:01,710 --> 00:48:02,520 >> JASON Hirschhorn: Great. 966 00:48:02,520 --> 00:48:04,338 Og hva bør jeg ta med på slutten? 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 Må jeg? 970 00:48:06,820 --> 00:48:10,560 971 00:48:10,560 --> 00:48:12,590 Bare et spørsmål. 972 00:48:12,590 --> 00:48:14,957 Må vi være avkastning 0? 973 00:48:14,957 --> 00:48:16,240 >> FLERE STUDENTER: Nei. 974 00:48:16,240 --> 00:48:16,430 >> JASON Hirschhorn: Nei. 975 00:48:16,430 --> 00:48:18,090 Hoved gjør det automatisk hvis du kommer til enden. 976 00:48:18,090 --> 00:48:20,580 Men jeg synes det er hyggelig å inkludere det eksplisitt. 977 00:48:20,580 --> 00:48:23,860 Spesielt når vi er tilbake andre ting gjennom hele programmet. 978 00:48:23,860 --> 00:48:24,810 OK. 979 00:48:24,810 --> 00:48:26,230 Dette er hva vi mangler - 980 00:48:26,230 --> 00:48:28,520 MENS hva? 981 00:48:28,520 --> 00:48:31,630 Hvem kan tenke på noen - 982 00:48:31,630 --> 00:48:35,240 har noen følelse av hva ting kunne gå inn der? 983 00:48:35,240 --> 00:48:37,350 Selv om det er bare i noen pseudo som språk? 984 00:48:37,350 --> 00:48:41,330 >> Hva er vi egentlig - hva ønsker vi å gå til? 985 00:48:41,330 --> 00:48:41,980 Ja, Lucy. 986 00:48:41,980 --> 00:48:43,240 >> LUCY: Slutten av filen. 987 00:48:43,240 --> 00:48:44,990 >> JASON Hirschhorn: Enden på filen. 988 00:48:44,990 --> 00:48:49,280 Så hva mener du med slutten av filen? 989 00:48:49,280 --> 00:48:50,955 >> LUCY: Når du kommer til slutten av filen, stopp. 990 00:48:50,955 --> 00:48:51,240 >> JASON Hirschhorn: OK. 991 00:48:51,240 --> 00:48:53,460 Så når vi kommer til slutten av filen. 992 00:48:53,460 --> 00:48:56,893 Hvordan vet vi når vi har nådd slutten av filen? 993 00:48:56,893 --> 00:48:59,900 >> STUDENT 40: Jeg tror buffer vil bli satt til NULL. 994 00:48:59,900 --> 00:49:01,885 >> STUDENT 41: Buffer erklæres innenfor sløyfen. 995 00:49:01,885 --> 00:49:03,670 >> JASON Hirschhorn: Så du tror buffer vil bli satt til NULL. 996 00:49:03,670 --> 00:49:05,850 Hvorfor skulle buffer settes til NULL? 997 00:49:05,850 --> 00:49:10,420 >> STUDENT 40: Fordi når du fread, du prøver å sette 998 00:49:10,420 --> 00:49:13,528 ingenting i buffer. 999 00:49:13,528 --> 00:49:13,980 >> JASON Hirschhorn: OK. 1000 00:49:13,980 --> 00:49:15,550 Så du tenker fread - 1001 00:49:15,550 --> 00:49:19,000 når vi har nådd slutten av den fil, hva er fread kommer til å gjøre? 1002 00:49:19,000 --> 00:49:21,230 Jeg tror det er spørsmålet vi må finne ut. 1003 00:49:21,230 --> 00:49:21,960 Hva fread gjøre? 1004 00:49:21,960 --> 00:49:25,640 Betyr det sette NULL i buffer, eller gjør den noe annet? 1005 00:49:25,640 --> 00:49:27,510 Hvordan kan vi finne ut hva det betyr? 1006 00:49:27,510 --> 00:49:28,190 >> STUDENT 42: Man. 1007 00:49:28,190 --> 00:49:28,810 >> JASON Hirschhorn: Man. 1008 00:49:28,810 --> 00:49:32,280 Så la oss se over her. 1009 00:49:32,280 --> 00:49:34,000 Returnere verdien. 1010 00:49:34,000 --> 00:49:39,620 På suksess, fread og fwrite returnere antall elementer lest eller skrevet. 1011 00:49:39,620 --> 00:49:43,700 Dette tallet tilsvarer antall byte overføres bare når størrelsen er en. 1012 00:49:43,700 --> 00:49:47,780 Hvis det oppstår en feil, eller slutten av filen er nådd, er returverdien en 1013 00:49:47,780 --> 00:49:51,490 kort teller element eller 0. 1014 00:49:51,490 --> 00:49:57,860 >> Så for vårt formål, hvis fread delene slutten av filen, og leser fra 1015 00:49:57,860 --> 00:50:02,100 slutten av filen, det er ingenting igjen å lese, hva kommer det til å komme tilbake? 1016 00:50:02,100 --> 00:50:03,290 >> STUDENT 43: Zero? 1017 00:50:03,290 --> 00:50:04,540 >> JASON Hirschhorn: Hva? 1018 00:50:04,540 --> 00:50:05,300 >> STUDENT 43: Zero? 1019 00:50:05,300 --> 00:50:05,690 >> JASON Hirschhorn: Zero. 1020 00:50:05,690 --> 00:50:06,940 Det kommer til å returnere null. 1021 00:50:06,940 --> 00:50:09,360 1022 00:50:09,360 --> 00:50:13,010 Så vi vet at fread, når vi har nådd slutten av filen, går 1023 00:50:13,010 --> 00:50:13,690 for å gå tilbake null. 1024 00:50:13,690 --> 00:50:17,460 Hvordan kan vi bruke det til vår fordel? 1025 00:50:17,460 --> 00:50:21,733 >> AVI: Du kan erklære en variabel utenfor av sløyfen kalt sjekken. 1026 00:50:21,733 --> 00:50:27,040 Hvis sjekken er lik - 1027 00:50:27,040 --> 00:50:28,190 for nå - ett. 1028 00:50:28,190 --> 00:50:28,920 >> JASON Hirschhorn: OK. 1029 00:50:28,920 --> 00:50:38,050 >> AVI: Og så kan du sette en IF uttalelse rett etter fread si hvis 1030 00:50:38,050 --> 00:50:42,600 fread lik null - 1031 00:50:42,600 --> 00:50:43,850 no. 1032 00:50:43,850 --> 00:50:46,002 1033 00:50:46,002 --> 00:50:47,252 >> JASON Hirschhorn: Hvem kan hjelpe Avi ut? 1034 00:50:47,252 --> 00:50:49,690 1035 00:50:49,690 --> 00:50:52,410 >> AVI: Hva er verdien returnert av fread? 1036 00:50:52,410 --> 00:50:54,060 >> JASON Hirschhorn: Vi bare gikk over det. 1037 00:50:54,060 --> 00:50:55,450 >> AVI: Hvordan kan du representere det? 1038 00:50:55,450 --> 00:50:57,190 >> JASON Hirschhorn: Så det vender tilbake - la oss se opp her - det gir en 1039 00:50:57,190 --> 00:50:59,340 size_t, som i hovedsak er et helt tall. 1040 00:50:59,340 --> 00:51:02,240 1041 00:51:02,240 --> 00:51:03,410 Så det returnerer et heltall. 1042 00:51:03,410 --> 00:51:05,160 Og i vårt tilfelle, vil det returnere en eller 0 - 1043 00:51:05,160 --> 00:51:08,760 1 hvis det lese én ting - én byte, og 0 hvis vi har nådd slutten. 1044 00:51:08,760 --> 00:51:13,560 1045 00:51:13,560 --> 00:51:16,450 Så hvis fread - 1046 00:51:16,450 --> 00:51:16,855 ja? 1047 00:51:16,855 --> 00:51:20,330 >> STUDENT 45: Kan ikke du bare sette den fulle fread (buffer, 1, 1, src) i 1048 00:51:20,330 --> 00:51:21,660 mens loop? 1049 00:51:21,660 --> 00:51:26,510 >> JASON Hirschhorn: Så du foreslår gjør dette til det? 1050 00:51:26,510 --> 00:51:27,600 >> [interposing VOICES] 1051 00:51:27,600 --> 00:51:29,520 >> JASON Hirschhorn: Hold ut. 1052 00:51:29,520 --> 00:51:30,885 Så vi ridding av det. 1053 00:51:30,885 --> 00:51:33,300 Så du foreslår å sette fread inn der? 1054 00:51:33,300 --> 00:51:35,457 Hva bør vi også flytte Hvis du ønsker å gjøre det? 1055 00:51:35,457 --> 00:51:36,740 >> STUDENT 45: Buffer utenfor. 1056 00:51:36,740 --> 00:51:38,110 >> JASON Hirschhorn: Vi bør også flytte dette her ut. 1057 00:51:38,110 --> 00:51:41,700 >> STUDENT 45: Men gjør det stadig flytte den frem? 1058 00:51:41,700 --> 00:51:42,950 >> [interposing VOICES] 1059 00:51:42,950 --> 00:51:46,540 1060 00:51:46,540 --> 00:51:47,470 >> JASON Hirschhorn: OK. 1061 00:51:47,470 --> 00:51:50,570 Så dette er hva Okshar foreslått. 1062 00:51:50,570 --> 00:51:51,930 Vi skaper vår buffer. 1063 00:51:51,930 --> 00:51:57,020 Vi MENS fread, så vi fwrite. 1064 00:51:57,020 --> 00:51:59,760 Tanker om dette? 1065 00:51:59,760 --> 00:52:04,050 >> STUDENT 46: Min eneste spørsmålet er, ville det faktisk utføre kommandoen fread? 1066 00:52:04,050 --> 00:52:06,175 >> JASON Hirschhorn: Great spørsmål. 1067 00:52:06,175 --> 00:52:11,050 Når du setter et funksjonskall innsiden av en tilstand, gjør at 1068 00:52:11,050 --> 00:52:12,300 funksjon samtale utføre? 1069 00:52:12,300 --> 00:52:15,760 1070 00:52:15,760 --> 00:52:17,770 Vi har sett eksempler på dette før. 1071 00:52:17,770 --> 00:52:24,900 1072 00:52:24,900 --> 00:52:25,660 Høyre? 1073 00:52:25,660 --> 00:52:26,125 >> STUDENT 46: OK. 1074 00:52:26,125 --> 00:52:26,590 Yeah. 1075 00:52:26,590 --> 00:52:30,140 Så det gjør utføre. 1076 00:52:30,140 --> 00:52:31,790 >> JASON Hirschhorn: Vi har sett ting sånn før, hvor vi har en 1077 00:52:31,790 --> 00:52:33,550 funksjon samtale inne i en tilstand. 1078 00:52:33,550 --> 00:52:35,540 Betyr at funksjonskall utføre? 1079 00:52:35,540 --> 00:52:36,350 Ja. 1080 00:52:36,350 --> 00:52:37,410 Så svaret er ja. 1081 00:52:37,410 --> 00:52:41,010 Denne funksjonen kaller vil utføre. 1082 00:52:41,010 --> 00:52:42,418 Men igjen, det er det vi vil? 1083 00:52:42,418 --> 00:52:49,250 1084 00:52:49,250 --> 00:52:52,204 >> Hva er en måte vi kunne finne ut om det er det vi vil? 1085 00:52:52,204 --> 00:52:53,470 >> FLERE STUDENTER: Kjør det? 1086 00:52:53,470 --> 00:52:54,460 >> JASON Hirschhorn: Vi kunne kjøre den. 1087 00:52:54,460 --> 00:52:57,500 Men før vi gjør det, vi kunne også resonnere gjennom dette. 1088 00:52:57,500 --> 00:52:57,920 Hvis - 1089 00:52:57,920 --> 00:53:01,920 si at vi har én byte i vår fil, vi får til her, 1090 00:53:01,920 --> 00:53:02,660 vi får til denne koden. 1091 00:53:02,660 --> 00:53:03,620 Dette vil kjøre. 1092 00:53:03,620 --> 00:53:07,780 fread kommer tilbake en byte og lagre den i bufferen. 1093 00:53:07,780 --> 00:53:11,290 Og dette vil evaluere til en, retten, etter at han returnerer en. 1094 00:53:11,290 --> 00:53:12,640 >> Så mens en. 1095 00:53:12,640 --> 00:53:15,325 Betyr det at koden inne mens loop vil utføre? 1096 00:53:15,325 --> 00:53:15,453 >> STUDENT 47: Yeah. 1097 00:53:15,453 --> 00:53:16,040 Det er sant. 1098 00:53:16,040 --> 00:53:16,290 >> JASON Hirschhorn: Ja. 1099 00:53:16,290 --> 00:53:17,490 1 er sant. 1100 00:53:17,490 --> 00:53:18,240 Det er ikke 0. 1101 00:53:18,240 --> 00:53:20,360 Så koden inne her vil utføre. 1102 00:53:20,360 --> 00:53:22,300 Så vi skal skrive det. 1103 00:53:22,300 --> 00:53:25,340 Vi vil flytte tilbake til dette linje igjen. 1104 00:53:25,340 --> 00:53:26,850 Nå har vi - 1105 00:53:26,850 --> 00:53:28,550 vi er på slutten av vår fil. 1106 00:53:28,550 --> 00:53:30,980 Vi har lest fra slutten av filen, fordi vi bare hadde én byte i det. 1107 00:53:30,980 --> 00:53:34,270 >> Fread returnerer 0, butikker noe i buffer. 1108 00:53:34,270 --> 00:53:35,890 Jeg vet ærlig talt ikke hva den lagrer i buffer. 1109 00:53:35,890 --> 00:53:38,380 Vi kunne sikkert slå opp for å se hva den gjør. 1110 00:53:38,380 --> 00:53:40,130 At jeg vet ærlig talt ikke. 1111 00:53:40,130 --> 00:53:43,090 Vi vet ikke, hvem bryr seg om hva den lagrer i buffer? 1112 00:53:43,090 --> 00:53:44,010 Men det kommer tilbake 0. 1113 00:53:44,010 --> 00:53:45,440 Og vil mens 0 utføre? 1114 00:53:45,440 --> 00:53:49,950 1115 00:53:49,950 --> 00:53:51,180 >> MENS 0 vil ikke utføre. 1116 00:53:51,180 --> 00:53:54,030 Så da vil vi flytte ned her. 1117 00:53:54,030 --> 00:53:58,870 Så la oss få en håndsopprekning om dette er koden vi skal kjøre, eller om vi 1118 00:53:58,870 --> 00:54:00,140 bør gjøre endringer først. 1119 00:54:00,140 --> 00:54:02,180 Så hvis du tror - har du til å stemme. 1120 00:54:02,180 --> 00:54:06,885 Hvis du mener vi bør kjøre denne koden som det er, kan du heve hånden. 1121 00:54:06,885 --> 00:54:12,440 1122 00:54:12,440 --> 00:54:13,400 >> OK. 1123 00:54:13,400 --> 00:54:14,315 Det er ett - 1124 00:54:14,315 --> 00:54:17,260 har du et spørsmål, bekymring? 1125 00:54:17,260 --> 00:54:18,080 Yeah. 1126 00:54:18,080 --> 00:54:21,240 >> STUDENT 48: Etter at vi flytter buffer utsiden av sløyfen, gjør vi 1127 00:54:21,240 --> 00:54:22,670 må malloc det? 1128 00:54:22,670 --> 00:54:23,310 >> JASON Hirschhorn: Great spørsmål. 1129 00:54:23,310 --> 00:54:26,670 Etter at vi flytte buffer utenfor loop, har vi å malloc det? 1130 00:54:26,670 --> 00:54:28,400 Dette er et omfang spørsmål. 1131 00:54:28,400 --> 00:54:32,130 Hvis vi initial buffer utenfor av denne sløyfe, vil det eksistere 1132 00:54:32,130 --> 00:54:33,534 innsiden av løkken? 1133 00:54:33,534 --> 00:54:35,230 >> FLERE STUDENTER: Ja. 1134 00:54:35,230 --> 00:54:35,580 >> JASON Hirschhorn: Ja. 1135 00:54:35,580 --> 00:54:40,100 Dens omfang dekker innsiden av løkken, og, egentlig, noe under det inne 1136 00:54:40,100 --> 00:54:42,460 av denne kode, herunder ting inni her. 1137 00:54:42,460 --> 00:54:43,930 Så vi trenger ikke å malloc det. 1138 00:54:43,930 --> 00:54:47,766 Det er en lokal variabel, og dens omfang fremdeles inneholder sløyfen. 1139 00:54:47,766 --> 00:54:49,540 >> STUDENT 49: Trenger vi å frigjøre det? 1140 00:54:49,540 --> 00:54:51,770 >> JASON Hirschhorn: Har vi trenger å fri buffer? 1141 00:54:51,770 --> 00:54:53,860 >> STUDENT 49: Ja, hvis vi ikke gjør det malloc. 1142 00:54:53,860 --> 00:54:55,750 >> JASON Hirschhorn: Har vi trenger å fri buffer? 1143 00:54:55,750 --> 00:54:57,160 Vi gjør ikke det. 1144 00:54:57,160 --> 00:55:01,280 Igjen er det en lokal variabel, slik at vi ikke trenger å frigjøre den. 1145 00:55:01,280 --> 00:55:02,170 OK. 1146 00:55:02,170 --> 00:55:03,480 La oss se hva som skjer. 1147 00:55:03,480 --> 00:55:17,290 1148 00:55:17,290 --> 00:55:18,220 Så det er initialisert. 1149 00:55:18,220 --> 00:55:20,830 Det var det noe som Marcus foreslått tidligere. 1150 00:55:20,830 --> 00:55:25,340 Så vi har denne feilen, variabel buffer er ikke-initialisert når det brukes her. 1151 00:55:25,340 --> 00:55:26,590 >> Hvordan kan vi løse dette? 1152 00:55:26,590 --> 00:55:29,460 1153 00:55:29,460 --> 00:55:30,960 >> STUDENT 50: malloc det? 1154 00:55:30,960 --> 00:55:31,770 >> STUDENT 51: Er lik NULL? 1155 00:55:31,770 --> 00:55:33,000 >> STUDENT 52: Si buffer lik NULL. 1156 00:55:33,000 --> 00:55:34,250 >> JASON Hirschhorn: OK. 1157 00:55:34,250 --> 00:55:40,040 1158 00:55:40,040 --> 00:55:40,770 Ser bra ut. 1159 00:55:40,770 --> 00:55:42,410 Vi har det nå. 1160 00:55:42,410 --> 00:55:45,630 La oss skape noe for å prøve å kopiere. 1161 00:55:45,630 --> 00:56:08,990 1162 00:56:08,990 --> 00:56:10,490 Så vi har vår tekstfil. 1163 00:56:10,490 --> 00:56:11,740 Hvordan kan vi kjøre dette programmet? 1164 00:56:11,740 --> 00:56:14,140 1165 00:56:14,140 --> 00:56:15,472 Yeah. 1166 00:56:15,472 --> 00:56:22,230 >> STUDENT 53: Du kan gjøre prikk slash cp, test.txt. 1167 00:56:22,230 --> 00:56:25,140 Og så kan du nevne en annen fil som det vil lagre inn. 1168 00:56:25,140 --> 00:56:25,510 >> JASON Hirschhorn: OK. 1169 00:56:25,510 --> 00:56:27,380 Vi kaller det out.txt. 1170 00:56:27,380 --> 00:56:28,630 Cool? 1171 00:56:28,630 --> 00:56:31,700 1172 00:56:31,700 --> 00:56:34,320 Seg feil. 1173 00:56:34,320 --> 00:56:35,570 Tanker om SEG feil? 1174 00:56:35,570 --> 00:56:40,900 1175 00:56:40,900 --> 00:56:41,390 Dette er flott. 1176 00:56:41,390 --> 00:56:45,040 Hvordan kan vi finne ut hvor SEG feilen er? 1177 00:56:45,040 --> 00:56:45,680 Hva? 1178 00:56:45,680 --> 00:56:45,990 >> STUDENT 54: GDB. 1179 00:56:45,990 --> 00:56:47,240 >> JASON Hirschhorn: GDB. 1180 00:56:47,240 --> 00:56:51,400 1181 00:56:51,400 --> 00:56:55,300 Vi kjører gdb ved å skrive gdb dot slash, navnet på programmet vårt. 1182 00:56:55,300 --> 00:56:57,020 Ingen kommandolinjeargumentene der. 1183 00:56:57,020 --> 00:56:59,570 Vi kommer til å sette en stoppunkt på hoved. 1184 00:56:59,570 --> 00:57:02,190 Hvis jeg ønsker å starte gdb, hva gjør jeg? 1185 00:57:02,190 --> 00:57:02,730 >> STUDENT 55: R. 1186 00:57:02,730 --> 00:57:08,910 >> JASON Hirschhorn: R. Og hva så? 1187 00:57:08,910 --> 00:57:09,400 >> STUDENT 55: Argumentene? 1188 00:57:09,400 --> 00:57:10,650 >> JASON Hirschhorn: Da kommandolinje-argumenter. 1189 00:57:10,650 --> 00:57:15,890 1190 00:57:15,890 --> 00:57:17,120 La oss gå gjennom. 1191 00:57:17,120 --> 00:57:19,090 N er bare å ta meg linje for linje. 1192 00:57:19,090 --> 00:57:21,450 Jeg kommer til å gå til Jeg får min SEG feil. 1193 00:57:21,450 --> 00:57:22,700 Det er min SEG feil. 1194 00:57:22,700 --> 00:57:24,960 1195 00:57:24,960 --> 00:57:27,875 Det ser ut som fread forårsaket min SEG feil. 1196 00:57:27,875 --> 00:57:30,570 1197 00:57:30,570 --> 00:57:32,770 Jeg vet fread forårsaket min segmentet feil, fordi det var den 1198 00:57:32,770 --> 00:57:34,950 linjen vi bare henrettet. 1199 00:57:34,950 --> 00:57:36,530 >> Og det eneste som var skjer i den linjen - 1200 00:57:36,530 --> 00:57:37,520 to ting skjedde. 1201 00:57:37,520 --> 00:57:40,610 Fread skulle, og da vi var gjøre noen mens du sjekker. 1202 00:57:40,610 --> 00:57:44,820 Jeg er villig til å satse på at den MENS sjekker var ikke årsaken til segmentet feil. 1203 00:57:44,820 --> 00:57:46,950 Mest sannsynlig, var fread forårsaker min SEG feil. 1204 00:57:46,950 --> 00:57:49,260 Jeg ser også noe her, memcopy. 1205 00:57:49,260 --> 00:57:50,500 >> Minne kopi. 1206 00:57:50,500 --> 00:57:53,820 Høres ut som du flytter minne fra ett sted til et annet. 1207 00:57:53,820 --> 00:57:56,890 Høres ut som noe som ville skje i fread, kanskje noen minne 1208 00:57:56,890 --> 00:57:58,910 flytte herfra til her. 1209 00:57:58,910 --> 00:58:01,740 1210 00:58:01,740 --> 00:58:03,860 La oss gå gjennom dette igjen. 1211 00:58:03,860 --> 00:58:06,900 Hvordan starter jeg den over og kjøre den på nytt? 1212 00:58:06,900 --> 00:58:08,092 Yeah. 1213 00:58:08,092 --> 00:58:15,140 >> STUDENT 56: Har du behov for å sette -tegnet før buffer? 1214 00:58:15,140 --> 00:58:17,800 >> JASON Hirschhorn: Så Ampersand før buffer ville gi meg adressen til 1215 00:58:17,800 --> 00:58:22,330 buffer, noe som er en char *. 1216 00:58:22,330 --> 00:58:25,250 La oss kjøre gjennom dette en gang til. 1217 00:58:25,250 --> 00:58:28,248 Hvordan kjører jeg gjennom det en gang til? 1218 00:58:28,248 --> 00:58:29,210 >> STUDENT 57: Kan du bare skriver kjøre igjen? 1219 00:58:29,210 --> 00:58:32,050 >> JASON Hirschhorn: Bare skriv løpe igjen. 1220 00:58:32,050 --> 00:58:33,415 Så vi kommer til å utføre denne linjen. 1221 00:58:33,415 --> 00:58:36,250 1222 00:58:36,250 --> 00:58:39,240 Så buffer er en NULL-peker. 1223 00:58:39,240 --> 00:58:40,490 Korrigere? 1224 00:58:40,490 --> 00:58:45,870 1225 00:58:45,870 --> 00:58:47,060 Det peker på - la oss se. 1226 00:58:47,060 --> 00:58:48,500 Hvis vi har vår - 1227 00:58:48,500 --> 00:58:50,430 tegne et raskt bilde av dette. 1228 00:58:50,430 --> 00:58:53,500 Alle kan se om Jeg skriver over her? 1229 00:58:53,500 --> 00:59:02,890 >> Så i bunken, har vi en lokal variabel og det heter buffer, og 1230 00:59:02,890 --> 00:59:08,230 det er en peker til en char. 1231 00:59:08,230 --> 00:59:10,325 Hvilken adresse er dette røye på? 1232 00:59:10,325 --> 00:59:12,550 >> STUDENT 58: 0x0. 1233 00:59:12,550 --> 00:59:13,400 >> JASON Hirschhorn: Høyre. 1234 00:59:13,400 --> 00:59:14,200 Det er det dette er. 1235 00:59:14,200 --> 00:59:17,600 I her, inne buffer, lagres 0x0. 1236 00:59:17,600 --> 00:59:20,480 Det er det vi har - setup vi har akkurat nå. 1237 00:59:20,480 --> 00:59:27,540 Så denne linjen, fread, setter noe fra kilden der? 1238 00:59:27,540 --> 00:59:30,560 Inn i denne boksen eller denne boksen? 1239 00:59:30,560 --> 00:59:31,060 Hvilken boks? 1240 00:59:31,060 --> 00:59:33,290 Venstre boks eller høyre boksen? 1241 00:59:33,290 --> 00:59:34,750 Denne retten boksen. 1242 00:59:34,750 --> 00:59:38,440 >> Det følger pekeren, og setter det inn her. 1243 00:59:38,440 --> 00:59:42,620 Når vi prøver og touch-minne på plassering 0, hva får vi? 1244 00:59:42,620 --> 00:59:45,050 En segmenteringsfeil. 1245 00:59:45,050 --> 00:59:46,550 Det er den feilen vi har akkurat nå. 1246 00:59:46,550 --> 00:59:46,970 Yeah. 1247 00:59:46,970 --> 00:59:48,410 >> STUDENT 59: Har du ikke å sette stjerne buffer? 1248 00:59:48,410 --> 00:59:49,180 Eller nei? 1249 00:59:49,180 --> 00:59:50,050 For fread? 1250 00:59:50,050 --> 00:59:51,450 >> JASON Hirschhorn: Så fread tar en peker. 1251 00:59:51,450 --> 00:59:54,920 1252 00:59:54,920 --> 00:59:55,900 Så det går i buffer. 1253 00:59:55,900 --> 00:59:58,980 Og så får det de-referanse det et eller annet sted inne fread. 1254 00:59:58,980 --> 01:00:00,700 Men igjen, vi så, det tar en peker. 1255 01:00:00,700 --> 01:00:02,560 Vi trenger ikke å passere det stjerne buffer. 1256 01:00:02,560 --> 01:00:05,350 Det ville være bestått det det som er her. 1257 01:00:05,350 --> 01:00:07,980 Og det ville trolig gi oss en feil fordi vi er de-referering det. 1258 01:00:07,980 --> 01:00:08,150 >> Høyre? 1259 01:00:08,150 --> 01:00:10,690 Når vi de-referansen denne pekeren, når vi prøver å få tilgang til dette stedet, 1260 01:00:10,690 --> 01:00:13,140 vi får en feilmelding - vår segmentering feil. 1261 01:00:13,140 --> 01:00:15,800 Så - 1262 01:00:15,800 --> 01:00:16,690 oops. 1263 01:00:16,690 --> 01:00:19,090 Vi kommer til å slutte ut av gdb. 1264 01:00:19,090 --> 01:00:20,160 Vår linje - 1265 01:00:20,160 --> 01:00:22,990 vårt problem - er riktig her på denne linjen. 1266 01:00:22,990 --> 01:00:26,410 Og det er et problem fordi av denne linjen. 1267 01:00:26,410 --> 01:00:31,780 >> Hvordan kan vi skape en boks som er tilgjengelig i fread. 1268 01:00:31,780 --> 01:00:31,980 Høyre? 1269 01:00:31,980 --> 01:00:35,190 Vi trenger å skape en boks som er en byte stor, på størrelse med en røye. 1270 01:00:35,190 --> 01:00:38,590 Men vi trenger den boksen til å være tilgjengelig når denne funksjonen utfører. 1271 01:00:38,590 --> 01:00:39,390 Så der - 1272 01:00:39,390 --> 01:00:39,640 ja. 1273 01:00:39,640 --> 01:00:40,440 Noen ideer? 1274 01:00:40,440 --> 01:00:43,615 >> STUDENT 60: Bare sett det som noe tilfeldig karakter. 1275 01:00:43,615 --> 01:00:49,150 1276 01:00:49,150 --> 01:00:51,640 Bare gjør char buffer likemenn tegnet. 1277 01:00:51,640 --> 01:00:53,795 Og så, når du har buffer der - 1278 01:00:53,795 --> 01:00:54,110 >> JASON Hirschhorn: Vent. 1279 01:00:54,110 --> 01:00:55,110 Char buffer? 1280 01:00:55,110 --> 01:00:55,880 Så ingen stjerne? 1281 01:00:55,880 --> 01:00:56,390 >> STUDENT 60: Yeah. 1282 01:00:56,390 --> 01:00:58,560 Ta ut stjernen. 1283 01:00:58,560 --> 01:01:00,690 Tilsvarer en tilfeldig karakter. 1284 01:01:00,690 --> 01:01:01,460 >> JASON Hirschhorn: OK. 1285 01:01:01,460 --> 01:01:02,420 Så gi meg en. 1286 01:01:02,420 --> 01:01:03,170 >> STUDENT 60: Like a eller noe. 1287 01:01:03,170 --> 01:01:06,160 Og så når du har buffer det, bruker du en - 1288 01:01:06,160 --> 01:01:06,420 >> STUDENT 61: Star? 1289 01:01:06,420 --> 01:01:07,650 Å nei, tegnet. 1290 01:01:07,650 --> 01:01:09,000 >> STUDENT 60: Bruk tegnet. 1291 01:01:09,000 --> 01:01:09,470 >> JASON Hirschhorn: OK. 1292 01:01:09,470 --> 01:01:11,320 Og hva om i fwrite? 1293 01:01:11,320 --> 01:01:14,150 >> STUDENT 60: Bruk tegnet på nytt. 1294 01:01:14,150 --> 01:01:14,320 >> JASON Hirschhorn: Greit. 1295 01:01:14,320 --> 01:01:20,970 Så ideen din er, vi skaper en røye og putte noe i den, og deretter 1296 01:01:20,970 --> 01:01:22,612 skrive til at røye. 1297 01:01:22,612 --> 01:01:23,760 >> STUDENT 60: Yeah. 1298 01:01:23,760 --> 01:01:25,916 >> JASON Hirschhorn: Hva tror folk? 1299 01:01:25,916 --> 01:01:27,770 >> STUDENT 62: Det er innviklet. 1300 01:01:27,770 --> 01:01:28,460 >> JASON Hirschhorn: OK. 1301 01:01:28,460 --> 01:01:29,760 La oss trekke den ut. 1302 01:01:29,760 --> 01:01:35,720 Så denne gangen, kommer jeg til å trekke dette i rødt på stakken her, og da vi 1303 01:01:35,720 --> 01:01:36,410 vil ha - 1304 01:01:36,410 --> 01:01:36,822 ooh! 1305 01:01:36,822 --> 01:01:38,060 Unnskyld. 1306 01:01:38,060 --> 01:01:45,930 Så denne gangen har vi noe som heter buffer, og det er på stakken. 1307 01:01:45,930 --> 01:01:48,430 Korrigere? 1308 01:01:48,430 --> 01:01:51,520 Og vi sparer på det en, i utgangspunktet. 1309 01:01:51,520 --> 01:01:53,830 >> Da har vi vår oppfordring til fread. 1310 01:01:53,830 --> 01:02:01,300 Hva fread ikke er det tar en byte fra vår og plasserer den et sted. 1311 01:02:01,300 --> 01:02:04,570 Det setter det i uansett ting peker til. 1312 01:02:04,570 --> 01:02:09,130 Vel, før vi hadde denne adressen - 1313 01:02:09,130 --> 01:02:10,250 0x0. 1314 01:02:10,250 --> 01:02:13,349 Nå hva adressen har vi? 1315 01:02:13,349 --> 01:02:14,650 >> STUDENT 63: Uansett adresse buffer er. 1316 01:02:14,650 --> 01:02:15,970 >> JASON Hirschhorn: Uansett adresse buffer er. 1317 01:02:15,970 --> 01:02:22,370 Det er trolig kommer til å være noe sånt. 1318 01:02:22,370 --> 01:02:26,950 Sannsynligvis kommer til å starte med en b og en f, og deretter ha seks andre 1319 01:02:26,950 --> 01:02:27,970 heksadesimale siffer. 1320 01:02:27,970 --> 01:02:28,480 Spiller ingen rolle. 1321 01:02:28,480 --> 01:02:29,470 Noen adresse. 1322 01:02:29,470 --> 01:02:31,410 Og vi passerer den adressen i. 1323 01:02:31,410 --> 01:02:34,790 >> Og vi kommer til å sette vår ett byte ting på denne adressen. 1324 01:02:34,790 --> 01:02:38,470 Så vi kommer til å sette vår ett byte ting inni her. 1325 01:02:38,470 --> 01:02:40,800 Og så kommer vi til å skrive fra hva er stadig inne her. 1326 01:02:40,800 --> 01:02:43,425 1327 01:02:43,425 --> 01:02:45,380 Er det noen som har noen spørsmål om det? 1328 01:02:45,380 --> 01:02:50,990 1329 01:02:50,990 --> 01:02:54,690 Hvem mener denne koden vil fungere? 1330 01:02:54,690 --> 01:02:56,020 >> Rekk opp hånden hvis du tror denne koden vil fungere. 1331 01:02:56,020 --> 01:02:57,270 Du må ta et standpunkt. 1332 01:02:57,270 --> 01:03:00,670 1333 01:03:00,670 --> 01:03:02,500 Og som mener denne koden ikke vil fungere? 1334 01:03:02,500 --> 01:03:04,610 Rekk opp hånden. 1335 01:03:04,610 --> 01:03:06,750 Alle andre bør være heve sin hånd. 1336 01:03:06,750 --> 01:03:07,670 OK. 1337 01:03:07,670 --> 01:03:09,390 Michael, hvor står du? 1338 01:03:09,390 --> 01:03:10,680 >> MICHAEL: Jeg kan ikke bestemme. 1339 01:03:10,680 --> 01:03:12,070 Slags i midten. 1340 01:03:12,070 --> 01:03:12,736 >> JASON Hirschhorn: Du er i midten. 1341 01:03:12,736 --> 01:03:13,092 Plukk en. 1342 01:03:13,092 --> 01:03:14,400 >> MICHAEL: Jeg har tro og sier at det vil fungere. 1343 01:03:14,400 --> 01:03:14,660 >> JASON Hirschhorn: OK. 1344 01:03:14,660 --> 01:03:16,047 Du må tro og si det fungerer? 1345 01:03:16,047 --> 01:03:26,490 1346 01:03:26,490 --> 01:03:27,020 Hva har skjedd? 1347 01:03:27,020 --> 01:03:28,270 >> [interposing VOICES] 1348 01:03:28,270 --> 01:03:35,170 1349 01:03:35,170 --> 01:03:35,950 >> JASON Hirschhorn: Ingen segmentet feil. 1350 01:03:35,950 --> 01:03:40,320 Hvordan kan vi sjekke for å se om to ting er like? 1351 01:03:40,320 --> 01:03:42,060 To filer er like. 1352 01:03:42,060 --> 01:03:43,300 >> STUDENT 64: Diff. 1353 01:03:43,300 --> 01:03:45,490 >> JASON Hirschhorn: Diff. 1354 01:03:45,490 --> 01:03:51,630 Diff sjekker for forskjellene mellom to filer, og hvis den returnerer 1355 01:03:51,630 --> 01:03:52,890 ingenting, de er identiske. 1356 01:03:52,890 --> 01:03:59,030 Og hvis vi åpner opp, får vi vår fil. 1357 01:03:59,030 --> 01:04:00,490 Så var den riktige løsning. 1358 01:04:00,490 --> 01:04:01,780 La oss se tilbake på det en gang. 1359 01:04:01,780 --> 01:04:04,080 Vi gjorde faktisk ikke engang må initialisere det. 1360 01:04:04,080 --> 01:04:05,520 >> Det vil trolig se en bit renere hvis du ikke har satt 1361 01:04:05,520 --> 01:04:07,680 noe tilfeldig i det. 1362 01:04:07,680 --> 01:04:13,070 Poenget er, du trengte å lage noen plass til å lagre noe fra 1363 01:04:13,070 --> 01:04:15,530 fread og ta noe ut av fwrite. 1364 01:04:15,530 --> 01:04:18,400 Og at ting måtte være enten en lokal variable på stakken - du 1365 01:04:18,400 --> 01:04:19,890 kunne har malloc'd noen plass. 1366 01:04:19,890 --> 01:04:23,030 >> Slik at vi faktisk kunne ha skrevet malloc her, og 1367 01:04:23,030 --> 01:04:25,420 som ville ha fungert. 1368 01:04:25,420 --> 01:04:28,660 Og så ville vi ha vært lagring våre ting et sted på haugen. 1369 01:04:28,660 --> 01:04:31,940 Men dette er faktisk, sannsynligvis, den mest elegante løsningen. 1370 01:04:31,940 --> 01:04:34,490 Bare lage litt plass på stakken for disse tingene til å gå. 1371 01:04:34,490 --> 01:04:37,690 1372 01:04:37,690 --> 01:04:38,990 >> Jeg ville ha to andre kommentarer. 1373 01:04:38,990 --> 01:04:44,650 Hvis du var å ta igjen i dette, og deretter få scoret på dette, mine kommentarer 1374 01:04:44,650 --> 01:04:47,400 ville være som følger. 1375 01:04:47,400 --> 01:04:54,300 Disse en er her, til meg, se som magiske tall. 1376 01:04:54,300 --> 01:04:56,860 Dette 1, i form av fread, er fornuftig. 1377 01:04:56,860 --> 01:04:59,580 Det er flere ting å lese eller skrive. 1378 01:04:59,580 --> 01:05:03,740 >> Men dette her bør sannsynligvis være noe annet. 1379 01:05:03,740 --> 01:05:05,180 Så hva er en løsning? 1380 01:05:05,180 --> 01:05:06,545 >> STUDENT 65: Størrelse på byte. 1381 01:05:06,545 --> 01:05:10,100 1382 01:05:10,100 --> 01:05:11,080 >> JASON Hirschhorn: Sånn? 1383 01:05:11,080 --> 01:05:13,130 >> STUDENT 65: Størrelse på røye. 1384 01:05:13,130 --> 01:05:13,820 >> JASON Hirschhorn: Størrelse på røye. 1385 01:05:13,820 --> 01:05:15,290 Ja, er byte ikke en type. 1386 01:05:15,290 --> 01:05:16,320 Så størrelse på røye verk. 1387 01:05:16,320 --> 01:05:30,270 Vi kan ha, på toppen av vår kode, # definert som. 1388 01:05:30,270 --> 01:05:33,410 Heter noe BYTE og det er virkelig en røye. 1389 01:05:33,410 --> 01:05:37,675 Egentlig en enda bedre tilnærming kan ha vært dette - 1390 01:05:37,675 --> 01:05:39,391 UINT. 1391 01:05:39,391 --> 01:05:40,780 Noen som vet hva det er? 1392 01:05:40,780 --> 01:05:44,388 1393 01:05:44,388 --> 01:05:44,840 >> Unnskyld. 1394 01:05:44,840 --> 01:05:46,090 Jeg har det bakover. 1395 01:05:46,090 --> 01:05:51,620 1396 01:05:51,620 --> 01:05:52,200 Vent, nei. 1397 01:05:52,200 --> 01:05:53,450 Hvilken vei går den? 1398 01:05:53,450 --> 01:05:58,071 1399 01:05:58,071 --> 01:05:59,660 Noen som vet hva det er? 1400 01:05:59,660 --> 01:06:00,950 Yeah. 1401 01:06:00,950 --> 01:06:05,650 >> STUDENT 67: Ment for å hjelpe standardisere tvers av systemer ting som 1402 01:06:05,650 --> 01:06:08,760 har - som usignerte heltall som har 8 byte? 1403 01:06:08,760 --> 01:06:11,785 >> JASON Hirschhorn: Det er helt riktig. 1404 01:06:11,785 --> 01:06:14,310 På forskjellige maskiner, på størrelse med en char - 1405 01:06:14,310 --> 01:06:15,180 vanligvis ikke en røye. 1406 01:06:15,180 --> 01:06:16,100 Tegn er vanligvis én byte. 1407 01:06:16,100 --> 01:06:19,590 Men størrelsen på andre datatyper er forskjellige størrelser på en 32-bits maskin 1408 01:06:19,590 --> 01:06:21,370 versus en 64-bits maskin. 1409 01:06:21,370 --> 01:06:25,180 En uint8_t er alltid 8 bits - 1410 01:06:25,180 --> 01:06:27,210 alltid én byte. 1411 01:06:27,210 --> 01:06:29,580 >> Og jeg må ta med at standard int header-fil. 1412 01:06:29,580 --> 01:06:35,040 Så nå, dette ville sannsynligvis vært den beste måten å skrive denne koden. 1413 01:06:35,040 --> 01:06:40,160 1414 01:06:40,160 --> 01:06:41,450 Så jeg kvitt de magiske tall. 1415 01:06:41,450 --> 01:06:44,690 Og jeg har også en mer logisk skriver for buffer. 1416 01:06:44,690 --> 01:06:49,450 Det er ikke bare en røye, det er en byte, som er hva vi forventer at det skal være. 1417 01:06:49,450 --> 01:06:53,400 >> Og her oppe, har vi faktisk vært litt mer robust. 1418 01:06:53,400 --> 01:06:55,190 Vi kommer ikke kalle det en røye, som - 1419 01:06:55,190 --> 01:06:58,630 kanskje, hvem vet - kan være en annen størrelse på forskjellige maskiner. 1420 01:06:58,630 --> 01:07:02,025 Vi er faktisk sier dette er akkurat én byte, alltid, uansett hva. 1421 01:07:02,025 --> 01:07:05,810 Og hvis vi ser her, gjør vi cp. 1422 01:07:05,810 --> 01:07:08,340 Uh-oh. 1423 01:07:08,340 --> 01:07:09,590 Hva har skjedd? 1424 01:07:09,590 --> 01:07:14,470 1425 01:07:14,470 --> 01:07:16,170 >> STUDENT 68: Det kan bli slått. 1426 01:07:16,170 --> 01:07:17,880 >> JASON Hirschhorn: Hva? 1427 01:07:17,880 --> 01:07:19,130 >> STUDENT 69: Er det? 1428 01:07:19,130 --> 01:07:21,940 1429 01:07:21,940 --> 01:07:25,080 >> STUDENT 70: Du gjorde ikke definere det som en type. 1430 01:07:25,080 --> 01:07:28,684 >> STUDENT 71: Men det skal være definert i standarden. 1431 01:07:28,684 --> 01:07:29,934 >> STUDENT 72: Hva er det som skjer? 1432 01:07:29,934 --> 01:07:37,660 1433 01:07:37,660 --> 01:07:40,210 >> STUDENT 73: Bør definere være alle caps? 1434 01:07:40,210 --> 01:07:41,370 >> JASON Hirschhorn: Så det er ikke # define. 1435 01:07:41,370 --> 01:07:45,490 Egentlig, i dette tilfellet, er jeg kommer til å bruke typedef. 1436 01:07:45,490 --> 01:07:48,590 Fordi vi bruker det som en type på ett sted. 1437 01:07:48,590 --> 01:07:51,990 Så i dette tilfellet, vi faktisk ønsker å typedef som vi skriver ut en ny type 1438 01:07:51,990 --> 01:07:54,490 byte, og det er, i det vesentlige, av dette. 1439 01:07:54,490 --> 01:07:56,590 Det er litt annerledes enn # define. 1440 01:07:56,590 --> 01:08:02,740 >> Og nå, vår koden fungerer perfekt. 1441 01:08:02,740 --> 01:08:05,230 Så, igjen, # define tar noe, erstatter det overalt 1442 01:08:05,230 --> 01:08:06,780 med andre ting. 1443 01:08:06,780 --> 01:08:07,920 Det er bare en makro - 1444 01:08:07,920 --> 01:08:09,420 stenografi for å kvitte seg med magiske tall. 1445 01:08:09,420 --> 01:08:11,360 Men i dette tilfellet, fordi vi er bruker den som en type - 1446 01:08:11,360 --> 01:08:12,180 akkurat her - 1447 01:08:12,180 --> 01:08:19,880 for at det skal fungere, trenger vi å typedef uansett byte er. 1448 01:08:19,880 --> 01:08:21,840 >> Og vi definerer det her. 1449 01:08:21,840 --> 01:08:24,750 Det er ikke en struct, det er faktisk bare et usignert heltall. 1450 01:08:24,750 --> 01:08:27,680 Det er én byte lang. 1451 01:08:27,680 --> 01:08:31,910 Denne koden vil være tilgjengelig på nettet, og dere alle skal ha det akkurat nå. 1452 01:08:31,910 --> 01:08:33,830 >> Så vi har - 1453 01:08:33,830 --> 01:08:34,250 perfekt - 1454 01:08:34,250 --> 01:08:41,359 13 minutter igjen å gå løpet problem satt fem. 1455 01:08:41,359 --> 01:08:44,270 Jeg ønsker å gå gjennom copy.c sammen, og så skal vi snakke kort 1456 01:08:44,270 --> 01:08:47,120 om de andre deler av problemet definert. 1457 01:08:47,120 --> 01:08:48,899 Så la meg trekke opp copy.c. 1458 01:08:48,899 --> 01:09:03,930 1459 01:09:03,930 --> 01:09:08,810 Og det kule er, vi har faktisk allerede skrevet mye av denne koden. 1460 01:09:08,810 --> 01:09:11,180 >> Koden vi skrev bokstavelig talt bare kom ut av her da jeg var 1461 01:09:11,180 --> 01:09:13,120 skriver dette på min egen. 1462 01:09:13,120 --> 01:09:16,990 Men dette er copy.c, danner grunnlaget for de to første delene av 1463 01:09:16,990 --> 01:09:22,340 oppgavesettet for whodunit.c, som du trenger for å skrive, og resize.c. 1464 01:09:22,340 --> 01:09:27,050 Recover.c, som er den tredje og siste en del av problemet sett, ikke er 1465 01:09:27,050 --> 01:09:29,529 basert off av denne filen. 1466 01:09:29,529 --> 01:09:32,200 >> Du kommer til å trenge å skrive denne filen, Vi gir deg en mal for at 1467 01:09:32,200 --> 01:09:34,620 fil, men det har ingenting å gjøre med copy.c. 1468 01:09:34,620 --> 01:09:38,675 Men fordi copy.c er grunnlaget for de to første delene, vi skal 1469 01:09:38,675 --> 01:09:42,000 å gå gjennom det nå, så du har en god følelse av hva det gjør. 1470 01:09:42,000 --> 01:09:43,640 >> Og kommentarene gi noe av det bort. 1471 01:09:43,640 --> 01:09:45,120 Vi har allerede skrevet noe av dette. 1472 01:09:45,120 --> 01:09:49,220 Først gjør vi sikkert vi får tre argumenter. 1473 01:09:49,220 --> 01:09:50,560 Deretter skal vi huske filnavnet. 1474 01:09:50,560 --> 01:09:52,960 Så vi hoppet over dette trinnet når kodet vi våre ting - 1475 01:09:52,960 --> 01:09:54,700 når vår cp. 1476 01:09:54,700 --> 01:09:56,750 Men her, de gjør det litt renere. 1477 01:09:56,750 --> 01:09:59,350 >> De kontrollerer at begge filene er gode, i 1478 01:09:59,350 --> 01:10:00,450 tillegg til å åpne dem. 1479 01:10:00,450 --> 01:10:04,760 Vi skrev alt denne koden akkurat nå, så jeg er ikke kommer til å dvele ved denne koden. 1480 01:10:04,760 --> 01:10:09,670 Neste er noen ting som er spesifikke for filtypene vi bruker, som 1481 01:10:09,670 --> 01:10:12,240 er bitmap-filer. 1482 01:10:12,240 --> 01:10:15,660 Bitmap-filer har noen metadata forbundet med dem. 1483 01:10:15,660 --> 01:10:20,190 >> Så de første par bytes fortelle deg om filen. 1484 01:10:20,190 --> 01:10:23,460 De er ikke fargene på pikselen i det bildet. 1485 01:10:23,460 --> 01:10:25,120 De forteller deg om filen. 1486 01:10:25,120 --> 01:10:28,220 Og hvis du leser gjennom problemet sett, vil du ha mye mer informasjon 1487 01:10:28,220 --> 01:10:33,100 på hvilke typer metadata strukturer er inkludert med punktgrafikk. 1488 01:10:33,100 --> 01:10:39,350 >> Men det er derfor vi har dette først satt av - denne koden her. 1489 01:10:39,350 --> 01:10:42,490 Vi leser metadata - 1490 01:10:42,490 --> 01:10:45,800 to stykker av metadata - Filen overskriften og informasjonen header. 1491 01:10:45,800 --> 01:10:51,030 Og vi sjekker noen deler av det til sørge for at det er en sann bitmap fil 1492 01:10:51,030 --> 01:10:52,420 før du fortsetter. 1493 01:10:52,420 --> 01:10:55,470 >> Og igjen, dette er detaljer vi trenger ikke å gå inn nå. 1494 01:10:55,470 --> 01:10:57,720 Hvis du leser gjennom problemet sett, du vil forstå disse. 1495 01:10:57,720 --> 01:11:01,370 Lang historie kort, er disse bare si: dette er et bitmap-fil, og 1496 01:11:01,370 --> 01:11:02,810 som bekrefter at. 1497 01:11:02,810 --> 01:11:05,180 >> Neste, vi skriver dem til ut-filen. 1498 01:11:05,180 --> 01:11:05,660 Vi ser at her. 1499 01:11:05,660 --> 01:11:06,910 Vi skriver til ut pekeren. 1500 01:11:06,910 --> 01:11:09,260 1501 01:11:09,260 --> 01:11:11,320 Neste, vi bestemme padding. 1502 01:11:11,320 --> 01:11:15,240 Så igjen, er som PARTICULARITY med en bitmap fil, noen linjer inkluderer 1503 01:11:15,240 --> 01:11:16,840 padding på slutten. 1504 01:11:16,840 --> 01:11:19,000 Og hvis du leser gjennom problemet sett, du vil lære mer om padding. 1505 01:11:19,000 --> 01:11:22,330 Dette er formelen for å finne padding. 1506 01:11:22,330 --> 01:11:23,610 >> Viktig å huske - 1507 01:11:23,610 --> 01:11:29,720 når du endrer størrelsen på et bitmap fil, stopp endringer. 1508 01:11:29,720 --> 01:11:31,970 Når du endrer størrelsen på et fil, stopp endringer. 1509 01:11:31,970 --> 01:11:34,310 Det kommer aldri til å bli større enn 3 - 1510 01:11:34,310 --> 01:11:36,510 det vil være 0 gjennom tre, inkluderende. 1511 01:11:36,510 --> 01:11:38,930 Men når du endrer størrelsen på noe, stopp endringer. 1512 01:11:38,930 --> 01:11:47,100 >> Hvis jeg bare har ett piksel i den raden, jeg trenger tre byte med padding, fordi 1513 01:11:47,100 --> 01:11:51,190 hver rad må være multipler av fire byte i en bitmap fil. 1514 01:11:51,190 --> 01:11:56,120 Men hvis jeg doble det, å gå fra én piksel til to piksler, hvor hver av disse, 1515 01:11:56,120 --> 01:11:59,510 la oss si, er en byte, så jeg trenger to byte med padding å gjøre 1516 01:11:59,510 --> 01:12:00,970 som lik fire. 1517 01:12:00,970 --> 01:12:04,200 >> Så når jeg endrer størrelsen på noe, Jeg må endre beløpet 1518 01:12:04,200 --> 01:12:06,551 padding jeg har. 1519 01:12:06,551 --> 01:12:08,100 Betyr det fornuftig for alle? 1520 01:12:08,100 --> 01:12:12,020 1521 01:12:12,020 --> 01:12:18,720 Deretter iterere vi over hver rad, eller gjennom alle radene. 1522 01:12:18,720 --> 01:12:21,400 Og da vi reagere gjennom hver kolonne i hver rad. 1523 01:12:21,400 --> 01:12:25,330 Vi behandler dette bitmap som et rutenett, som vi har behandlet 1524 01:12:25,330 --> 01:12:26,490 styret i 15.. 1525 01:12:26,490 --> 01:12:29,200 >> Som vi behandlet mursteinene når vi trykket dem på skjermen. 1526 01:12:29,200 --> 01:12:31,350 Et rutenett med rader og kolonner. 1527 01:12:31,350 --> 01:12:32,350 Så - vi så dette. 1528 01:12:32,350 --> 01:12:33,840 Vi har faktisk bare kodet dette. 1529 01:12:33,840 --> 01:12:35,780 Vi skapte noen midlertidig lagring. 1530 01:12:35,780 --> 01:12:38,710 Vi leser i det, og deretter vi skrive det ut. 1531 01:12:38,710 --> 01:12:42,680 Dette er akkurat hva vi nettopp gjorde. 1532 01:12:42,680 --> 01:12:46,760 >> Neste, fordi jeg sa hver linje ender i noen padding, vi 1533 01:12:46,760 --> 01:12:48,260 hoppe over at padding - 1534 01:12:48,260 --> 01:12:51,000 den gamle padding. 1535 01:12:51,000 --> 01:12:52,630 Og så legger vi det tilbake. 1536 01:12:52,630 --> 01:12:55,140 I dette tilfellet, skaper vi nøyaktig samme fil. 1537 01:12:55,140 --> 01:12:56,180 Vi er bare å kopiere det. 1538 01:12:56,180 --> 01:12:57,700 Så denne linjen er litt dumt. 1539 01:12:57,700 --> 01:12:59,660 Vi kunne bokstavelig talt bare sette padding i. 1540 01:12:59,660 --> 01:13:04,290 >> Men hvis du endrer størrelsen på filen, har du fortsatt ønsker denne linjen? 1541 01:13:04,290 --> 01:13:08,510 1542 01:13:08,510 --> 01:13:11,560 Så hvis vi endre størrelsen på en fil, gjør vi fortsatt ønsker å hoppe over 1543 01:13:11,560 --> 01:13:12,810 over den gamle padding? 1544 01:13:12,810 --> 01:13:15,170 1545 01:13:15,170 --> 01:13:15,970 >> STUDENT 74: Ja. 1546 01:13:15,970 --> 01:13:17,090 >> JASON Hirschhorn: Så vi gjør. 1547 01:13:17,090 --> 01:13:19,290 Fordi dette, igjen, tilbud med kildefilen. 1548 01:13:19,290 --> 01:13:21,570 Vi bryr oss ikke om padding fra kildefilen. 1549 01:13:21,570 --> 01:13:23,410 Vi ønsker å gå til neste linje. 1550 01:13:23,410 --> 01:13:28,850 Men vi har ikke bare satt tilbake den gamle mengde polstring. 1551 01:13:28,850 --> 01:13:31,540 Vi trenger å sette tilbake ny mengde polstring. 1552 01:13:31,540 --> 01:13:35,810 >> Så når vi endrer størrelsen på et fil, vi ønsker fortsatt å hoppe over 1553 01:13:35,810 --> 01:13:38,270 padding i den gamle filen - hva vi leser i fra. 1554 01:13:38,270 --> 01:13:40,370 Men hva vi skriver til, skal vi til å trenge å sette tilbake noen annen 1555 01:13:40,370 --> 01:13:41,890 antall padding som vi har bestemt. 1556 01:13:41,890 --> 01:13:42,780 Yeah. 1557 01:13:42,780 --> 01:13:44,550 >> STUDENT 75: Rekkefølgen av disse to linjer spiller ingen rolle, ikke sant? 1558 01:13:44,550 --> 01:13:46,160 Fordi du håndterer forskjellige filer. 1559 01:13:46,160 --> 01:13:46,620 >> JASON Hirschhorn: Nettopp. 1560 01:13:46,620 --> 01:13:48,220 Rekkefølgen av disse to linjene spiller ingen rolle. 1561 01:13:48,220 --> 01:13:49,790 Vi skriver denne linjen. 1562 01:13:49,790 --> 01:13:51,430 Dette er her for filen vi skriver til. 1563 01:13:51,430 --> 01:13:54,370 Det er viktig, slik at vi får riktig mengde polstring. 1564 01:13:54,370 --> 01:13:57,560 Dette har å forholde seg til i filen. 1565 01:13:57,560 --> 01:13:58,560 Vi ønsker å hoppe rett over padding. 1566 01:13:58,560 --> 01:13:59,470 >> Vi ønsker ikke å lese - 1567 01:13:59,470 --> 01:14:01,500 hvis vi leser en byte om gangen, vi bryr seg ikke om de padding bytes. 1568 01:14:01,500 --> 01:14:04,070 Vi ønsker å flytte til neste linje. 1569 01:14:04,070 --> 01:14:11,800 Endelig akkurat som Lucy ga for oss, vi lukke filer og returnere 0. 1570 01:14:11,800 --> 01:14:13,890 Så dette er copy.c. 1571 01:14:13,890 --> 01:14:17,850 Og vi faktisk skrev - vi tilbrakte mesteparten av avsnitt skriver dette, egentlig. 1572 01:14:17,850 --> 01:14:18,740 >> Du har gjort dette. 1573 01:14:18,740 --> 01:14:22,440 Så forhåpentligvis du har en god følelse av hva som skjer her inne. 1574 01:14:22,440 --> 01:14:25,890 Den store forskjellen, ærlig, er bare denne første delen som omhandler 1575 01:14:25,890 --> 01:14:29,970 særegenheter bitmap-filer. 1576 01:14:29,970 --> 01:14:33,570 Så jeg har som mitt neste lysbilde, hva trenger vi å gjøre? 1577 01:14:33,570 --> 01:14:35,510 Vel, la oss tenke på whodunit. 1578 01:14:35,510 --> 01:14:38,080 >> Og for noen som leser gjennom oppgavesettet, hva gjør vi 1579 01:14:38,080 --> 01:14:41,410 trenger å gjøre i whodunit? 1580 01:14:41,410 --> 01:14:42,080 Rett og slett. 1581 01:14:42,080 --> 01:14:42,460 Aleja. 1582 01:14:42,460 --> 01:14:48,570 >> Aleja: Kan du ta ut den delen av hver piksel som betegner rødt. 1583 01:14:48,570 --> 01:14:49,730 Og så - 1584 01:14:49,730 --> 01:14:50,730 slags? 1585 01:14:50,730 --> 01:14:51,860 >> JASON Hirschhorn: OK. 1586 01:14:51,860 --> 01:14:54,460 Så ta ut den delen av hvert pixel som betegner rødt. 1587 01:14:54,460 --> 01:14:57,234 Det er tett, men ikke alle av det. 1588 01:14:57,234 --> 01:14:59,780 >> STUDENT 76: Vel, det er forskjellige måter å gjøre det. 1589 01:14:59,780 --> 01:14:59,870 >> JASON Hirschhorn: OK. 1590 01:14:59,870 --> 01:15:03,070 Gi meg én måte. 1591 01:15:03,070 --> 01:15:08,240 >> STUDENT 76: Ta ut alle de røde, og deretter understreke den blå og grønn. 1592 01:15:08,240 --> 01:15:10,010 >> JASON Hirschhorn: OK. 1593 01:15:10,010 --> 01:15:11,830 Så får begge disse måtene - 1594 01:15:11,830 --> 01:15:15,210 det høres ut som vi gi den en piksel, det har en rød, blå og grønn nivå. 1595 01:15:15,210 --> 01:15:19,350 Vi ønsker å endre den relative nivåer av de røde, blå og grønn, avhengig 1596 01:15:19,350 --> 01:15:20,740 på at pixel. 1597 01:15:20,740 --> 01:15:28,380 Hvor i denne koden skal vi endre den relative rød, blå og grønn 1598 01:15:28,380 --> 01:15:29,720 nivåer i et gitt bildepunkt. 1599 01:15:29,720 --> 01:15:30,600 Etter at vi har lest det - 1600 01:15:30,600 --> 01:15:32,520 før vi skriver det? 1601 01:15:32,520 --> 01:15:34,564 Gi meg den linjenummer. 1602 01:15:34,564 --> 01:15:35,950 >> FLERE STUDENTER: 83. 1603 01:15:35,950 --> 01:15:37,320 >> JASON Hirschhorn: 83. 1604 01:15:37,320 --> 01:15:38,570 Så akkurat her. 1605 01:15:38,570 --> 01:15:40,830 1606 01:15:40,830 --> 01:15:45,710 For whodunit, den koden du trenger for å write bør alle gå rett der. 1607 01:15:45,710 --> 01:15:47,640 Og det er den eneste kode du trenger å skrive. 1608 01:15:47,640 --> 01:15:51,520 Fordi, som vi har hørt, alt du trenger å gjøre er å endre disse relative blå, 1609 01:15:51,520 --> 01:15:54,420 røde og grønne nivåer fra hver piksel. 1610 01:15:54,420 --> 01:15:58,250 >> Du har lest det i, og nå er du kommer til å skrive det ut. 1611 01:15:58,250 --> 01:16:03,100 Hvordan får jeg - hvis jeg har denne tingen kalles trippel, akkurat her, og det er av 1612 01:16:03,100 --> 01:16:04,570 skriver RGBTRIPLE - 1613 01:16:04,570 --> 01:16:08,650 vel, hvis vi så i bmp.h, hva er RGBTRIPLE? 1614 01:16:08,650 --> 01:16:11,450 1615 01:16:11,450 --> 01:16:12,700 >> STUDENT 77: Det er en struct. 1616 01:16:12,700 --> 01:16:17,440 1617 01:16:17,440 --> 01:16:18,900 >> JASON Hirschhorn: RGBTRIPLE er en struct. 1618 01:16:18,900 --> 01:16:22,330 Vi ser at rett ned her. 1619 01:16:22,330 --> 01:16:26,600 Og så hvis jeg ønsket å få tilgang til, si, rødt nivå av struct, hvordan gjør jeg 1620 01:16:26,600 --> 01:16:30,005 tilgang til den røde nivået av denne strukturen? 1621 01:16:30,005 --> 01:16:37,280 >> [KLASSE Murmurs] 1622 01:16:37,280 --> 01:16:38,530 >> STUDENT 78: RGBTRIPLE.rgbtred? 1623 01:16:38,530 --> 01:16:47,250 1624 01:16:47,250 --> 01:16:48,856 >> JASON Hirschhorn: Er det riktig? 1625 01:16:48,856 --> 01:16:53,040 >> STUDENT 79: Det bør være trippel dot, i stedet for RGBTRIPLE dot? 1626 01:16:53,040 --> 01:16:54,120 >> JASON Hirschhorn: Triple. 1627 01:16:54,120 --> 01:16:56,700 Trippel er den lokale variable, så her, det er ingen pekere her. 1628 01:16:56,700 --> 01:16:58,400 Så vi bare bruke dot notasjon. 1629 01:16:58,400 --> 01:17:00,480 Dette vil gi me graden av rødt. 1630 01:17:00,480 --> 01:17:06,180 Hvis jeg ønsker å endre det, jeg bare satt det lik noe annet. 1631 01:17:06,180 --> 01:17:13,190 Så igjen, åpner denne linjen med kode denne variabelen inne i denne strukturen, og 1632 01:17:13,190 --> 01:17:15,070 vi kan sette den til noe nytt. 1633 01:17:15,070 --> 01:17:20,040 >> Så for whodunit, igjen, er dette, i hovedsak hva vi trenger å gjøre. 1634 01:17:20,040 --> 01:17:21,170 Veldig enkelt. 1635 01:17:21,170 --> 01:17:25,020 Bare endre noen relative nivåer, og det er her den koden går. 1636 01:17:25,020 --> 01:17:27,720 Endre størrelse, på den annen side, er litt mer komplisert. 1637 01:17:27,720 --> 01:17:30,900 Faktisk er skalerings sannsynligvis vanskeligste delen av dette problemet satt. 1638 01:17:30,900 --> 01:17:32,720 Vi har tre minutter å gå over det. 1639 01:17:32,720 --> 01:17:34,910 >> Men igjen, har vi allerede skrevet mesteparten av denne koden, så vi 1640 01:17:34,910 --> 01:17:36,500 bør være ganske kjent. 1641 01:17:36,500 --> 01:17:40,750 Hva er noen ting vi ønsker å gjøre i endre størrelse, hvis du har lest over 1642 01:17:40,750 --> 01:17:43,470 oppgavesettet? 1643 01:17:43,470 --> 01:17:45,290 Hvis du gir dem til meg, vi kan snakke om dem. 1644 01:17:45,290 --> 01:17:47,340 Hva er noen ting vi ønsker å gjøre? 1645 01:17:47,340 --> 01:17:47,970 >> STUDENT 80: Vertikalt - 1646 01:17:47,970 --> 01:17:52,360 så du må horisontalt endre størrelse på det, men vertikalt endre størrelse på det også? 1647 01:17:52,360 --> 01:17:58,475 >> JASON Hirschhorn: Så hvis vi får en pixel, og vi ønsker å endre størrelsen på det ved en 1648 01:17:58,475 --> 01:18:03,460 faktor på to, den nå trenger å være skaleres horisontalt og skaleres 1649 01:18:03,460 --> 01:18:05,220 vertikalt. 1650 01:18:05,220 --> 01:18:06,640 Betyr det fornuftig? 1651 01:18:06,640 --> 01:18:07,060 Yeah. 1652 01:18:07,060 --> 01:18:09,300 Så det er trolig den største utfordringen. 1653 01:18:09,300 --> 01:18:10,430 Og vi skal snakke om det i et sekund. 1654 01:18:10,430 --> 01:18:11,065 Yeah. 1655 01:18:11,065 --> 01:18:15,270 >> STUDENT 81: Måten jeg tenkte på det ble du trengte print den ut - 1656 01:18:15,270 --> 01:18:15,490 >> JASON Hirschhorn: Vent. 1657 01:18:15,490 --> 01:18:17,580 Ikke fortell oss hva du gjorde. 1658 01:18:17,580 --> 01:18:20,620 Vi kommer til å snakke i logikk. 1659 01:18:20,620 --> 01:18:21,870 >> STUDENT 81: OK. 1660 01:18:21,870 --> 01:18:25,090 1661 01:18:25,090 --> 01:18:27,410 Hva var spørsmålet? 1662 01:18:27,410 --> 01:18:28,892 >> JASON Hirschhorn: Du bare hevet hånden. 1663 01:18:28,892 --> 01:18:31,600 Det var ingen tvil. 1664 01:18:31,600 --> 01:18:32,520 La meg presentere det. 1665 01:18:32,520 --> 01:18:34,560 La meg bare diskutere dette kort. 1666 01:18:34,560 --> 01:18:38,400 Så vi har en piksel, vi ønsker å replikere den, både horisontalt og 1667 01:18:38,400 --> 01:18:39,360 vertikalt. 1668 01:18:39,360 --> 01:18:48,920 Så ideelt sett hva vi gjør her er, vi lese i vår pixel, skriver vi det 1669 01:18:48,920 --> 01:18:51,690 imidlertid mange ganger. 1670 01:18:51,690 --> 01:18:54,720 >> Men så har vi våre triks her, fordi så vi ønsker å hoppe til 1671 01:18:54,720 --> 01:18:57,660 neste linje og skrive det på begynnelsen av neste linje. 1672 01:18:57,660 --> 01:19:02,960 Så hvis vi ønsker å gjenskape både horisontalt og vertikalt, hva er 1673 01:19:02,960 --> 01:19:05,050 en god måte å gjøre det - 1674 01:19:05,050 --> 01:19:06,780 ett godt om å gjøre det? 1675 01:19:06,780 --> 01:19:11,950 Så vi trenger ikke å stadig søke rundt vår fil å plassere ting. 1676 01:19:11,950 --> 01:19:14,360 >> Det spørsmålet har kanskje ikke var fornuftig, men jeg tror en 1677 01:19:14,360 --> 01:19:15,800 svarer til det vil hjelpe. 1678 01:19:15,800 --> 01:19:17,210 >> STUDENT 82: Lag en array? 1679 01:19:17,210 --> 01:19:20,090 >> JASON Hirschhorn: Så la oss tenke av hver fil som en rad. 1680 01:19:20,090 --> 01:19:22,550 La oss tenke i form av rader. 1681 01:19:22,550 --> 01:19:26,670 Hvis vi har vår første rad fra vår lille bilde, kan vi gjøre for at rad 1682 01:19:26,670 --> 01:19:30,640 inn i en stor rekke av et stort bilde, og deretter gjenskape den raden imidlertid 1683 01:19:30,640 --> 01:19:34,250 mange ganger det er behov for å bli replikert, snarere enn å gå piksel for piksel, 1684 01:19:34,250 --> 01:19:37,260 som blir forvirrende når håndtere filer. 1685 01:19:37,260 --> 01:19:38,730 >> Fordi hvis vi hadde - 1686 01:19:38,730 --> 01:19:41,260 Jeg kjører tom for plass. 1687 01:19:41,260 --> 01:19:46,490 Hvis dette er vår fil, og vi har som én piksel der, og vi ønsker å sette det 1688 01:19:46,490 --> 01:19:49,840 rett der, vi har fortsatt noen ting at behovet for å gå dit når vi er 1689 01:19:49,840 --> 01:19:51,450 å skrive og lage vår nye fil - 1690 01:19:51,450 --> 01:19:53,250 vår fil som er dobbelt så stor. 1691 01:19:53,250 --> 01:19:56,820 >> Men det er veldig vanskelig med filfunksjoner å hoppe rundt til nye linjer 1692 01:19:56,820 --> 01:20:00,260 sånn, og så gå tilbake hit og sette ting i det. 1693 01:20:00,260 --> 01:20:04,500 Det er nesten umulig å gjøre noe sånn, hvis det er fornuftig. 1694 01:20:04,500 --> 01:20:10,180 Så hvis vi tenker i form av rader, kan vi ta vår rad, og deretter sette den - 1695 01:20:10,180 --> 01:20:11,720 replikere rader vertikalt. 1696 01:20:11,720 --> 01:20:15,860 >> Og det er hvordan vi håndterer resizing vertikalt i stedet for horisontalt. 1697 01:20:15,860 --> 01:20:18,810 Det var litt rask, og litt forvirrende. 1698 01:20:18,810 --> 01:20:22,375 Dessverre vår tid er ute. 1699 01:20:22,375 --> 01:20:27,340 Jeg vil stå utenfor for de av dere her som har spørsmål om 1700 01:20:27,340 --> 01:20:30,500 Oppgavesettet, inkludert gjenopprette. 1701 01:20:30,500 --> 01:20:32,320 >> Så la oss utsette for nå. 1702 01:20:32,320 --> 01:20:34,480 Og igjen, hvis du har noen spørsmål, vi kan prate utenfor. 1703 01:20:34,480 --> 01:20:38,294