1 00:00:00,000 --> 00:00:07,810 2 00:00:07,810 --> 00:00:09,840 >> JASON Hirschhorn: Välkommen, alla, till vecka 6. 3 00:00:09,840 --> 00:00:14,790 Jag är glad att se er alla lever och mår bra efter Quiz 0, för jag vet att 4 00:00:14,790 --> 00:00:15,810 var lite grov. 5 00:00:15,810 --> 00:00:18,370 Men tack och lov, ni alla gjorde otroligt bra. 6 00:00:18,370 --> 00:00:21,680 Och så det är underbart. 7 00:00:21,680 --> 00:00:25,840 Om du är i min avdelning, har jag gett mest om du säkerhets redan dina frågesporter. 8 00:00:25,840 --> 00:00:28,050 >> Ett par av er, jag träffa efter lektionen. 9 00:00:28,050 --> 00:00:32,360 Och om du är en förlängning student och du inte har fått din frågesport tillbaka 10 00:00:32,360 --> 00:00:35,490 Ännu är din TF förmodligen jobbar på det och examination det, och kommer att få tillbaka 11 00:00:35,490 --> 00:00:36,490 till dig inom kort. 12 00:00:36,490 --> 00:00:39,650 Så mina förlängnings studenter som är tittar just nu - förhoppningsvis leva - 13 00:00:39,650 --> 00:00:42,880 Jag kommer att få dina frågesporter inom kort också. 14 00:00:42,880 --> 00:00:45,670 >> Vår agenda för idag är följande. 15 00:00:45,670 --> 00:00:50,170 Först kommer vi att gå igenom några resurser som CS50 ger till dig. 16 00:00:50,170 --> 00:00:54,590 Vi kommer att gå över Quiz 0 nästa, och Jag ska svara på alla frågor någon 17 00:00:54,590 --> 00:00:57,360 har om särskilda problem. 18 00:00:57,360 --> 00:01:02,050 Och då kommer vi att gå över fil-I / O och problem set 5. 19 00:01:02,050 --> 00:01:07,360 De sista två ämnen kommer att ta upp den största delen av avsnittet idag. 20 00:01:07,360 --> 00:01:11,680 >> Jag sätter denna lista upp varje vecka som en påminnelse till er alla, men av kärnan 21 00:01:11,680 --> 00:01:14,650 avsnitt, vi har bara 90 minuter - vi inte kan täcka allt som jag 22 00:01:14,650 --> 00:01:16,280 skulle älska att täcka för er. 23 00:01:16,280 --> 00:01:21,170 Men vi har massor av resurser för dig att dra på som du lär känna 24 00:01:21,170 --> 00:01:24,000 materialet och arbetet genom ditt problem sätter. 25 00:01:24,000 --> 00:01:30,810 >> En påminnelse om att jag har nätet en text box, ställa upp för dig att fylla i om du 26 00:01:30,810 --> 00:01:33,250 har synpunkter för mig, både positiva och 27 00:01:33,250 --> 00:01:35,180 konstruktiv, om avsnitt. 28 00:01:35,180 --> 00:01:38,600 Den webbadress ligger här ända ner. 29 00:01:38,600 --> 00:01:43,250 Så snälla, ta en stund om du har någon feedback, vare sig under avsnitt, 30 00:01:43,250 --> 00:01:48,030 eller efter, eller efter att du titta på videon på nätet, för att ge mig din återkoppling. 31 00:01:48,030 --> 00:01:52,100 Jag uppskattar verkligen alla och allt. 32 00:01:52,100 --> 00:01:55,730 >> Så jag har haft små konversationer med en hel del av min 33 00:01:55,730 --> 00:01:59,350 eleverna under hela veckan - som jag lämnar ryggfrågesporter, talar om 34 00:01:59,350 --> 00:02:01,480 naturligtvis, att se hur du gör. 35 00:02:01,480 --> 00:02:05,120 Och ett tema har kommit över och över att tala om - i 36 00:02:05,120 --> 00:02:05,660 särskilt - 37 00:02:05,660 --> 00:02:07,710 Problemet ställer. 38 00:02:07,710 --> 00:02:13,090 Och jag har inkapslade det temat på bordet just nu. 39 00:02:13,090 --> 00:02:16,630 >> I huvudsak finns det en skillnad mellan att slå in något som är 40 00:02:16,630 --> 00:02:19,590 görs på rätt sätt och något det är gjort bra. 41 00:02:19,590 --> 00:02:22,920 De flesta människor har gjort fantastiska i fråga om korrekthet - 42 00:02:22,920 --> 00:02:25,460 5 s eller 4 s på alla psets. 43 00:02:25,460 --> 00:02:27,930 De flesta människor blir dem hela tiden. 44 00:02:27,930 --> 00:02:31,150 >> Men bara för att du har gjort något rätt betyder inte att du har 45 00:02:31,150 --> 00:02:34,450 gjort något så elegant, eller effektivt, eller så rent som du 46 00:02:34,450 --> 00:02:35,270 kunde ha gjort det. 47 00:02:35,270 --> 00:02:36,790 Och det är vad designen - 48 00:02:36,790 --> 00:02:39,230 och i mindre grad, stil - 49 00:02:39,230 --> 00:02:40,450 axlar är för. 50 00:02:40,450 --> 00:02:45,130 Så jag skjuta er alla, och andra TF driver ni, att inte bara tur 51 00:02:45,130 --> 00:02:48,320 i saker som är rätt, men vänder på de saker som är kodade väl. 52 00:02:48,320 --> 00:02:53,060 >> Att inte göra onödiga FÖR loopar, inte räkna om variabler Om 53 00:02:53,060 --> 00:02:53,800 du behöver inte. 54 00:02:53,800 --> 00:02:58,520 Till exempel, ser tillbaka till problembild 4, när du placerar blocken på 55 00:02:58,520 --> 00:03:03,070 skärm, varje varv - varje tegelsten i en given rad har samma y-koordinat - 56 00:03:03,070 --> 00:03:04,390 samma höjd-koordinaten. 57 00:03:04,390 --> 00:03:07,930 >> Så att y-koordinaten inte behövde beräknas i det inre 58 00:03:07,930 --> 00:03:11,070 kapslade FOR loop som du troligen använt att sätta dessa tegelstenar på skärmen. 59 00:03:11,070 --> 00:03:14,030 Det behöver bara beräknas varje gången du slog en rad, eller 60 00:03:14,030 --> 00:03:15,200 flyttas ned en rad. 61 00:03:15,200 --> 00:03:19,760 Så att säga, om det finns 10 tegelstenar i en rad, kan varje tegelsten ha samma 62 00:03:19,760 --> 00:03:22,260 y-koordinat, och att y-koordinat kan bara beräknas 63 00:03:22,260 --> 00:03:23,550 en gång för alla av dem. 64 00:03:23,550 --> 00:03:27,810 >> Det behöver inte beräknas 10 gånger, inte heller denna beräkning behöver 65 00:03:27,810 --> 00:03:30,220 att hända i den färdiga funktionsanrop - 66 00:03:30,220 --> 00:03:33,020 den nya gracked samtalsfunktionen. 67 00:03:33,020 --> 00:03:37,820 Så om det var lite förvirrande för dig, mer allmänt, det som 68 00:03:37,820 --> 00:03:40,730 behöver inte ske varje gång du går igenom en FOR loop ska inte vara 69 00:03:40,730 --> 00:03:42,900 läggs innanför FOR loop, och bör inte händer varje gång du går 70 00:03:42,900 --> 00:03:44,080 genom FOR loop. 71 00:03:44,080 --> 00:03:49,270 >> Ett annat bra design exempel såg vi i vecka 3 för 15, skulle du kunna hålla 72 00:03:49,270 --> 00:03:50,500 spåret av noll. 73 00:03:50,500 --> 00:03:53,600 Så när du initierar styrelsen, du spara - i en global variabel, kanske - 74 00:03:53,600 --> 00:03:56,140 x-och y-koordinat för noll. 75 00:03:56,140 --> 00:03:57,520 Och sedan när du - 76 00:03:57,520 --> 00:04:00,310 i ditt drag funktion, när du gör ett lyckat drag, uppdatera dig på 77 00:04:00,310 --> 00:04:02,040 Placeringen av noll. 78 00:04:02,040 --> 00:04:06,240 >> Det skulle rädda dig från att behöva göra kapslade FÖR loopar att titta igenom 79 00:04:06,240 --> 00:04:10,700 ombord varje gång i ditt drag funktion och hitta noll, eller hitta kakel, 80 00:04:10,700 --> 00:04:12,460 och sedan kontrollera vad som händer med det. 81 00:04:12,460 --> 00:04:16,329 Istället har du platsen för noll, kan du bara se över, under, 82 00:04:16,329 --> 00:04:21,160 och till vänster och höger om det, för att hitta kakel du letade efter. 83 00:04:21,160 --> 00:04:24,970 >> Så när det gäller de program som vi är skriva, de är aldrig tillräckligt stor 84 00:04:24,970 --> 00:04:28,580 att vissa av dessa designbeslut verkligen kommer att hindra din 85 00:04:28,580 --> 00:04:31,670 program, eller göra det köras långsammare, eller kanske till och med slut på minne. 86 00:04:31,670 --> 00:04:35,030 Men vi är fortfarande driver er att skriva så elegant och 87 00:04:35,030 --> 00:04:36,450 effektiv kod som möjligt. 88 00:04:36,450 --> 00:04:39,910 >> Så om du sluta skriva saker som har en betydligt större 89 00:04:39,910 --> 00:04:44,660 omfattning, kommer de att skrivas med god utforma förutom att vara korrekt. 90 00:04:44,660 --> 00:04:46,300 Så många av er har förde det ut. 91 00:04:46,300 --> 00:04:48,560 Det är något som vi är ute efter - något som vi kommer att fortsätta att 92 00:04:48,560 --> 00:04:49,840 pressa er på. 93 00:04:49,840 --> 00:04:52,460 >> Om du någonsin har några frågor om den utformningen av ditt program, välkommen 94 00:04:52,460 --> 00:04:56,870 att nå ut till mig, och jag är glad att gå igenom ditt program med dig, 95 00:04:56,870 --> 00:05:01,320 och peka på några av konstruktionen beslut som du gjort, och ger dig några 96 00:05:01,320 --> 00:05:06,240 förslag på hur man gör med bättre designbeslut. 97 00:05:06,240 --> 00:05:08,870 >> Så vi kommer att gå vidare att prata om Quiz 0. 98 00:05:08,870 --> 00:05:11,300 Innan vi gör det, gör någon har några frågor om vad 99 00:05:11,300 --> 00:05:14,252 Jag har täckt hittills? 100 00:05:14,252 --> 00:05:21,500 >> [Prasslande NOISE] 101 00:05:21,500 --> 00:05:22,750 >> JASON Hirschhorn: Sju sekunder. 102 00:05:22,750 --> 00:05:23,250 OK. 103 00:05:23,250 --> 00:05:24,970 Låt oss tala om Quiz 0 för lite. 104 00:05:24,970 --> 00:05:26,700 De flesta av er har din Quiz 0 rygg. 105 00:05:26,700 --> 00:05:29,820 Om du inte gör det, förhoppningsvis du kommer ihåg det lite. 106 00:05:29,820 --> 00:05:34,770 Men om du har tagit Quiz 0, då du också ha tillgång till PDF-nätet i 107 00:05:34,770 --> 00:05:35,890 provlösning. 108 00:05:35,890 --> 00:05:39,480 >> Är det någon som har några frågor innan Vi hoppar in i veckans material om 109 00:05:39,480 --> 00:05:41,520 ett särskilt problem på Quiz 0 - 110 00:05:41,520 --> 00:05:44,630 varför svaret är vad det är? 111 00:05:44,630 --> 00:05:47,255 Är det någon förvirrad om vad som helst? 112 00:05:47,255 --> 00:05:50,230 Även om du fick problemet rätt, men bara vill att jag ska förklara det lite 113 00:05:50,230 --> 00:05:52,640 mer, jag är glad att göra det nu. 114 00:05:52,640 --> 00:05:57,800 >> Så jag har bett er att komma förberedda med några 115 00:05:57,800 --> 00:05:59,440 tankar om Quiz 0. 116 00:05:59,440 --> 00:06:02,660 Så vem skulle vilja få oss började med en fråga eller 117 00:06:02,660 --> 00:06:04,655 kommentera om Quiz 0? 118 00:06:04,655 --> 00:06:07,435 119 00:06:07,435 --> 00:06:10,410 >> [PAPER PRASSEL] 120 00:06:10,410 --> 00:06:11,470 >> JASON Hirschhorn: Inte alla gjorde perfekt. 121 00:06:11,470 --> 00:06:12,720 Så jag vet [skratt] 122 00:06:12,720 --> 00:06:15,950 måste det finnas några frågor 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 Vilken 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: Jag Har inte - 132 00:06:36,420 --> 00:06:37,670 >> OMPICA: Den omfattar - 133 00:06:37,670 --> 00:06:40,060 134 00:06:40,060 --> 00:06:42,180 >> JASON Hirschhorn: Number 10 var åtta till i - att skriva åtta till jag? 135 00:06:42,180 --> 00:06:42,980 >> OMPICA: Ja. 136 00:06:42,980 --> 00:06:43,630 >> JASON Hirschhorn: OK. 137 00:06:43,630 --> 00:06:47,390 Så en annan fråga som du kan ha frågade var jag förutseende? 138 00:06:47,390 --> 00:06:48,630 Svaret är ja. 139 00:06:48,630 --> 00:06:52,060 I avsnitt innan testet, frågade jag ni att koda både Sterling och 140 00:06:52,060 --> 00:06:52,980 åtta till i.. 141 00:06:52,980 --> 00:06:54,770 Båda råkade visas på frågesport. 142 00:06:54,770 --> 00:06:57,510 Så förhoppningsvis, du betalat uppmärksamhet på det. 143 00:06:57,510 --> 00:07:02,520 >> Och om du hade, då du skulle ha förmodligen gjort väl på dessa två. 144 00:07:02,520 --> 00:07:06,030 Men åtta till mig, det gjorde vi faktiskt inte koden det i klassen, men det var, återigen, 145 00:07:06,030 --> 00:07:07,500 frågade på frågesport. 146 00:07:07,500 --> 00:07:13,270 Så ett par saker att ta notera när kodning åtta till i.. 147 00:07:13,270 --> 00:07:17,320 Det första, per den frågan, var att du behövs för att kontrollera om strängen 148 00:07:17,320 --> 00:07:20,300 var lika med noll. 149 00:07:20,300 --> 00:07:28,060 >> Ett par personer försökte kolla senare i programmet, om s fäste jag var - 150 00:07:28,060 --> 00:07:30,940 så ett visst tecken i det sträng - var lika med noll. 151 00:07:30,940 --> 00:07:35,600 Men kom ihåg, att null är väsentligt - det är bra att tänka på 152 00:07:35,600 --> 00:07:39,100 null som ett noll pekare - en pekare till noll - 153 00:07:39,100 --> 00:07:40,920 någonstans i minnet där du kan aldrig komma åt. 154 00:07:40,920 --> 00:07:44,730 >> Så om något är lika med noll, du vet att det inte har initierats, 155 00:07:44,730 --> 00:07:46,430 eller det finns inget där. 156 00:07:46,430 --> 00:07:50,950 Så s är en röding stjärna, s fäste i är en röding. 157 00:07:50,950 --> 00:07:57,410 Så det är klokt att jämföra s till null, men inte s fäste jag på null. 158 00:07:57,410 --> 00:07:59,390 Men återigen - så det var det första att du skulle göra - 159 00:07:59,390 --> 00:08:03,510 kontrollerar du att du faktiskt fick en riktig sträng. 160 00:08:03,510 --> 00:08:08,020 >> Därefter ville att du skulle gå igenom varje tecken i strängen. 161 00:08:08,020 --> 00:08:12,500 Och så det skulle vara som ett s fäste i, till exempel, om i är din iterator. 162 00:08:12,500 --> 00:08:17,250 Och ta det tecknet, och få sitt verkliga värde. 163 00:08:17,250 --> 00:08:21,800 Du har det lagras som en röding, men ASCII-värdet för noll - 164 00:08:21,800 --> 00:08:23,010 noll som en karaktär - 165 00:08:23,010 --> 00:08:25,450 är faktiskt inte heltalet noll. 166 00:08:25,450 --> 00:08:28,700 Det är något annat nummer som du kan slå upp i ASCII-tabellen. 167 00:08:28,700 --> 00:08:30,790 >> Så ett sätt att rätta till det - förmodligen det bästa sättet för att korrigera för 168 00:08:30,790 --> 00:08:33,760 som - är subtrahera från det teckenvärdet - 169 00:08:33,760 --> 00:08:35,140 noll som ett tecken. 170 00:08:35,140 --> 00:08:38,490 Så minus enda anbud, nolla, annan enda anbud. 171 00:08:38,490 --> 00:08:44,620 Det kommer att vidta de nummer du har som en röding, och få det lika med 172 00:08:44,620 --> 00:08:46,720 numret som en faktisk heltal. 173 00:08:46,720 --> 00:08:50,300 >> Och det är mycket lik den metod en massa människor tog i 174 00:08:50,300 --> 00:08:52,800 Problemet set 2, med Caesar och Viginere - 175 00:08:52,800 --> 00:08:55,160 dessa chiffer, när du var rotera dem. 176 00:08:55,160 --> 00:08:59,210 Så efter att du har det som ett tal från noll till nio, sedan - beroende på 177 00:08:59,210 --> 00:09:02,750 där det går i den slutliga antalet - du behöver för att multiplicera den 178 00:09:02,750 --> 00:09:04,120 med en kraft av 10. 179 00:09:04,120 --> 00:09:07,340 >> Vissa människor flyttade från baksidan till front, och multiplicerat den enskilde 180 00:09:07,340 --> 00:09:08,940 nummer genom en effekt på 10. 181 00:09:08,940 --> 00:09:11,160 Vissa människor flyttade från den framifrån och bakåt - 182 00:09:11,160 --> 00:09:14,430 och så tog den högsta beställa siffror först - 183 00:09:14,430 --> 00:09:18,190 och skulle spara dem i en global räknevariabeln. 184 00:09:18,190 --> 00:09:20,880 Och sedan varje gång genom FOR slinga, multiplicera det jätte globala 185 00:09:20,880 --> 00:09:25,640 motverka variabel genom 10, för att göra utrymme för nästa tecken. 186 00:09:25,640 --> 00:09:28,750 >> Så det var lite förvirrande utan mig att skriva det på tavlan. 187 00:09:28,750 --> 00:09:31,550 Men provlösningen är tillgänglig för dig. 188 00:09:31,550 --> 00:09:32,870 Men de var de stora sakerna vi sökte. 189 00:09:32,870 --> 00:09:36,400 Även en kontroll för att se till att varje särprägel var verkligen en 190 00:09:36,400 --> 00:09:39,780 karaktär mellan noll och nio, och inte något annat tecken, som en A, 191 00:09:39,780 --> 00:09:41,160 till exempel. 192 00:09:41,160 --> 00:09:43,150 >> Det var det vi var ute för i den frågan. 193 00:09:43,150 --> 00:09:46,510 194 00:09:46,510 --> 00:09:47,980 Besvarar det din fråga? 195 00:09:47,980 --> 00:09:49,320 >> OMPICA: Ja. 196 00:09:49,320 --> 00:09:50,240 >> JASON Hirschhorn: OK. 197 00:09:50,240 --> 00:09:53,940 Finns det några andra frågor om Quiz 0? 198 00:09:53,940 --> 00:09:55,440 Hur är det att sammanställa? 199 00:09:55,440 --> 00:09:56,740 Alla sammanställa rätt? 200 00:09:56,740 --> 00:09:58,370 Nej. 201 00:09:58,370 --> 00:09:58,840 Det fanns en - 202 00:09:58,840 --> 00:10:01,010 [Skratt] 203 00:10:01,010 --> 00:10:03,265 Eventuella frågor om sammanställning process? 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 >> [PAPER PRASSEL] 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: Är nummer 7 - random? 210 00:10:14,140 --> 00:10:16,500 >> JASON Hirschhorn: Number 7. 211 00:10:16,500 --> 00:10:20,670 Nummer 7 var få ett slumpmässigt heltal. 212 00:10:20,670 --> 00:10:21,110 Utmärkt. 213 00:10:21,110 --> 00:10:25,630 Så du gett ett heltal a och en heltal b, och du vill ha en slumpmässig 214 00:10:25,630 --> 00:10:28,710 heltal mellan a och b.. 215 00:10:28,710 --> 00:10:31,740 Vi kan faktiskt skriva en på styrelsen, eftersom detta 216 00:10:31,740 --> 00:10:33,320 var en rad kod - 217 00:10:33,320 --> 00:10:34,390 ett sätt att göra det. 218 00:10:34,390 --> 00:10:37,810 >> Så vi gett drand som en funktion som vi skulle kunna använda. 219 00:10:37,810 --> 00:10:38,820 Och vad betyder drand - 220 00:10:38,820 --> 00:10:40,290 förutsatt att det har varit seedad - 221 00:10:40,290 --> 00:10:42,316 vad drand tillbaka? 222 00:10:42,316 --> 00:10:44,840 >> MICHAEL: En flottör mellan 0,0 och 1,0. 223 00:10:44,840 --> 00:10:45,530 >> JASON Hirschhorn: Ett nummer - ja. 224 00:10:45,530 --> 00:10:47,910 Ett tal mellan 0 och 1. 225 00:10:47,910 --> 00:10:51,760 Och så vi har b och en. 226 00:10:51,760 --> 00:10:55,480 Och sedan har vi vår slump mellan 0 och 1 ges till oss av drand. 227 00:10:55,480 --> 00:11:01,480 228 00:11:01,480 --> 00:11:06,630 Vissa människor försökte sätta b, eller b minus a, eller något inom de 229 00:11:06,630 --> 00:11:07,960 parentes. 230 00:11:07,960 --> 00:11:11,210 Det skulle betyda att de är argument till denna funktion. 231 00:11:11,210 --> 00:11:13,450 >> drand tar inga argument - liknande getString gör 232 00:11:13,450 --> 00:11:14,330 inte tar några argument. 233 00:11:14,330 --> 00:11:16,600 Så det är bara öppna föräldra, nära Paren - och att det, i sig, är 234 00:11:16,600 --> 00:11:17,330 funktionsanropet. 235 00:11:17,330 --> 00:11:19,770 Och det ger dig ett nummer mellan 0 och 1. 236 00:11:19,770 --> 00:11:22,820 Naturligtvis har vi en hel rad att siffrorna kan vara i. 237 00:11:22,820 --> 00:11:28,470 >> Säg, om b är 10 och en är 5, vi verkligen intresserad av ett tal med ett intervall av 5. 238 00:11:28,470 --> 00:11:36,940 Så nästa sak vi behöver göra är multiplicera med intervallet b minus en. 239 00:11:36,940 --> 00:11:40,380 Så antar att är multipliceras. 240 00:11:40,380 --> 00:11:42,590 Och det kommer att ge oss ett nummer inom ett givet intervall. 241 00:11:42,590 --> 00:11:46,610 Och det specifikt område är den skillnaden mellan b minus en. 242 00:11:46,610 --> 00:11:50,030 >> Och slutligen, kommer att bara ge den från - säga området mellan b minus en 243 00:11:50,030 --> 00:11:52,520 är 5, som ska ge oss en nummer 0-5. 244 00:11:52,520 --> 00:11:56,000 Men om en är i själva verket 5, måste vi öka detta intervall upp till där det är 245 00:11:56,000 --> 00:12:01,380 faktiskt tänkt att vara, genom att lägga till en. 246 00:12:01,380 --> 00:12:02,580 Så det blir logiken höger. 247 00:12:02,580 --> 00:12:03,745 Och då skulle du ha en annan fråga? 248 00:12:03,745 --> 00:12:04,547 >> MICHAEL: Nej. 249 00:12:04,547 --> 00:12:06,010 Jag känner mig riktigt dum just nu. 250 00:12:06,010 --> 00:12:06,405 [Skratt] 251 00:12:06,405 --> 00:12:06,730 >> JASON Hirschhorn: Nej. 252 00:12:06,730 --> 00:12:08,640 Känn dig inte riktigt dum. 253 00:12:08,640 --> 00:12:10,560 Ett antal personer kämpade med denna fråga. 254 00:12:10,560 --> 00:12:13,920 Och sedan, är den andra frågan, drand, du sa, ger dig en flottör - 255 00:12:13,920 --> 00:12:14,940 returnerar en float. 256 00:12:14,940 --> 00:12:18,020 Men denna funktion faktiskt frågade för ett heltal som skall returneras. 257 00:12:18,020 --> 00:12:23,700 >> Du behöver inte kasta detta uttryckligen till ett heltal, eftersom dessa 258 00:12:23,700 --> 00:12:29,090 verksamheten kommer att behandla det som allt en flyta - som ett flyttal. 259 00:12:29,090 --> 00:12:31,570 Gillar du vilja - även om detta är ett heltal, kommer detta 260 00:12:31,570 --> 00:12:32,890 multipliceras fullständigt. 261 00:12:32,890 --> 00:12:34,000 Allt multiplikation fungerar. 262 00:12:34,000 --> 00:12:35,060 Du behöver inte kasta det här. 263 00:12:35,060 --> 00:12:36,480 I själva verket bör du inte kasta den. 264 00:12:36,480 --> 00:12:37,310 >> Det skulle - 265 00:12:37,310 --> 00:12:40,750 om du skulle kasta ett nummer det är mellan 0 och 1 - 266 00:12:40,750 --> 00:12:42,680 ett slumptal, ett flyttal - 267 00:12:42,680 --> 00:12:47,850 då det kommer att antingen vara enbart 0 eller 1, så du förlorar allt detta precision. 268 00:12:47,850 --> 00:12:50,120 Men i slutet, när du kommer tillbaka, det blir automatiskt 269 00:12:50,120 --> 00:12:51,620 skickas tillbaka som ett heltal. 270 00:12:51,620 --> 00:12:56,870 Så du behöver inte göra att gjuta själv. 271 00:12:56,870 --> 00:13:00,810 >> Så detta var svaret på den frågan, nummer 7. 272 00:13:00,810 --> 00:13:02,190 Alla andra frågor 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 vi använder rekursiv - 275 00:13:05,050 --> 00:13:07,850 När vi använder iterativa loopar? 276 00:13:07,850 --> 00:13:10,210 >> JASON Hirschhorn: När ni använder rekursiv - så mer allmänt, 277 00:13:10,210 --> 00:13:14,110 och nackdelar av rekursion kontra en iterativ metod. 278 00:13:14,110 --> 00:13:17,110 Kan någon ge ett proffs eller en kon? 279 00:13:17,110 --> 00:13:19,460 Snälla? 280 00:13:19,460 --> 00:13:20,140 Inte kan någon. 281 00:13:20,140 --> 00:13:22,526 Vem kan erbjuda ett proffs eller en kon? 282 00:13:22,526 --> 00:13:26,963 >> [PAPER PRASSEL] 283 00:13:26,963 --> 00:13:29,730 >> STUDENT 1: Rekursivt är mindre kodning - mindre skriva? 284 00:13:29,730 --> 00:13:33,170 >> JASON Hirschhorn: Så i allmänhet, rekursion speciellt, en funktion - 285 00:13:33,170 --> 00:13:35,750 eller en algoritm som merge sort - som lämpar sig 286 00:13:35,750 --> 00:13:37,300 till en rekursiv metod - 287 00:13:37,300 --> 00:13:40,710 skulle kunna vara enklare att koda rekursivt. 288 00:13:40,710 --> 00:13:43,940 Och bara vettigare att göra det rekursivt. 289 00:13:43,940 --> 00:13:46,230 Så det skulle vara ett proffs för att rekursion. 290 00:13:46,230 --> 00:13:46,610 Andra? 291 00:13:46,610 --> 00:13:47,467 Yeah? 292 00:13:47,467 --> 00:13:49,240 >> STUDENT 2: Con till rekursion - 293 00:13:49,240 --> 00:13:50,940 Den använder mer minne. 294 00:13:50,940 --> 00:13:52,200 >> JASON Hirschhorn: Så exakt rätt. 295 00:13:52,200 --> 00:13:55,720 En rekursiv funktion kommer att fortsätta att lägga till stack ramar till stacken. 296 00:13:55,720 --> 00:13:59,690 Så om du arbetar på en hel del siffror, och måste ringa detta 297 00:13:59,690 --> 00:14:02,560 fungera en hel del, då du kommer säkert tar upp mer minne, medan 298 00:14:02,560 --> 00:14:05,810 en iterativ metod kommer bara parkera ett stapla ram på stacken, eftersom 299 00:14:05,810 --> 00:14:08,420 allt händer inom en funktion. 300 00:14:08,420 --> 00:14:11,010 >> Alla andra för-och nackdelar? 301 00:14:11,010 --> 00:14:11,500 Yeah. 302 00:14:11,500 --> 00:14:12,550 >> STUDENT 3: Fördelar för rekursion. 303 00:14:12,550 --> 00:14:15,950 Du behöver inte bestämma i avancera hur många gånger 304 00:14:15,950 --> 00:14:17,660 koden måste upprepas. 305 00:14:17,660 --> 00:14:22,810 Du kan ha ett förutbestämt antal tider som du måste iterera, då 306 00:14:22,810 --> 00:14:26,420 rekursion är bättre, eftersom det tar det resultatet. 307 00:14:26,420 --> 00:14:27,780 >> JASON Hirschhorn: Jag tror det är sant. 308 00:14:27,780 --> 00:14:30,770 Men jag tror att i båda fallen du skulle aldrig - 309 00:14:30,770 --> 00:14:33,290 skulle du förmodligen få lite inmatning från användaren. 310 00:14:33,290 --> 00:14:35,990 Eller denna funktion skulle ha lite input som skulle avgöra hur många gånger det 311 00:14:35,990 --> 00:14:36,730 ska köras. 312 00:14:36,730 --> 00:14:39,520 Så i allmänhet, skulle du inte svårt kod - även i en iterativ metod - hur 313 00:14:39,520 --> 00:14:40,940 många gånger att slingan ska köras. 314 00:14:40,940 --> 00:14:46,100 315 00:14:46,100 --> 00:14:48,670 >> Hade du en annan du var tänker på, Annie? 316 00:14:48,670 --> 00:14:49,330 OK. 317 00:14:49,330 --> 00:14:51,650 Så de är förmodligen de två - 318 00:14:51,650 --> 00:14:54,370 den största pro och den största con till en rekursiv kontra 319 00:14:54,370 --> 00:14:57,080 en iterativ metod. 320 00:14:57,080 --> 00:14:57,690 OK. 321 00:14:57,690 --> 00:14:59,465 Något annat på Quiz 0? 322 00:14:59,465 --> 00:15:08,940 323 00:15:08,940 --> 00:15:09,920 >> Låt oss gå vidare. 324 00:15:09,920 --> 00:15:15,260 File I / O. Det är ett underbart kort denna vecka på fil-I / O som förhoppningsvis 325 00:15:15,260 --> 00:15:19,270 du har sett flera gånger, och beundrad. 326 00:15:19,270 --> 00:15:22,910 En hel del arbete gick in i det, och jag har hörde det är vansinnigt bra. 327 00:15:22,910 --> 00:15:25,740 Jag ingår också länken på denna bild, om du inte har haft en 328 00:15:25,740 --> 00:15:29,160 chans att titta på det 10 gånger. 329 00:15:29,160 --> 00:15:35,280 >> Så kommer vi att kortfattat gå igenom de viktiga steg för att öppna och arbeta 330 00:15:35,280 --> 00:15:38,400 med filer, och då kommer vi att dyka in i en kodningsproblem innan 331 00:15:38,400 --> 00:15:40,400 undersöka problemet set. 332 00:15:40,400 --> 00:15:44,330 Så återigen, jag kommer att sätta upp detta på skärmen, men jag ska prata om 333 00:15:44,330 --> 00:15:47,630 bara en minut om vad vi är gör här med fil I/O-- 334 00:15:47,630 --> 00:15:49,090 vad betyder det? 335 00:15:49,090 --> 00:15:55,280 >> Det innebär att vi kan skapa vår program, och sedan har våra program 336 00:15:55,280 --> 00:16:00,370 exit, och inte har gjort någon inverkan på världen utanför vårt program. 337 00:16:00,370 --> 00:16:04,630 Men när vi börjar arbeta med filer - både läsa dem och skapa 338 00:16:04,630 --> 00:16:10,460 dem - kan vi ha viss effekt på den värld utanför vårt program. 339 00:16:10,460 --> 00:16:15,440 >> Precis som om Microsoft Word inte kunde göra några Word-dokument, sedan 340 00:16:15,440 --> 00:16:18,710 när Microsoft Word sluta, alla dina Arbetet skulle vara borta, och det skulle 341 00:16:18,710 --> 00:16:19,740 verkligen vara värdelös. 342 00:16:19,740 --> 00:16:23,620 Vi vill i slutändan vill kunna skriva program som kan påverka 343 00:16:23,620 --> 00:16:31,350 världen omkring dem, både genom att ta in komplexa ingångar - i form av filer och 344 00:16:31,350 --> 00:16:37,080 via filer, och även skapa intressanta och övertygande utgångar - 345 00:16:37,080 --> 00:16:39,520 i form av olika typer av filer. 346 00:16:39,520 --> 00:16:43,730 >> Så det är därför vi börjar lära sig att arbeta med filer. 347 00:16:43,730 --> 00:16:47,080 Mer specifikt vad vi gör är följande. 348 00:16:47,080 --> 00:16:47,680 Det är väldigt enkelt. 349 00:16:47,680 --> 00:16:51,530 Det finns bara ett par steg, och de är listade här på denna kod. 350 00:16:51,530 --> 00:16:55,130 Så vi kommer att gå igenom denna kod rad för rad. 351 00:16:55,130 --> 00:16:57,630 >> Först ser du markerat - 352 00:16:57,630 --> 00:17:01,330 När du arbetar med en fil, oavsett vilken typ av fil det är, 353 00:17:01,330 --> 00:17:02,670 du behöver för att öppna den. 354 00:17:02,670 --> 00:17:05,130 Och det är med en uppmaning till fopen - 355 00:17:05,130 --> 00:17:05,950 här. 356 00:17:05,950 --> 00:17:07,980 Du innehålla namnet på filen. 357 00:17:07,980 --> 00:17:11,930 Om filen inte finns i din katalog, eller den mapp där programmet 358 00:17:11,930 --> 00:17:15,910 liv, då måste du också inkludera en väg till där filen finns. 359 00:17:15,910 --> 00:17:19,099 >> Vi kommer att anta att detta fil som heter "text.txt" - 360 00:17:19,099 --> 00:17:24,220 ett enkelt textdokument - är i samma mapp som programmet är. 361 00:17:24,220 --> 00:17:26,859 Så det är en annan sak att hålla i sinne - att om du vill öppna en fil 362 00:17:26,859 --> 00:17:30,050 någon annanstans, du faktiskt behöver att inkludera dess plats. 363 00:17:30,050 --> 00:17:33,520 >> För det andra kan du skicka ett argument till fopen, och det är vad du vill göra 364 00:17:33,520 --> 00:17:34,620 med filen. 365 00:17:34,620 --> 00:17:38,450 Det finns tre huvudargument som du kommer att passera till fopen. 366 00:17:38,450 --> 00:17:40,060 Vem kan ge mig dessa tre? 367 00:17:40,060 --> 00:17:44,960 368 00:17:44,960 --> 00:17:47,130 Vem kan ge mig en av dem? 369 00:17:47,130 --> 00:17:48,130 Ja. 370 00:17:48,130 --> 00:17:50,010 >> STUDENT 4: Filnamnet? 371 00:17:50,010 --> 00:17:50,440 >> JASON Hirschhorn: Förlåt. 372 00:17:50,440 --> 00:17:55,490 Tre huvudargument som du kan passera som det andra argumentet till fopen. 373 00:17:55,490 --> 00:17:57,060 Du har rätt - filnamnet är det första argumentet. 374 00:17:57,060 --> 00:18:01,620 Men det andra argumentet till fopen är allmänhet tre strängar, och - ja. 375 00:18:01,620 --> 00:18:02,210 Aleja. 376 00:18:02,210 --> 00:18:03,490 >> Aleja: A för append. 377 00:18:03,490 --> 00:18:06,840 >> JASON Hirschhorn: A, om du vill lägga till en fil som redan finns. 378 00:18:06,840 --> 00:18:07,810 >> STUDENT 5: R för läsning. 379 00:18:07,810 --> 00:18:09,930 >> JASON Hirschhorn: R, om du vill läsa från en fil. 380 00:18:09,930 --> 00:18:10,670 >> STUDENT 6: W för skrivning. 381 00:18:10,670 --> 00:18:12,840 >> JASON Hirschhorn: Och w, om du vill skriva till en fil. 382 00:18:12,840 --> 00:18:17,570 Så i det här fallet, vi skriver till filen, så vi har w. 383 00:18:17,570 --> 00:18:22,360 Du öppnar den, måste du också spara fil någonstans, och det är med den 384 00:18:22,360 --> 00:18:26,000 kod till den vänstra sidan av uppdraget operatören - 385 00:18:26,000 --> 00:18:31,220 Jag skapar en pekare till en fil heter, i det här fallet, fil. 386 00:18:31,220 --> 00:18:36,070 >> Vi kommer inte att oroa sig vad detta versaler FIL sak är. 387 00:18:36,070 --> 00:18:40,600 Det räcker att säga, det är en lång ström av ettor och nollor. 388 00:18:40,600 --> 00:18:44,970 Och det är hur vi ska driva det och förstå det. 389 00:18:44,970 --> 00:18:47,300 >> Nästa sak vi behöver göra - och Detta är oerhört viktigt - 390 00:18:47,300 --> 00:18:49,070 varje gång du öppnar en fil - 391 00:18:49,070 --> 00:18:54,250 faktiskt, när du kallar malloc, för exempel, och få lite minne och försök 392 00:18:54,250 --> 00:18:57,980 och spara den i en pekare, som du alltid vill kontrollera att se till att det 393 00:18:57,980 --> 00:19:00,230 funktionen inte returnera null. 394 00:19:00,230 --> 00:19:05,230 >> Så i detta fall, vi kontrollera för att se till att vi verkligen öppnat 395 00:19:05,230 --> 00:19:10,230 filen på rätt sätt, och det fanns inget fel i vårt program. 396 00:19:10,230 --> 00:19:15,160 Sedan när vi har kontrollerat att se till att vi har en fungerande fil, kan vi 397 00:19:15,160 --> 00:19:18,520 skriva till eller läsa från, eller lägga till filen. 398 00:19:18,520 --> 00:19:24,270 I det här fallet är jag helt enkelt skriva ut en rad till den här filen. 399 00:19:24,270 --> 00:19:25,450 >> Hur vet jag det? 400 00:19:25,450 --> 00:19:27,990 Tja, jag använder denna funktion heter fprintf. 401 00:19:27,990 --> 00:19:30,970 Alla funktioner som du kommer att använda när du skriver till eller läser från, eller 402 00:19:30,970 --> 00:19:34,950 manipulera filer kommer att likna funktioner som du har sett förut, men 403 00:19:34,950 --> 00:19:38,420 börjar med bokstaven F, står för filen. 404 00:19:38,420 --> 00:19:43,440 Och fprintf, till skillnad från vår normala tryck app, tar ytterligare ett argument, 405 00:19:43,440 --> 00:19:47,800 och det är den fil där du vill skriva ut den här raden till. 406 00:19:47,800 --> 00:19:50,640 >> Jag har inte något att höger om ohai. 407 00:19:50,640 --> 00:19:52,860 Jag har inte den tredje argument till printf - 408 00:19:52,860 --> 00:19:57,030 eller det andra argumentet till printf, den tredje argumentet till fprintf, eftersom jag 409 00:19:57,030 --> 00:19:59,480 har inga platshållare här. 410 00:19:59,480 --> 00:20:01,070 Jag är inte med några variabler. 411 00:20:01,070 --> 00:20:06,070 Men återigen, fprintf och alla dessa filer funktioner som fungerar med filer 412 00:20:06,070 --> 00:20:09,820 i allmänhet kommer att behöva filen där de är verksamma. 413 00:20:09,820 --> 00:20:15,960 >> Slutligen, den sista viktiga att göra är att avsluta ärendet, precis som 414 00:20:15,960 --> 00:20:19,530 med - när vi malloc något, Vi vill befria något, så att vi 415 00:20:19,530 --> 00:20:22,730 har en minnesläcka - vi vill att avsluta vår fil. 416 00:20:22,730 --> 00:20:28,180 Om detta program lämnat utan stängning filen, oddsen är ingenting skulle gå 417 00:20:28,180 --> 00:20:30,050 fel, särskilt om det var en liten fil. 418 00:20:30,050 --> 00:20:35,020 >> Men det är säkert bra kodning stil och träna för att alltid avsluta din fil 419 00:20:35,020 --> 00:20:38,050 när du är klar med den. 420 00:20:38,050 --> 00:20:43,630 Så det är grunderna i fil-I / O. Du har säkert sett det förut, eller 421 00:20:43,630 --> 00:20:45,710 såg det i den fantastiska kort. 422 00:20:45,710 --> 00:20:48,410 Är det någon som har några frågor, innan vi går in lite träning kodning 423 00:20:48,410 --> 00:20:51,800 problem, om fil-I / O eller steg jag bara gick över? 424 00:20:51,800 --> 00:21:00,198 425 00:21:00,198 --> 00:21:03,162 >> [SKRIVANDE LÅTER] 426 00:21:03,162 --> 00:21:04,150 >> JASON Hirschhorn: Har du har en fråga, Avi? 427 00:21:04,150 --> 00:21:04,660 >> AVI: Nej. 428 00:21:04,660 --> 00:21:04,740 >> JASON Hirschhorn: OK. 429 00:21:04,740 --> 00:21:06,746 Jag kommer att vänta en sju sekunder. 430 00:21:06,746 --> 00:21:07,590 [Skratt] 431 00:21:07,590 --> 00:21:08,620 Det är ett riktigt bra tips. 432 00:21:08,620 --> 00:21:10,750 Ni bara inte gillar ställa frågor. 433 00:21:10,750 --> 00:21:11,660 Det är bra. 434 00:21:11,660 --> 00:21:12,330 OK. 435 00:21:12,330 --> 00:21:17,620 Så vår första praktik Problemet är att vi är kommer att duplicera funktionen hos 436 00:21:17,620 --> 00:21:22,330 ett kommandoradsverktyg som du antagligen använt tidigare - kopia - 437 00:21:22,330 --> 00:21:23,500 kopieringsverktyget. 438 00:21:23,500 --> 00:21:28,050 Om du skriver cp och sedan ge det två argument i din terminal kan du 439 00:21:28,050 --> 00:21:28,980 kopiera en fil. 440 00:21:28,980 --> 00:21:31,220 Och det är vad vi kommer att skriva just nu. 441 00:21:31,220 --> 00:21:35,830 >> Så återigen, läsning av av denna bild, skulle jag dig att skriva ett program som tar 442 00:21:35,830 --> 00:21:38,130 två och endast två kommandoraden argument - 443 00:21:38,130 --> 00:21:40,750 en källfil och en målfil - 444 00:21:40,750 --> 00:21:44,590 och kopierar innehållet i källan filen till målfilen 445 00:21:44,590 --> 00:21:46,960 en byte i taget. 446 00:21:46,960 --> 00:21:48,510 Så det är mycket att be om. 447 00:21:48,510 --> 00:21:52,200 >> Återigen, är en bra metod för att detta ska inte gå direkt till C-kod, men 448 00:21:52,200 --> 00:21:54,280 dela upp det i ett par steg. 449 00:21:54,280 --> 00:21:58,400 Först, tänk på logiken - precis vad jag ber dig att göra - 450 00:21:58,400 --> 00:22:00,620 och förstå alla de steg på detta problem. 451 00:22:00,620 --> 00:22:04,410 Inte i C, bara i några pseudo, eller ens en mental modell av 452 00:22:04,410 --> 00:22:06,030 vad som händer. 453 00:22:06,030 --> 00:22:10,050 >> Nästa gång du har den pseudokod ner, räkna ut hur pseudo 454 00:22:10,050 --> 00:22:14,600 kartor på verktyg och saker som vi har lärt sig att använda i C. 455 00:22:14,600 --> 00:22:19,070 >> Och slutligen, när du har allt som tillsammans, kan du koda problemet. 456 00:22:19,070 --> 00:22:23,370 Ta 5 till 10 minuter att arbeta med detta problem. 457 00:22:23,370 --> 00:22:25,800 Jag lägger instruktionerna tillbaka upp på en sekund. 458 00:22:25,800 --> 00:22:27,990 Och då kommer vi att gå över pseudokoden, och kod 459 00:22:27,990 --> 00:22:29,230 den lever som en grupp. 460 00:22:29,230 --> 00:22:31,640 >> Om du har några frågor när du är arbetar med detta, tveka inte att ta upp 461 00:22:31,640 --> 00:22:34,260 din hand, och jag kommer att komma runt och svara på dem. 462 00:22:34,260 --> 00:22:37,020 463 00:22:37,020 --> 00:22:39,330 >> STUDENT 7: Kan jag dra ett papper? 464 00:22:39,330 --> 00:22:41,537 >> JASON Hirschhorn: Vad händer? 465 00:22:41,537 --> 00:26:46,047 466 00:26:46,047 --> 00:26:48,043 >> [SKRIVANDE LÅTER] 467 00:26:48,043 --> 00:26:48,730 >> JASON Hirschhorn: OK. 468 00:26:48,730 --> 00:26:51,710 Låt oss gå över pseudokod först, och då jag ska ge dig ett par mer 469 00:26:51,710 --> 00:26:52,960 minuter för att avsluta kodning. 470 00:26:52,960 --> 00:26:55,540 471 00:26:55,540 --> 00:26:58,650 >> Vem vill börja mig med den första raden i 472 00:26:58,650 --> 00:27:00,030 pseudokod för denna funktion? 473 00:27:00,030 --> 00:27:03,330 474 00:27:03,330 --> 00:27:05,740 >> STUDENT 8: Kontrollera att se till att du fick två 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 Och om vi inte? 478 00:27:22,990 --> 00:27:25,974 >> STUDENT 8: Jag skulle återvända 0. 479 00:27:25,974 --> 00:27:27,872 >> JASON Hirschhorn: Bör vi gå tillbaka 0? 480 00:27:27,872 --> 00:27:30,182 >> STUDENT 8: tillbaka en - 481 00:27:30,182 --> 00:27:30,650 blanking. 482 00:27:30,650 --> 00:27:30,850 Ursäkta. 483 00:27:30,850 --> 00:27:31,210 >> JASON Hirschhorn: Ja. 484 00:27:31,210 --> 00:27:32,710 Förmodligen inte 0. 485 00:27:32,710 --> 00:27:34,680 Eftersom 0 betyder att allt var bra. 486 00:27:34,680 --> 00:27:35,030 OK. 487 00:27:35,030 --> 00:27:36,730 Så det är den första raden av pseudokod. 488 00:27:36,730 --> 00:27:38,715 Vem har den andra raden i pseudokod? 489 00:27:38,715 --> 00:27:40,630 >> STUDENT 9: Öppna båda filerna? 490 00:27:40,630 --> 00:27:41,880 >> JASON Hirschhorn: Öppna båda filerna. 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: Kontrollera om filen är NULL? 494 00:27:52,850 --> 00:28:10,906 495 00:28:10,906 --> 00:28:12,580 >> JASON Hirschhorn: Kontrollera att Se till varken är NULL. 496 00:28:12,580 --> 00:28:15,800 Som en parentes - 497 00:28:15,800 --> 00:28:17,540 slash 0 - 498 00:28:17,540 --> 00:28:18,887 är att NULL? 499 00:28:18,887 --> 00:28:20,080 >> STUDENT 11: Nej. 500 00:28:20,080 --> 00:28:21,190 >> JASON Hirschhorn: Det är inte NULL. 501 00:28:21,190 --> 00:28:23,400 Det kallas NULL terminator. 502 00:28:23,400 --> 00:28:25,580 Det är faktiskt stavas med bara en liter. 503 00:28:25,580 --> 00:28:28,580 Så kontrollerar något emot det - det är faktiskt ett tecken - 504 00:28:28,580 --> 00:28:31,710 så kontrollera något emot det är inte samma som kontroll för att se om det 505 00:28:31,710 --> 00:28:32,690 är lika med NULL. 506 00:28:32,690 --> 00:28:34,100 >> Och en del människor - 507 00:28:34,100 --> 00:28:36,040 på sina frågesporter och deras problem satser - har fått 508 00:28:36,040 --> 00:28:36,890 två av dem förvirrade. 509 00:28:36,890 --> 00:28:38,830 Men två av dessa är i själva verket är olika. 510 00:28:38,830 --> 00:28:40,220 Man avslutar en sträng - 511 00:28:40,220 --> 00:28:43,210 en är en pekare till 0. 512 00:28:43,210 --> 00:28:46,490 >> STUDENT 12: Varför skulle inte du kontrollera att se till att filerna inte är NULL 513 00:28:46,490 --> 00:28:48,670 innan du öppnar dem? 514 00:28:48,670 --> 00:28:54,772 >> JASON Hirschhorn: Så öppna sparar något i den filen. 515 00:28:54,772 --> 00:28:57,780 Och om du går tillbaka hit - 516 00:28:57,780 --> 00:28:59,520 så denna linje - fopen - 517 00:28:59,520 --> 00:29:05,300 kommer att ge dig en adress och lagra den adressen i filen om det fungerar. 518 00:29:05,300 --> 00:29:07,650 Om det inte fungerar, det kommer att lagra 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 Fick dig. 522 00:29:08,500 --> 00:29:09,050 >> JASON Hirschhorn: I filen. 523 00:29:09,050 --> 00:29:11,990 Så du kan inte kontrollera om NULL innan du har öppnat dem. 524 00:29:11,990 --> 00:29:13,520 NULL betyder något inte fungera 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å kontrollera att varken säga? 528 00:29:22,590 --> 00:29:23,200 Eller är? 529 00:29:23,200 --> 00:29:23,770 Vad tror vi? 530 00:29:23,770 --> 00:29:24,310 Vi ska gå med det. 531 00:29:24,310 --> 00:29:24,520 >> STUDENT 13: Är. 532 00:29:24,520 --> 00:29:25,020 >> JASON Hirschhorn: Är? 533 00:29:25,020 --> 00:29:25,930 Inte heller är? 534 00:29:25,930 --> 00:29:26,350 >> STUDENT 13: Är. 535 00:29:26,350 --> 00:29:26,390 >> JASON Hirschhorn: OK. 536 00:29:26,390 --> 00:29:28,510 Vi verkar ha en del enighet om det. 537 00:29:28,510 --> 00:29:30,520 Inte heller är NULL. 538 00:29:30,520 --> 00:29:32,250 OK, nästa rad av pseudokod. 539 00:29:32,250 --> 00:29:33,600 Vem har inte gett mig en rad ännu? 540 00:29:33,600 --> 00:29:37,350 541 00:29:37,350 --> 00:29:38,295 Vi kommer att vänta på dig. 542 00:29:38,295 --> 00:29:39,020 Yeah. 543 00:29:39,020 --> 00:29:40,895 >> STUDENT 14: Du måste läsa från den första 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 använder fscanf eller något liknande den första filen? 546 00:29:46,240 --> 00:29:50,650 >> JASON Hirschhorn: Så vi vill läsa från den första filen och - 547 00:29:50,650 --> 00:29:51,900 låt oss sätta det här. 548 00:29:51,900 --> 00:30:00,600 549 00:30:00,600 --> 00:30:01,880 Läs från källfilen. 550 00:30:01,880 --> 00:30:05,370 Och sedan, vad gör vi efter att vi läsa från källfilen? 551 00:30:05,370 --> 00:30:06,620 Någon annan? 552 00:30:06,620 --> 00:30:09,150 553 00:30:09,150 --> 00:30:12,190 >> STUDENT 15: Skriv in målfilen? 554 00:30:12,190 --> 00:30:22,080 555 00:30:22,080 --> 00:30:25,620 >> JASON Hirschhorn: Vi skriver till målfilen, och - 556 00:30:25,620 --> 00:30:26,210 OK. 557 00:30:26,210 --> 00:30:30,030 Vad vi saknar? 558 00:30:30,030 --> 00:30:32,460 Någon annan som inte har gett mig en kodrad ännu - av pseudokod. 559 00:30:32,460 --> 00:30:33,510 Yeah. 560 00:30:33,510 --> 00:30:36,540 >> STUDENT 16: Kanske kan du alltid kontrollera om det finns något att läsa om, 561 00:30:36,540 --> 00:30:37,970 som nästa rad? 562 00:30:37,970 --> 00:30:39,550 Det är som nästa rad, se om den finns. 563 00:30:39,550 --> 00:30:40,660 >> [ELEKTRONISK BEEP] 564 00:30:40,660 --> 00:30:41,095 >> JASON Hirschhorn: Oj. 565 00:30:41,095 --> 00:30:43,120 Det är mitt journal programvara. 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å ge det till mig en gång till. 569 00:30:48,940 --> 00:30:51,640 >> STUDENT 16: Kontrollera om det finns ännu en nästa linje från 570 00:30:51,640 --> 00:30:52,920 källfilen att läsa. 571 00:30:52,920 --> 00:30:53,500 >> JASON Hirschhorn: OK. 572 00:30:53,500 --> 00:30:56,060 Så vi inte läsa rader - läste byte här - 573 00:30:56,060 --> 00:30:57,590 men du är rätt. 574 00:30:57,590 --> 00:31:00,040 Vi önskar att läsa och skriva till dess det finns inga fler bytes. 575 00:31:00,040 --> 00:31:11,430 576 00:31:11,430 --> 00:31:11,735 OK. 577 00:31:11,735 --> 00:31:16,940 Och så dessa borde egentligen vara indragen lite, eftersom de är under där. 578 00:31:16,940 --> 00:31:17,470 Rätt? 579 00:31:17,470 --> 00:31:20,620 Tills vi är av byte, kommer vi att läses från källfilen och skriva 580 00:31:20,620 --> 00:31:22,160 till målfilen. 581 00:31:22,160 --> 00:31:24,510 >> Och då, vad är det sista linje pseudokod? 582 00:31:24,510 --> 00:31:26,380 Någon som inte gett mig något ännu. 583 00:31:26,380 --> 00:31:29,270 584 00:31:29,270 --> 00:31:30,260 >> STUDENT 17: Stäng filerna? 585 00:31:30,260 --> 00:31:31,510 >> JASON Hirschhorn: Exakt. 586 00:31:31,510 --> 00:31:36,370 587 00:31:36,370 --> 00:31:37,450 Stäng filerna. 588 00:31:37,450 --> 00:31:38,400 Så det är vår pseudokod. 589 00:31:38,400 --> 00:31:41,870 Jag kommer att sätta den pseudo in gedit, och i ett par minuter som vi 590 00:31:41,870 --> 00:31:44,626 kommer att koda detta tillsammans. 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 Låt oss komma igång som en grupp. 594 00:33:58,290 --> 00:33:59,940 Nishant, jag har min nya filen. 595 00:33:59,940 --> 00:34:01,130 Jag har precis öppnat upp detta. 596 00:34:01,130 --> 00:34:01,880 Untitled dokument 1. 597 00:34:01,880 --> 00:34:05,490 Vad är det första jag ska göra? 598 00:34:05,490 --> 00:34:07,040 >> Nishant: Inkludera biblioteken? 599 00:34:07,040 --> 00:34:08,219 >> JASON Hirschhorn: OK. 600 00:34:08,219 --> 00:34:11,070 Vilka bibliotek? 601 00:34:11,070 --> 00:34:17,570 >> Nishant: stdio.h, stdlib.h, tror jag? 602 00:34:17,570 --> 00:34:18,000 >> JASON Hirschhorn: OK. 603 00:34:18,000 --> 00:34:21,592 Vad är stdlib för? 604 00:34:21,592 --> 00:34:23,010 >> Nishant: Jag glömde. 605 00:34:23,010 --> 00:34:23,219 >> JASON Hirschhorn: OK. 606 00:34:23,219 --> 00:34:24,179 Så inkluderar stdio. 607 00:34:24,179 --> 00:34:28,630 Vad ska jag göra med innan Jag börja koda? 608 00:34:28,630 --> 00:34:29,710 >> Nishant: Skriv en rubrik? 609 00:34:29,710 --> 00:34:31,830 >> JASON Hirschhorn: Hur får jag det färgade? 610 00:34:31,830 --> 00:34:34,060 >> [inplacering UTTRYCKER] 611 00:34:34,060 --> 00:34:35,040 >> Nishant: Hur får du det färgade? 612 00:34:35,040 --> 00:34:38,060 >> JASON Hirschhorn: Hur får jag färgkoder? 613 00:34:38,060 --> 00:34:38,570 >> Nishant: Jag vet inte. 614 00:34:38,570 --> 00:34:38,830 Oh. 615 00:34:38,830 --> 00:34:39,389 Spara. 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 Jag ska spara den som en. C.. 619 00:34:41,760 --> 00:34:46,239 Så spara den på skrivbordet som cp.c. 620 00:34:46,239 --> 00:34:47,280 Söt. 621 00:34:47,280 --> 00:34:51,199 Och om jag vill få fullt stil poäng, vad ska jag 622 00:34:51,199 --> 00:34:53,085 omfatta högst upp? 623 00:34:53,085 --> 00:34:58,390 >> Nishant: Du kan skriva ditt namn, namn av programmet, och syftet 624 00:34:58,390 --> 00:34:59,640 av programmet också? 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 Utmärkt. 628 00:35:10,470 --> 00:35:12,940 Så du har börjat oss perfekt. 629 00:35:12,940 --> 00:35:13,720 # Include - 630 00:35:13,720 --> 00:35:15,365 Vi kommer också skriva - 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å jag tror att jag är redo att gå. 634 00:35:33,520 --> 00:35:38,003 Vem har den första kodraden för mig - eller de första kodrader som 635 00:35:38,003 --> 00:35:41,280 det kommer att ta för att tillfredsställa vår första comment i pseudokod? 636 00:35:41,280 --> 00:35:41,985 Du. 637 00:35:41,985 --> 00:35:48,780 >> STUDENT 18: Borde inte det vara int argc, och sedan char * argv? 638 00:35:48,780 --> 00:35:49,490 >> JASON Hirschhorn: Jag tror du har rätt. 639 00:35:49,490 --> 00:35:56,270 Låt oss ändra det till int viktigaste, öppna föräldra, int argc, kommatecken, char * argv? 640 00:35:56,270 --> 00:35:57,150 Så? 641 00:35:57,150 --> 00:35:57,410 >> STUDENT 18: Brackets. 642 00:35:57,410 --> 00:35:58,260 >> JASON Hirschhorn: Brackets. 643 00:35:58,260 --> 00:35:59,860 Öppet fäste, nära fästet, nära förälder. 644 00:35:59,860 --> 00:36:00,240 Perfect. 645 00:36:00,240 --> 00:36:02,160 Nu kan jag ta kommandoradsargument. 646 00:36:02,160 --> 00:36:02,430 OK. 647 00:36:02,430 --> 00:36:04,250 Se till att vi gett två filer. 648 00:36:04,250 --> 00:36:07,905 Du kan ge mig det också. 649 00:36:07,905 --> 00:36:09,180 >> STUDENT 18: Om argc - 650 00:36:09,180 --> 00:36:11,060 detta inte lika 3. 651 00:36:11,060 --> 00:36:14,360 >> JASON Hirschhorn: Om öppna föräldra argc inte lika 3? 652 00:36:14,360 --> 00:36:16,970 >> STUDENT 18: Ja, du tillbaka 1 eller något. 653 00:36:16,970 --> 00:36:17,460 >> JASON Hirschhorn: Förlåt. 654 00:36:17,460 --> 00:36:19,120 >> STUDENT 18: Return 1 eller något. 655 00:36:19,120 --> 00:36:20,270 >> JASON Hirschhorn: Tillbaka 1. 656 00:36:20,270 --> 00:36:22,230 OK? 657 00:36:22,230 --> 00:36:22,970 Bra. 658 00:36:22,970 --> 00:36:24,290 Öppna båda filerna. 659 00:36:24,290 --> 00:36:26,160 Vem kan hjälpa mig att öppna båda filerna? 660 00:36:26,160 --> 00:36:28,125 Vem har inte gett mig koden ännu? 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å alla caps F-I-L-E stjärna källa. 664 00:36:36,145 --> 00:36:39,390 665 00:36:39,390 --> 00:36:40,920 >> JASON Hirschhorn: Jag tänker att ta ut vokalerna. 666 00:36:40,920 --> 00:36:41,570 De är coola. 667 00:36:41,570 --> 00:36:42,716 Det är som Tumblr. 668 00:36:42,716 --> 00:36:44,610 >> STUDENT 18: Lika fopen - 669 00:36:44,610 --> 00:36:46,612 >> JASON Hirschhorn: Lika med fopen? 670 00:36:46,612 --> 00:36:49,870 >> STUDENT 18: Öppna Paren, argv, öppna konsolen. 671 00:36:49,870 --> 00:36:50,055 >> JASON Hirschhorn: Vänta. 672 00:36:50,055 --> 00:36:50,240 Ursäkta. 673 00:36:50,240 --> 00:36:51,050 Öppen föräldra. 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 1. 677 00:36:55,110 --> 00:36:55,860 >> JASON Hirschhorn: Sub 1? 678 00:36:55,860 --> 00:36:56,140 >> STUDENT 18: Yeah. 679 00:36:56,140 --> 00:36:58,540 Argv öppna fäste 1 - 680 00:36:58,540 --> 00:36:59,730 Ja. 681 00:36:59,730 --> 00:37:06,470 Och sedan komma och öppna sedan dubbel citat, r, dubbla citat, 682 00:37:06,470 --> 00:37:08,250 nära paren, semikolon. 683 00:37:08,250 --> 00:37:09,450 >> JASON Hirschhorn: Sweet. 684 00:37:09,450 --> 00:37:10,950 Och hur är det med andra? 685 00:37:10,950 --> 00:37:16,030 >> STUDENT 18: Mycket lik, men i stället S-R-C, skulle du kalla 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 Det gillar jag. 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 Och sedan argv, öppna konsolen, 2. 690 00:37:23,057 --> 00:37:23,200 Yeah. 691 00:37:23,200 --> 00:37:26,720 Och sedan w istället för 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 Nästa par rader. 695 00:37:31,360 --> 00:37:34,040 Dessutom, om någon har saker att lägga till linjer som vi har gjort, gärna 696 00:37:34,040 --> 00:37:35,690 lägga till dem också. 697 00:37:35,690 --> 00:37:37,520 Kontrollera att ingen är NULL. 698 00:37:37,520 --> 00:37:41,450 Vem kan ge mig koden jag behöver tillfredsställa den linjen av pseudokod? 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: Om src lika jämlikar NULL eller dst lika jämlikar 702 00:37:58,645 --> 00:38:04,590 NULL, då du kommer tillbaka - 703 00:38:04,590 --> 00:38:07,130 704 00:38:07,130 --> 00:38:07,976 >> JASON Hirschhorn: Vad? 705 00:38:07,976 --> 00:38:08,890 >> ARCHER: Return 2? 706 00:38:08,890 --> 00:38:09,760 >> JASON Hirschhorn: Return 2. 707 00:38:09,760 --> 00:38:14,400 Så om öppna föräldra src lika är lika med NULL, eller - 708 00:38:14,400 --> 00:38:15,590 vad det thing's - pipe? 709 00:38:15,590 --> 00:38:16,346 Pipe? 710 00:38:16,346 --> 00:38:17,140 Vi kallar det röret. 711 00:38:17,140 --> 00:38:22,340 Rör, rör, dst lika likar NULL, avkastning 2. 712 00:38:22,340 --> 00:38:23,900 OK? 713 00:38:23,900 --> 00:38:26,060 Tills vi är av byte - 714 00:38:26,060 --> 00:38:29,820 vi liksom hoppade över detta steg från den pseudo del att gå till här. 715 00:38:29,820 --> 00:38:31,970 >> Men tills vi har slut på byte - vad låter det som? 716 00:38:31,970 --> 00:38:34,680 Vilken typ av C-struktur - 717 00:38:34,680 --> 00:38:36,160 men jag använder inte ordet struktur, eftersom vi kommer att börja använda 718 00:38:36,160 --> 00:38:37,350 att i andra fall - 719 00:38:37,350 --> 00:38:39,495 men C-verktyg låter det som? 720 00:38:39,495 --> 00:38:39,970 >> STUDENT 19: En slinga. 721 00:38:39,970 --> 00:38:40,980 >> JASON Hirschhorn: En ögla. 722 00:38:40,980 --> 00:38:43,060 Låter som en slinga. 723 00:38:43,060 --> 00:38:49,670 Så vem kan ge mig den första raden av sling koden här? 724 00:38:49,670 --> 00:38:56,320 725 00:38:56,320 --> 00:39:01,980 Du kan också välja vilken typ av slinga som du vill, om du ger mig 726 00:39:01,980 --> 00:39:03,215 denna kodrad. 727 00:39:03,215 --> 00:39:04,150 Det finns tre typer. 728 00:39:04,150 --> 00:39:06,530 Du får välja. 729 00:39:06,530 --> 00:39:08,080 Jag skulle vilja föreslå en av dem. 730 00:39:08,080 --> 00:39:08,410 Avi. 731 00:39:08,410 --> 00:39:09,230 Vilken vill 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 lika med noll. 735 00:39:15,180 --> 00:39:17,360 >> JASON Hirschhorn: OK. 736 00:39:17,360 --> 00:39:18,570 >> AVI: Denna del är jag inte säker på. 737 00:39:18,570 --> 00:39:29,080 Men jag är mindre än storlek av stjärn källa? 738 00:39:29,080 --> 00:39:31,128 Jag är inte säker på det. 739 00:39:31,128 --> 00:39:32,580 >> JASON Hirschhorn: OK. 740 00:39:32,580 --> 00:39:35,870 >> AVI: Eftersom du vill ha den storleken på en fil, eller hur? 741 00:39:35,870 --> 00:39:41,090 >> JASON Hirschhorn: Så det här förmodligen inte ge oss storleken av den faktiska 742 00:39:41,090 --> 00:39:43,010 fil i byte. 743 00:39:43,010 --> 00:39:47,680 Så vad kan vi göra? 744 00:39:47,680 --> 00:39:48,810 Vad är en annan typ av loop? 745 00:39:48,810 --> 00:39:50,180 Eller ska vi hålla fast vid FOR loop? 746 00:39:50,180 --> 00:39:55,350 747 00:39:55,350 --> 00:39:57,900 >> STUDENT 20: Kan du göra en while-slinga? 748 00:39:57,900 --> 00:40:01,350 Och då, vad du skulle göra är att Du skulle - 749 00:40:01,350 --> 00:40:03,930 eftersom vi har en char * för filen. 750 00:40:03,930 --> 00:40:07,950 Så om vi håller just uppräkning som tills vi skulle hitta den NULL tecken på 751 00:40:07,950 --> 00:40:08,500 I slutet av det? 752 00:40:08,500 --> 00:40:11,130 Eller nej, det är inte hur filer fungerar? 753 00:40:11,130 --> 00:40:14,300 >> JASON Hirschhorn: Så vi kan hålla uppräkning av char * 754 00:40:14,300 --> 00:40:16,340 tills vi hittar NULL - 755 00:40:16,340 --> 00:40:18,580 >> STUDENT 20: I huvudsak hålla igång tecken för tecken tills vi hit 756 00:40:18,580 --> 00:40:21,250 i slutet 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 är vad vi vill göra. 759 00:40:22,560 --> 00:40:24,545 Vi vill fortsätta läsa, tecken med karaktär, tills vi kommer till 760 00:40:24,545 --> 00:40:25,080 i slutet av filen. 761 00:40:25,080 --> 00:40:25,375 >> STUDENT 20: Yeah. 762 00:40:25,375 --> 00:40:25,860 Sök - 763 00:40:25,860 --> 00:40:28,540 vad är slutet eller stoppskylt vid slutet av en textfil. 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 till slutet av filen - hur vet vi att vi har nått 766 00:40:30,140 --> 00:40:33,200 slutet på en fil? 767 00:40:33,200 --> 00:40:34,710 Om jag ringer - 768 00:40:34,710 --> 00:40:35,910 så låt oss ta ett steg tillbaka. 769 00:40:35,910 --> 00:40:37,550 Vad är en funktion? 770 00:40:37,550 --> 00:40:39,360 Låt oss gå till denna linje här. 771 00:40:39,360 --> 00:40:40,630 Läs från källfilen. 772 00:40:40,630 --> 00:40:41,880 Vem kan ge mig den kodrad? 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 Vad händer om jag vill läsa, mycket specifikt, en bitgrupp? 778 00:40:52,240 --> 00:40:55,012 779 00:40:55,012 --> 00:40:56,860 >> STUDENT 21: Jag vet inte. 780 00:40:56,860 --> 00:40:57,110 >> JASON Hirschhorn: OK. 781 00:40:57,110 --> 00:40:59,380 Ännu enklare än fscanf - vad är en - 782 00:40:59,380 --> 00:41:01,890 Jag vill läsa från en källfilen? 783 00:41:01,890 --> 00:41:03,720 Läs från en källfil. 784 00:41:03,720 --> 00:41:04,850 Vad är en funktion - ja. 785 00:41:04,850 --> 00:41:05,380 >> STUDENT 22: Det är fread? 786 00:41:05,380 --> 00:41:06,070 >> JASON Hirschhorn: fread. 787 00:41:06,070 --> 00:41:07,550 Jag tror låt oss hålla fast vid som man för nu. 788 00:41:07,550 --> 00:41:10,380 789 00:41:10,380 --> 00:41:13,650 Vilken typ av argument gör fread ta? 790 00:41:13,650 --> 00:41:17,410 >> STUDENT 22: Förmodligen den filtyp, och sedan plats i filen? 791 00:41:17,410 --> 00:41:19,550 >> JASON Hirschhorn: Vad kan jag skriva här att räkna ut vilken typ av argument 792 00:41:19,550 --> 00:41:20,950 fread tar? 793 00:41:20,950 --> 00:41:23,710 >> FLERA STUDENTER: Man fread. 794 00:41:23,710 --> 00:41:24,740 >> JASON Hirschhorn: Man fread och fwrite. 795 00:41:24,740 --> 00:41:25,980 Ser ut som de umgås tillsammans. 796 00:41:25,980 --> 00:41:29,589 Så fread tar hur många argument? 797 00:41:29,589 --> 00:41:30,920 >> STUDENT 23: Fyra. 798 00:41:30,920 --> 00:41:32,690 >> JASON Hirschhorn: Det tar fyra argument. 799 00:41:32,690 --> 00:41:41,100 Det tar en pekare, en storlek, och att sak, vilket är konstigt, och lite fil. 800 00:41:41,100 --> 00:41:42,000 OK? 801 00:41:42,000 --> 00:41:43,990 Låt oss läsa om det här. 802 00:41:43,990 --> 00:41:49,370 "Funktionen fread läser n memb delar av data, varje storlek byte 803 00:41:49,370 --> 00:41:53,840 långa, från strömmen som utpekas av streama, lagra dem på plats 804 00:41:53,840 --> 00:41:56,170 ges av pekare. " 805 00:41:56,170 --> 00:41:57,960 >> Så fyra argument. 806 00:41:57,960 --> 00:42:04,510 Varför kan jag inte kopiera just detta, och klistra in den här. 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å vem kan börja fylla i dessa argument för mig? 810 00:42:13,673 --> 00:42:15,840 Avi. 811 00:42:15,840 --> 00:42:17,720 >> AVI: Ta ut tomrummet. 812 00:42:17,720 --> 00:42:20,530 Sätt bara src. 813 00:42:20,530 --> 00:42:23,142 Ta ut pekaren och stjärnan. 814 00:42:23,142 --> 00:42:26,102 Sätt src. 815 00:42:26,102 --> 00:42:27,050 Då - 816 00:42:27,050 --> 00:42:28,500 >> JASON Hirschhorn: Så jag kommer att sluta dig där, eftersom det är felaktigt. 817 00:42:28,500 --> 00:42:32,590 818 00:42:32,590 --> 00:42:34,710 Du har rätt med src, men där ska src gå? 819 00:42:34,710 --> 00:42:35,960 >> [inplacering UTTRYCKER] 820 00:42:35,960 --> 00:42:38,976 821 00:42:38,976 --> 00:42:41,610 >> JASON Hirschhorn: Det bör gå hit. 822 00:42:41,610 --> 00:42:43,790 Det är src - vår src är en typ. 823 00:42:43,790 --> 00:42:44,610 Låt oss titta här. 824 00:42:44,610 --> 00:42:49,610 Detta är att be om en filtyp *, vi faktiskt brukar se dem så. 825 00:42:49,610 --> 00:42:57,630 Så det här är att be om ett argument för filtyp * kallas bäck som är src. 826 00:42:57,630 --> 00:42:58,480 OK? 827 00:42:58,480 --> 00:43:00,410 >> Vilken storlek på saker att göra vi vill läsa? 828 00:43:00,410 --> 00:43:03,340 Jag gav dig det här i problembeskrivning. 829 00:43:03,340 --> 00:43:04,370 >> STUDENT 24: En byte i taget. 830 00:43:04,370 --> 00:43:05,340 >> JASON Hirschhorn: En byte. 831 00:43:05,340 --> 00:43:08,205 Hur stor är en byte? 832 00:43:08,205 --> 00:43:11,642 Dess storlek är i byte, så vad kan jag rätta till det? 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 Rätt. 836 00:43:17,020 --> 00:43:19,940 Dess storlek är i enhetsbyte, så 1 är 1 byte. 837 00:43:19,940 --> 00:43:22,284 Hur många vill jag läsa på en gång. 838 00:43:22,284 --> 00:43:23,520 >> STUDENT 26: en? 839 00:43:23,520 --> 00:43:24,270 >> JASON Hirschhorn: En sak. 840 00:43:24,270 --> 00:43:28,540 Jag vill läsa en sak av storlek 1, en tugga i taget. 841 00:43:28,540 --> 00:43:32,110 Och var ska jag uttrycka det, när jag läste 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å jag kan inte sätta det rakt in destinationen. 845 00:43:39,270 --> 00:43:40,800 >> STUDENT 28: Du är gonna put den till en tredje pekare? 846 00:43:40,800 --> 00:43:41,780 >> STUDENT 27: Att destinationen. 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 deklarera något till fungera som en tillfällig lagring tidigare. 850 00:43:46,820 --> 00:43:47,350 >> JASON Hirschhorn: OK. 851 00:43:47,350 --> 00:43:50,080 Ge mig det. 852 00:43:50,080 --> 00:43:53,930 >> STUDENT 29: En annan fil pekare, kanske? 853 00:43:53,930 --> 00:43:54,220 >> JASON Hirschhorn: OK. 854 00:43:54,220 --> 00:43:55,585 Så detta är ogiltig stjärna - 855 00:43:55,585 --> 00:43:57,750 det är en typ void stjärna, så det gör det inte måste vara en fil pekare. 856 00:43:57,750 --> 00:44:02,520 Och om jag läser en byte, där skulle vara en bra plats 857 00:44:02,520 --> 00:44:03,850 att lagra en byte-? 858 00:44:03,850 --> 00:44:04,660 >> STUDENT 29: En array? 859 00:44:04,660 --> 00:44:05,770 >> JASON Hirschhorn: En array. 860 00:44:05,770 --> 00:44:07,730 OK. 861 00:44:07,730 --> 00:44:14,040 Och vad mer är något som är bara storleken 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 * är inte en byte. 866 00:44:19,880 --> 00:44:20,440 >> STUDENT 29: En röding. 867 00:44:20,440 --> 00:44:21,810 >> JASON Hirschhorn: En char är en byte. 868 00:44:21,810 --> 00:44:22,920 Rätt? 869 00:44:22,920 --> 00:44:26,740 Så låt oss kalla denna buffert är en generisk namn används för dessa saker för att lagra 870 00:44:26,740 --> 00:44:27,910 något tillfälligt. 871 00:44:27,910 --> 00:44:30,880 Så jag skapar en buffert. 872 00:44:30,880 --> 00:44:31,150 Rätt? 873 00:44:31,150 --> 00:44:32,990 Men det tar en void *. 874 00:44:32,990 --> 00:44:38,660 Så kanske du har rätt, att det bör vara en buffert av storlek 0. 875 00:44:38,660 --> 00:44:41,070 Så det lagrar en - 876 00:44:41,070 --> 00:44:41,280 höger. 877 00:44:41,280 --> 00:44:43,560 >> Eftersom denna rätt här - röding bufferten är en karaktär, men 878 00:44:43,560 --> 00:44:45,110 detta tar ett tomrum * - 879 00:44:45,110 --> 00:44:45,870 en pekare. 880 00:44:45,870 --> 00:44:50,640 Så jag skulle kunna göra det här och nu bufferten är en pekare. 881 00:44:50,640 --> 00:44:53,214 Vad skulle jag göra? 882 00:44:53,214 --> 00:44:55,775 >> STUDENT 31: Sätt en stjärna bredvid char. 883 00:44:55,775 --> 00:44:58,380 >> JASON Hirschhorn: jag kunde har skapat den char *. 884 00:44:58,380 --> 00:45:00,216 OK. 885 00:45:00,216 --> 00:45:03,131 Vad är en annan sak som jag skulle kunna göra? 886 00:45:03,131 --> 00:45:04,050 Eller låt oss gå med här. 887 00:45:04,050 --> 00:45:05,740 Char * buffer, så vad lägger jag in här? 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: Buffert. 891 00:45:10,560 --> 00:45:12,640 892 00:45:12,640 --> 00:45:14,500 Buffert är en pekare till en röding. 893 00:45:14,500 --> 00:45:19,480 Och på den platsen, vi sätter en byte av något som vi har läst. 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: Bara en snabb fråga. 897 00:45:21,230 --> 00:45:24,440 Vill du malloc buffert? 898 00:45:24,440 --> 00:45:25,930 >> JASON Hirschhorn: Vem kan svara på den frågan? 899 00:45:25,930 --> 00:45:30,210 >> STUDENT 32: Tja, det spelar egentligen ingen peka på någonting just nu, så - 900 00:45:30,210 --> 00:45:32,610 >> JASON Hirschhorn: Men gör Vi vill att malloc det? 901 00:45:32,610 --> 00:45:35,600 >> STUDENT 32: Om du skulle göra det på det sätt, antar jag, ja, eftersom du skulle behöva 902 00:45:35,600 --> 00:45:36,990 någon plats för den att peka på. 903 00:45:36,990 --> 00:45:38,350 >> JASON Hirschhorn: Vill vi måste malloc det? 904 00:45:38,350 --> 00:45:40,580 >> STUDENT 33: Om du ska använda det utanför slingan. 905 00:45:40,580 --> 00:45:42,524 >> JASON Hirschhorn: Kommer vi att använda det utanför slingan? 906 00:45:42,524 --> 00:45:44,392 >> STUDENT 34: Ja. 907 00:45:44,392 --> 00:45:44,860 >> STUDENT 35: Vänta. 908 00:45:44,860 --> 00:45:46,980 Vill vi att förklara den i slingan till okända? 909 00:45:46,980 --> 00:45:50,100 >> JASON Hirschhorn: Så jag antar att vi har vissa pseudo WHILE loop här att vi är 910 00:45:50,100 --> 00:45:51,950 försöka lista ut, att Vi har inte kommit till ännu. 911 00:45:51,950 --> 00:45:54,710 912 00:45:54,710 --> 00:45:56,010 Vi behöver inte malloc det. 913 00:45:56,010 --> 00:45:59,310 Vi arbetar i huvud, det kommer bara som kan användas i denna slinga. 914 00:45:59,310 --> 00:46:00,540 Det behöver inte föreligga utanför denna. 915 00:46:00,540 --> 00:46:02,340 >> Så det kan vara en lokal variabel. 916 00:46:02,340 --> 00:46:03,925 Du har en pekare till 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 är inte pekar på någonting. 919 00:46:09,590 --> 00:46:11,540 >> JASON Hirschhorn: Nej, det är inte initieras till någonting. 920 00:46:11,540 --> 00:46:12,790 Men vi kommer inte att använda den också. 921 00:46:12,790 --> 00:46:15,300 Vi kommer att sätta något i det första gången vi använder den. 922 00:46:15,300 --> 00:46:16,580 Så det verkar OK. 923 00:46:16,580 --> 00:46:17,780 Så vi behöver inte malloc här. 924 00:46:17,780 --> 00:46:19,360 Och jag tycker det är OK som det är. 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 den fread linje. 928 00:46:27,190 --> 00:46:28,490 Låt oss göra det nästa rad. 929 00:46:28,490 --> 00:46:32,984 >> Om vi ​​vill skriva till en fil, vad är en bra funktion att använda för att göra 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 är ett. 933 00:46:36,010 --> 00:46:37,260 Vad är en till? 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 Och för våra syften, fwrite, som vi såg här, är 937 00:46:41,250 --> 00:46:42,500 förmodligen ett bättre val. 938 00:46:42,500 --> 00:46:51,970 939 00:46:51,970 --> 00:46:53,950 Det tar fyra argument också. 940 00:46:53,950 --> 00:46:57,570 Nishant, kan du ge mig argumenten? 941 00:46:57,570 --> 00:47:00,570 >> Nishant: Det första som händer vara bara buffert. 942 00:47:00,570 --> 00:47:02,210 >> JASON Hirschhorn: OK. 943 00:47:02,210 --> 00:47:06,752 >> Nishant: Den andra är bara kommer att bli 1. 944 00:47:06,752 --> 00:47:09,510 Tredje man kommer att bli 1. 945 00:47:09,510 --> 00:47:11,470 Och den fjärde kommer att bli dst. 946 00:47:11,470 --> 00:47:18,010 947 00:47:18,010 --> 00:47:19,550 >> JASON Hirschhorn: Är det någon som har några frågor 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å nu ser det ut som det enda vi är saknas - faktiskt, låt oss skriva 952 00:47:34,250 --> 00:47:35,090 denna sista raden. 953 00:47:35,090 --> 00:47:36,300 Stäng filerna. 954 00:47:36,300 --> 00:47:38,880 Vem kan avsluta upp oss skrivande de två sista raderna? 955 00:47:38,880 --> 00:47:39,120 Ja. 956 00:47:39,120 --> 00:47:39,850 Förlåt, vad 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 och sedan fclose destination. 960 00:47:47,560 --> 00:47:52,430 >> JASON Hirschhorn: fclose, öppen föräldra, src, nära föräldra, semikolon. 961 00:47:52,430 --> 00:47:53,680 Och 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: Öppna parenteser, dst och sedan semikolon. 965 00:48:01,710 --> 00:48:02,520 >> JASON Hirschhorn: Great. 966 00:48:02,520 --> 00:48:04,338 Och vad ska jag ta i slutet? 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åste jag? 970 00:48:06,820 --> 00:48:10,560 971 00:48:10,560 --> 00:48:12,590 Bara en fråga. 972 00:48:12,590 --> 00:48:14,957 Måste vi inkludera retur 0? 973 00:48:14,957 --> 00:48:16,240 >> FLERA STUDENTER: Nej. 974 00:48:16,240 --> 00:48:16,430 >> JASON Hirschhorn: Nej. 975 00:48:16,430 --> 00:48:18,090 Huvud gör det automatiskt om du kommer till slutet. 976 00:48:18,090 --> 00:48:20,580 Men jag tycker det är trevligt att inkludera det uttryckligen. 977 00:48:20,580 --> 00:48:23,860 Speciellt när vi återvänder andra saker under hela programmet. 978 00:48:23,860 --> 00:48:24,810 OK. 979 00:48:24,810 --> 00:48:26,230 Detta är vad vi saknar - 980 00:48:26,230 --> 00:48:28,520 MEDAN vad? 981 00:48:28,520 --> 00:48:31,630 Vem kan komma på något - 982 00:48:31,630 --> 00:48:35,240 har en känsla av hur det kunde gå in där? 983 00:48:35,240 --> 00:48:37,350 Även om det bara är i vissa pseudo liknande språk? 984 00:48:37,350 --> 00:48:41,330 >> Vad är vi egentligen - vad vill vi gå till? 985 00:48:41,330 --> 00:48:41,980 Ja, Lucy. 986 00:48:41,980 --> 00:48:43,240 >> LUCY: Slutet på filen. 987 00:48:43,240 --> 00:48:44,990 >> JASON Hirschhorn: Slutet på filen. 988 00:48:44,990 --> 00:48:49,280 Så vad menar du med slutet av filen? 989 00:48:49,280 --> 00:48:50,955 >> LUCY: När du når slutet av filen, sluta. 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 till slutet av filen. 992 00:48:53,460 --> 00:48:56,893 Hur vet vi när vi har nått i slutet av filen? 993 00:48:56,893 --> 00:48:59,900 >> STUDENT 40: Jag tror buffert sätts till NULL. 994 00:48:59,900 --> 00:49:01,885 >> STUDENT 41: Buffert förklaras inuti slingan. 995 00:49:01,885 --> 00:49:03,670 >> JASON Hirschhorn: Så du tror bufferten ska vara inställd på NULL. 996 00:49:03,670 --> 00:49:05,850 Varför skulle buffert sättas till NULL? 997 00:49:05,850 --> 00:49:10,420 >> STUDENT 40: För när du fread, du försöker sätta 998 00:49:10,420 --> 00:49:13,528 ingenting in i bufferten. 999 00:49:13,528 --> 00:49:13,980 >> JASON Hirschhorn: OK. 1000 00:49:13,980 --> 00:49:15,550 Så du tänker fread - 1001 00:49:15,550 --> 00:49:19,000 När vi har kommit till slutet av den fil, vad fread göra? 1002 00:49:19,000 --> 00:49:21,230 Jag tror att det är frågan Vi måste ta reda på. 1003 00:49:21,230 --> 00:49:21,960 Vad betyder fread göra? 1004 00:49:21,960 --> 00:49:25,640 Är det ett noll i buffert, eller gör den något annat? 1005 00:49:25,640 --> 00:49:27,510 Hur kan vi räkna ut vad det betyder? 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å låt oss titta hit. 1009 00:49:32,280 --> 00:49:34,000 Retur värde. 1010 00:49:34,000 --> 00:49:39,620 På framgång, fread och fwrite returnera Antalet poster läsas eller skrivas. 1011 00:49:39,620 --> 00:49:43,700 Detta antal är lika med antalet bytes överföras endast när storleken är 1. 1012 00:49:43,700 --> 00:49:47,780 Om ett fel uppstår, eller i slutet av filen har nåtts, är returvärdet 1013 00:49:47,780 --> 00:49:51,490 kort posträkning eller 0. 1014 00:49:51,490 --> 00:49:57,860 >> Så för våra syften, om fread når slutet på filen, och läser ur 1015 00:49:57,860 --> 00:50:02,100 slutet av filen, det finns inget kvar att läsa, vad det kommer att återvända? 1016 00:50:02,100 --> 00:50:03,290 >> STUDENT 43: Zero? 1017 00:50:03,290 --> 00:50:04,540 >> JASON Hirschhorn: Vad? 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 att återvända noll. 1021 00:50:06,940 --> 00:50:09,360 1022 00:50:09,360 --> 00:50:13,010 Så vi vet att fread, när vi har nått slutet på filen, går 1023 00:50:13,010 --> 00:50:13,690 att returnera noll. 1024 00:50:13,690 --> 00:50:17,460 Hur kan vi använda det till vår fördel? 1025 00:50:17,460 --> 00:50:21,733 >> AVI: Du kan deklarera en variabel utanför av slingan kallas check. 1026 00:50:21,733 --> 00:50:27,040 Om kryss lika - 1027 00:50:27,040 --> 00:50:28,190 för nu - en. 1028 00:50:28,190 --> 00:50:28,920 >> JASON Hirschhorn: OK. 1029 00:50:28,920 --> 00:50:38,050 >> AVI: Och sedan kan du lägga en IF uttalande direkt efter fread säger om 1030 00:50:38,050 --> 00:50:42,600 fread lika med noll - 1031 00:50:42,600 --> 00:50:43,850 nr. 1032 00:50:43,850 --> 00:50:46,002 1033 00:50:46,002 --> 00:50:47,252 >> JASON Hirschhorn: Vem kan hjälpa Avi ut? 1034 00:50:47,252 --> 00:50:49,690 1035 00:50:49,690 --> 00:50:52,410 >> AVI: Vad är värdet returneras av fread? 1036 00:50:52,410 --> 00:50:54,060 >> JASON Hirschhorn: Vi bara gick över det. 1037 00:50:54,060 --> 00:50:55,450 >> AVI: Hur står det? 1038 00:50:55,450 --> 00:50:57,190 >> JASON Hirschhorn: Så det tillbaka - låt oss se upp här - den returnerar en 1039 00:50:57,190 --> 00:50:59,340 size_t, som huvudsakligen är ett heltal. 1040 00:50:59,340 --> 00:51:02,240 1041 00:51:02,240 --> 00:51:03,410 Så det returnerar ett heltal. 1042 00:51:03,410 --> 00:51:05,160 Och i vårt fall kommer den tillbaka 1 eller 0 - 1043 00:51:05,160 --> 00:51:08,760 1 om det läste en sak - en byte, och 0 om vi har kommit till slutet. 1044 00:51:08,760 --> 00:51:13,560 1045 00:51:13,560 --> 00:51:16,450 Så om fread - 1046 00:51:16,450 --> 00:51:16,855 ja? 1047 00:51:16,855 --> 00:51:20,330 >> STUDENT 45: Kan du inte bara sätta den fulla fread (buffer, 1, 1, src) i 1048 00:51:20,330 --> 00:51:21,660 while-slinga? 1049 00:51:21,660 --> 00:51:26,510 >> JASON Hirschhorn: Så du föreslår att göra detta in dit? 1050 00:51:26,510 --> 00:51:27,600 >> [inplacering UTTRYCKER] 1051 00:51:27,600 --> 00:51:29,520 >> JASON Hirschhorn: Vänta. 1052 00:51:29,520 --> 00:51:30,885 Så vi befria det. 1053 00:51:30,885 --> 00:51:33,300 Så du föreslår att sätta fread in där? 1054 00:51:33,300 --> 00:51:35,457 Vad ska vi också flytta om du vill göra det? 1055 00:51:35,457 --> 00:51:36,740 >> STUDENT 45: Bufferten utanför. 1056 00:51:36,740 --> 00:51:38,110 >> JASON Hirschhorn: Vi bör också flytta ut det här. 1057 00:51:38,110 --> 00:51:41,700 >> STUDENT 45: Men gör det hela tiden flytta den framåt? 1058 00:51:41,700 --> 00:51:42,950 >> [inplacering UTTRYCKER] 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å detta är vad Okshar föreslås. 1062 00:51:50,570 --> 00:51:51,930 Vi skapar vår buffert. 1063 00:51:51,930 --> 00:51:57,020 Vi MEDAN fread, då fwrite vi. 1064 00:51:57,020 --> 00:51:59,760 Tankar om detta? 1065 00:51:59,760 --> 00:52:04,050 >> STUDENT 46: Min enda fråga är, skulle det faktiskt köra kommandot fread? 1066 00:52:04,050 --> 00:52:06,175 >> JASON Hirschhorn: Bra fråga. 1067 00:52:06,175 --> 00:52:11,050 När du lägger ett funktionsanrop inne i ett tillstånd, gör att 1068 00:52:11,050 --> 00:52:12,300 funktionsanrop köra? 1069 00:52:12,300 --> 00:52:15,760 1070 00:52:15,760 --> 00:52:17,770 Vi har sett exempel på detta tidigare. 1071 00:52:17,770 --> 00:52:24,900 1072 00:52:24,900 --> 00:52:25,660 Rätt? 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 gör exekvera. 1076 00:52:30,140 --> 00:52:31,790 >> JASON Hirschhorn: Vi har sett saker så förut, där vi har en 1077 00:52:31,790 --> 00:52:33,550 funktionsanrop inne i ett tillstånd. 1078 00:52:33,550 --> 00:52:35,540 Betyder det funktionsanrop köra? 1079 00:52:35,540 --> 00:52:36,350 Ja. 1080 00:52:36,350 --> 00:52:37,410 Så svaret är ja. 1081 00:52:37,410 --> 00:52:41,010 Funktionen samtal kommer att utföra. 1082 00:52:41,010 --> 00:52:42,418 Men återigen, är det vad vi vill? 1083 00:52:42,418 --> 00:52:49,250 1084 00:52:49,250 --> 00:52:52,204 >> Vad är ett sätt som vi kunde räkna ut om det är det vi vill? 1085 00:52:52,204 --> 00:52:53,470 >> FLERA STUDENTER: Kör det? 1086 00:52:53,470 --> 00:52:54,460 >> JASON Hirschhorn: Vi skulle kunna köra det. 1087 00:52:54,460 --> 00:52:57,500 Men innan vi gör det, vi kunde också resonera igenom det här. 1088 00:52:57,500 --> 00:52:57,920 Om - 1089 00:52:57,920 --> 00:53:01,920 säga att vi har en byte i vår fil, vi kommer till här, 1090 00:53:01,920 --> 00:53:02,660 vi kommer till denna kod. 1091 00:53:02,660 --> 00:53:03,620 Detta kommer att köras. 1092 00:53:03,620 --> 00:53:07,780 fread återgår en bitgrupp och förvara den i bufferten. 1093 00:53:07,780 --> 00:53:11,290 Och detta kommer att utvärderas till 1, höger, efter att han återvänder 1. 1094 00:53:11,290 --> 00:53:12,640 >> Så medan 1. 1095 00:53:12,640 --> 00:53:15,325 Betyder det att koden inuti WHILE-slingan kommer att utföra? 1096 00:53:15,325 --> 00:53:15,453 >> STUDENT 47: Yeah. 1097 00:53:15,453 --> 00:53:16,040 Det är sant. 1098 00:53:16,040 --> 00:53:16,290 >> JASON Hirschhorn: Ja. 1099 00:53:16,290 --> 00:53:17,490 1 är sant. 1100 00:53:17,490 --> 00:53:18,240 Det är inte 0. 1101 00:53:18,240 --> 00:53:20,360 Så koden inuti här kommer att utföra. 1102 00:53:20,360 --> 00:53:22,300 Så vi ska skriva det. 1103 00:53:22,300 --> 00:53:25,340 Vi ska gå tillbaka till denna linje igen. 1104 00:53:25,340 --> 00:53:26,850 Nu har vi - 1105 00:53:26,850 --> 00:53:28,550 vi är i slutet av vår fil. 1106 00:53:28,550 --> 00:53:30,980 Vi läser från slutet av vår fil, eftersom vi bara hade en byte i den. 1107 00:53:30,980 --> 00:53:34,270 >> Fread returnerar 0, butiker något i buffert. 1108 00:53:34,270 --> 00:53:35,890 Jag vet ärligt talat inte vad den lagrar i buffert. 1109 00:53:35,890 --> 00:53:38,380 Vi kan nog se upp för att se vad det gör. 1110 00:53:38,380 --> 00:53:40,130 Att jag vet ärligt talat inte. 1111 00:53:40,130 --> 00:53:43,090 Vi vet inte, vem bryr sig om vad den lagrar i buffert? 1112 00:53:43,090 --> 00:53:44,010 Men det återvänder 0. 1113 00:53:44,010 --> 00:53:45,440 Och kommer medan 0 exekvera? 1114 00:53:45,440 --> 00:53:49,950 1115 00:53:49,950 --> 00:53:51,180 >> MEDAN 0 inte kommer att utföra. 1116 00:53:51,180 --> 00:53:54,030 Så då ska vi flytta ner hit. 1117 00:53:54,030 --> 00:53:58,870 Så låt oss få en handuppräckning om detta är koden vi ska köra, eller om vi 1118 00:53:58,870 --> 00:54:00,140 bör göra förändringar först. 1119 00:54:00,140 --> 00:54:02,180 Så om du tror - du måste rösta. 1120 00:54:02,180 --> 00:54:06,885 Om du tycker att vi ska köra den här koden som är, räck upp handen. 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 finns en - 1124 00:54:14,315 --> 00:54:17,260 har du en fråga, oro? 1125 00:54:17,260 --> 00:54:18,080 Yeah. 1126 00:54:18,080 --> 00:54:21,240 >> STUDENT 48: När vi flyttar buffert utsidan av slingan, gör vi 1127 00:54:21,240 --> 00:54:22,670 måste malloc det? 1128 00:54:22,670 --> 00:54:23,310 >> JASON Hirschhorn: Bra fråga. 1129 00:54:23,310 --> 00:54:26,670 När vi flyttar buffert utanför loop, måste vi malloc det? 1130 00:54:26,670 --> 00:54:28,400 Detta är ett utrymme fråga. 1131 00:54:28,400 --> 00:54:32,130 Om vi ​​initiera buffert utanför av denna slinga, kommer det att existera 1132 00:54:32,130 --> 00:54:33,534 insidan av slingan? 1133 00:54:33,534 --> 00:54:35,230 >> FLERA STUDENTER: Ja. 1134 00:54:35,230 --> 00:54:35,580 >> JASON Hirschhorn: Ja. 1135 00:54:35,580 --> 00:54:40,100 Dess räckvidd täcker insidan av slingan, och, egentligen, allt under det inne 1136 00:54:40,100 --> 00:54:42,460 av denna kod, inklusive saker inne här. 1137 00:54:42,460 --> 00:54:43,930 Så vi behöver inte malloc det. 1138 00:54:43,930 --> 00:54:47,766 Det är en lokal variabel, och dess omfattning fortfarande innehåller slingan. 1139 00:54:47,766 --> 00:54:49,540 >> STUDENT 49: Behöver vi att befria det? 1140 00:54:49,540 --> 00:54:51,770 >> JASON Hirschhorn: Vill vi behöver buffert? 1141 00:54:51,770 --> 00:54:53,860 >> STUDENT 49: Ja, om vi inte malloc. 1142 00:54:53,860 --> 00:54:55,750 >> JASON Hirschhorn: Vill vi behöver buffert? 1143 00:54:55,750 --> 00:54:57,160 Vi gör inte. 1144 00:54:57,160 --> 00:55:01,280 Återigen är det en lokal variabel, så vi inte behöver för att befria den. 1145 00:55:01,280 --> 00:55:02,170 OK. 1146 00:55:02,170 --> 00:55:03,480 Låt oss se vad som händer. 1147 00:55:03,480 --> 00:55:17,290 1148 00:55:17,290 --> 00:55:18,220 Därför är det ej initierad. 1149 00:55:18,220 --> 00:55:20,830 Det var det något som Marcus föreslog tidigare. 1150 00:55:20,830 --> 00:55:25,340 Så vi har detta fel, variabel buffert är icke initierat när den används här. 1151 00:55:25,340 --> 00:55:26,590 >> Hur kan vi åtgärda detta? 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: Lika NULL? 1155 00:55:31,770 --> 00:55:33,000 >> STUDENT 52: Säg buffert lika 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 nu. 1160 00:55:42,410 --> 00:55:45,630 Låt oss skapa något för att försöka kopiera. 1161 00:55:45,630 --> 00:56:08,990 1162 00:56:08,990 --> 00:56:10,490 Så vi har vår textfil. 1163 00:56:10,490 --> 00:56:11,740 Hur kan vi köra det här 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 göra punkt slash cp, test.txt. 1167 00:56:22,230 --> 00:56:25,140 Och då kan du namnge en annan fil som det kommer att lagra in. 1168 00:56:25,140 --> 00:56:25,510 >> JASON Hirschhorn: OK. 1169 00:56:25,510 --> 00:56:27,380 Vi kallar 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 fel. 1173 00:56:34,320 --> 00:56:35,570 Tankar om seg felet? 1174 00:56:35,570 --> 00:56:40,900 1175 00:56:40,900 --> 00:56:41,390 Det här är bra. 1176 00:56:41,390 --> 00:56:45,040 Hur kan vi ta reda på var den seg felet är? 1177 00:56:45,040 --> 00:56:45,680 Vad? 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 kör gdb genom att skriva gdb dot snedstreck, namnet på vårt program. 1182 00:56:55,300 --> 00:56:57,020 Inga kommandoradsargument där. 1183 00:56:57,020 --> 00:56:59,570 Vi kommer att ställa en brytpunkt i main. 1184 00:56:59,570 --> 00:57:02,190 Om jag vill börja gdb, vad gör jag? 1185 00:57:02,190 --> 00:57:02,730 >> STUDENT 55: R. 1186 00:57:02,730 --> 00:57:08,910 >> JASON Hirschhorn: R. Och sen då? 1187 00:57:08,910 --> 00:57:09,400 >> STUDENT 55: Argumenten? 1188 00:57:09,400 --> 00:57:10,650 >> JASON Hirschhorn: Då kommandoradsargument. 1189 00:57:10,650 --> 00:57:15,890 1190 00:57:15,890 --> 00:57:17,120 Låt oss gå igenom. 1191 00:57:17,120 --> 00:57:19,090 N är bara ta mig rad för rad. 1192 00:57:19,090 --> 00:57:21,450 Jag ska gå till Jag får min seg fel. 1193 00:57:21,450 --> 00:57:22,700 Det är mitt seg fel. 1194 00:57:22,700 --> 00:57:24,960 1195 00:57:24,960 --> 00:57:27,875 Det ser ut som fread orsakade mitt seg fel. 1196 00:57:27,875 --> 00:57:30,570 1197 00:57:30,570 --> 00:57:32,770 Jag vet fread orsakade mitt seg fel, eftersom det var den 1198 00:57:32,770 --> 00:57:34,950 linje vi bara avrättades. 1199 00:57:34,950 --> 00:57:36,530 >> Och det enda som var händer i den linjen - 1200 00:57:36,530 --> 00:57:37,520 två saker hände. 1201 00:57:37,520 --> 00:57:40,610 Fread gick, och sedan var vi göra lite medan checkar. 1202 00:57:40,610 --> 00:57:44,820 Jag är villig att satsa att MEDAN kontroll inte orsakar min seg fel. 1203 00:57:44,820 --> 00:57:46,950 Troligtvis var fread orsakar min seg fel. 1204 00:57:46,950 --> 00:57:49,260 Jag ser också något här, memcopy. 1205 00:57:49,260 --> 00:57:50,500 >> Memory kopia. 1206 00:57:50,500 --> 00:57:53,820 Låter som att flytta minnet från en plats till en annan. 1207 00:57:53,820 --> 00:57:56,890 Låter som något som skulle hända i fread, kanske lite minne 1208 00:57:56,890 --> 00:57:58,910 flyttar härifrån till här. 1209 00:57:58,910 --> 00:58:01,740 1210 00:58:01,740 --> 00:58:03,860 Låt oss gå igenom det här igen. 1211 00:58:03,860 --> 00:58:06,900 Hur startar jag den över och köra den igen? 1212 00:58:06,900 --> 00:58:08,092 Yeah. 1213 00:58:08,092 --> 00:58:15,140 >> STUDENT 56: Behöver du lägga ett et-tecken före buffert? 1214 00:58:15,140 --> 00:58:17,800 >> JASON Hirschhorn: Så et-tecken före buffert skulle ge mig adressen till 1215 00:58:17,800 --> 00:58:22,330 buffert, som är en char *. 1216 00:58:22,330 --> 00:58:25,250 Låt oss gå igenom det här en gång till. 1217 00:58:25,250 --> 00:58:28,248 Hur kör jag igenom det en gång till? 1218 00:58:28,248 --> 00:58:29,210 >> STUDENT 57: Kan du bara typ köra igen? 1219 00:58:29,210 --> 00:58:32,050 >> JASON Hirschhorn: Skriv bara springa igen. 1220 00:58:32,050 --> 00:58:33,415 Så vi kommer inte att verkställa denna linje. 1221 00:58:33,415 --> 00:58:36,250 1222 00:58:36,250 --> 00:58:39,240 Så buffert är en NULL-pekare. 1223 00:58:39,240 --> 00:58:40,490 Rätta? 1224 00:58:40,490 --> 00:58:45,870 1225 00:58:45,870 --> 00:58:47,060 Det pekar på - låt oss se. 1226 00:58:47,060 --> 00:58:48,500 Om vi ​​har vår - 1227 00:58:48,500 --> 00:58:50,430 rita en snabb bild av detta. 1228 00:58:50,430 --> 00:58:53,500 Kan alla se om Jag skriver här borta? 1229 00:58:53,500 --> 00:59:02,890 >> Så i stacken, har vi en lokal variabel och det kallas buffert, och 1230 00:59:02,890 --> 00:59:08,230 det är en pekare till en char. 1231 00:59:08,230 --> 00:59:10,325 Vilken adress är det röding 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öger. 1234 00:59:13,400 --> 00:59:14,200 Det är vad det här är. 1235 00:59:14,200 --> 00:59:17,600 Här inne, inne buffert, lagras 0x0. 1236 00:59:17,600 --> 00:59:20,480 Det är det vi har - det inställning vi har just nu. 1237 00:59:20,480 --> 00:59:27,540 Så här linjen, fread, lägger något från källa där? 1238 00:59:27,540 --> 00:59:30,560 In i denna box eller rutan? 1239 00:59:30,560 --> 00:59:31,060 Vilken låda? 1240 00:59:31,060 --> 00:59:33,290 Vänster ruta eller höger låda? 1241 00:59:33,290 --> 00:59:34,750 Denna rätt ruta. 1242 00:59:34,750 --> 00:59:38,440 >> Det följer pekaren, och placerar det i här. 1243 00:59:38,440 --> 00:59:42,620 När vi försöker och beröring minne på läge 0, vad får vi? 1244 00:59:42,620 --> 00:59:45,050 En segmentering fel. 1245 00:59:45,050 --> 00:59:46,550 Det är fel att vi har just nu. 1246 00:59:46,550 --> 00:59:46,970 Yeah. 1247 00:59:46,970 --> 00:59:48,410 >> STUDENT 59: Har inte du har att sätta stjärna buffert? 1248 00:59:48,410 --> 00:59:49,180 Eller nej? 1249 00:59:49,180 --> 00:59:50,050 För fread? 1250 00:59:50,050 --> 00:59:51,450 >> JASON Hirschhorn: Så fread tar en pekare. 1251 00:59:51,450 --> 00:59:54,920 1252 00:59:54,920 --> 00:59:55,900 Så den passerar i buffert. 1253 00:59:55,900 --> 00:59:58,980 Och så kommer det de-referens den någonstans inne fread. 1254 00:59:58,980 --> 01:00:00,700 Men återigen, som vi såg, tar det en pekare. 1255 01:00:00,700 --> 01:00:02,560 Vi behöver inte passera det stjärn buffert. 1256 01:00:02,560 --> 01:00:05,350 Det skulle kunna passera det vad det här. 1257 01:00:05,350 --> 01:00:07,980 Och det skulle förmodligen ge oss ett fel eftersom vi är de-refererar det. 1258 01:00:07,980 --> 01:00:08,150 >> Rätt? 1259 01:00:08,150 --> 01:00:10,690 När vi de-referens här pekaren, när Vi försöker komma åt den här platsen, 1260 01:00:10,690 --> 01:00:13,140 vi får ett fel - vår segmentering fel. 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 att sluta 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 - är rätt här på denna linje. 1266 01:00:22,990 --> 01:00:26,410 Och det är ett problem eftersom på denna linje. 1267 01:00:26,410 --> 01:00:31,780 >> Hur kan vi skapa en ruta som är tillgänglig i fread. 1268 01:00:31,780 --> 01:00:31,980 Rätt? 1269 01:00:31,980 --> 01:00:35,190 Vi måste skapa en ruta som är en byte stora, storleken på en röding. 1270 01:00:35,190 --> 01:00:38,590 Men vi behöver att rutan för att vara tillgänglig när funktionen körs. 1271 01:00:38,590 --> 01:00:39,390 Så var - 1272 01:00:39,390 --> 01:00:39,640 ja. 1273 01:00:39,640 --> 01:00:40,440 Några idéer? 1274 01:00:40,440 --> 01:00:43,615 >> STUDENT 60: Ställ bara in det som någon slumpmässig karaktär. 1275 01:00:43,615 --> 01:00:49,150 1276 01:00:49,150 --> 01:00:51,640 Bara gör char buffert jämlikar tecknet. 1277 01:00:51,640 --> 01:00:53,795 Och sedan, när du har buffert där - 1278 01:00:53,795 --> 01:00:54,110 >> JASON Hirschhorn: Vänta. 1279 01:00:54,110 --> 01:00:55,110 Char buffert? 1280 01:00:55,110 --> 01:00:55,880 Så ingen stjärna? 1281 01:00:55,880 --> 01:00:56,390 >> STUDENT 60: Yeah. 1282 01:00:56,390 --> 01:00:58,560 Ta ut stjärnan. 1283 01:00:58,560 --> 01:01:00,690 Lika med en slumpmässig karaktär. 1284 01:01:00,690 --> 01:01:01,460 >> JASON Hirschhorn: OK. 1285 01:01:01,460 --> 01:01:02,420 Så ge mig en. 1286 01:01:02,420 --> 01:01:03,170 >> STUDENT 60: Like a eller något. 1287 01:01:03,170 --> 01:01:06,160 Och sedan när du har buffert där använder du en - 1288 01:01:06,160 --> 01:01:06,420 >> STUDENT 61: Star? 1289 01:01:06,420 --> 01:01:07,650 Åh nej, et-tecknet. 1290 01:01:07,650 --> 01:01:09,000 >> STUDENT 60: Använd et-tecknet. 1291 01:01:09,000 --> 01:01:09,470 >> JASON Hirschhorn: OK. 1292 01:01:09,470 --> 01:01:11,320 Och hur är det i fwrite? 1293 01:01:11,320 --> 01:01:14,150 >> STUDENT 60: Använd et-tecknet igen. 1294 01:01:14,150 --> 01:01:14,320 >> JASON Hirschhorn: Okej. 1295 01:01:14,320 --> 01:01:20,970 Så din idé är, vi skapar en röding och sätta något i det, och sedan 1296 01:01:20,970 --> 01:01:22,612 skriva till den röding. 1297 01:01:22,612 --> 01:01:23,760 >> STUDENT 60: Yeah. 1298 01:01:23,760 --> 01:01:25,916 >> JASON Hirschhorn: Vad tror folk tycker? 1299 01:01:25,916 --> 01:01:27,770 >> STUDENT 62: Det är invecklade. 1300 01:01:27,770 --> 01:01:28,460 >> JASON Hirschhorn: OK. 1301 01:01:28,460 --> 01:01:29,760 Låt oss dra ut det. 1302 01:01:29,760 --> 01:01:35,720 Så den här gången kommer jag att göra detta i rött på stacken här, och då kan vi 1303 01:01:35,720 --> 01:01:36,410 kommer att ha - 1304 01:01:36,410 --> 01:01:36,822 ooh! 1305 01:01:36,822 --> 01:01:38,060 Ursäkta. 1306 01:01:38,060 --> 01:01:45,930 Så den här gången har vi något som kallas buffert, och det är på stacken. 1307 01:01:45,930 --> 01:01:48,430 Rätta? 1308 01:01:48,430 --> 01:01:51,520 Och vi sparar på det en, till en början. 1309 01:01:51,520 --> 01:01:53,830 >> Sedan har vi vår uppmaning till fread. 1310 01:01:53,830 --> 01:02:01,300 Vad fread gör är det tar ett byte från vår fil och placerar den någonstans. 1311 01:02:01,300 --> 01:02:04,570 Det sätter den i oavsett sak är att peka på. 1312 01:02:04,570 --> 01:02:09,130 Nåväl, innan vi hade den här adressen - 1313 01:02:09,130 --> 01:02:10,250 0x0. 1314 01:02:10,250 --> 01:02:13,349 Nu vad adress har vi? 1315 01:02:13,349 --> 01:02:14,650 >> STUDENT 63: Allt vad adressbufferten är. 1316 01:02:14,650 --> 01:02:15,970 >> JASON Hirschhorn: Allt vad adressbufferten är. 1317 01:02:15,970 --> 01:02:22,370 Det kommer förmodligen att bli något liknande. 1318 01:02:22,370 --> 01:02:26,950 Förmodligen kommer att börja med en b och ett f, och sedan har sex andra 1319 01:02:26,950 --> 01:02:27,970 hexadecimala siffror. 1320 01:02:27,970 --> 01:02:28,480 Spelar ingen roll. 1321 01:02:28,480 --> 01:02:29,470 Vissa adress. 1322 01:02:29,470 --> 01:02:31,410 Och vi passerar den adressen i. 1323 01:02:31,410 --> 01:02:34,790 >> Och vi ska sätta vår en byte sak på den adressen. 1324 01:02:34,790 --> 01:02:38,470 Så vi kommer att sätta vår en byte sak inne här. 1325 01:02:38,470 --> 01:02:40,800 Och sedan ska vi skriva från vad är någonsin inne här. 1326 01:02:40,800 --> 01:02:43,425 1327 01:02:43,425 --> 01:02:45,380 Är det någon som har några frågor om det? 1328 01:02:45,380 --> 01:02:50,990 1329 01:02:50,990 --> 01:02:54,690 Vem tror att denna kod kommer att fungera? 1330 01:02:54,690 --> 01:02:56,020 >> Räck upp handen om du tror denna kod kommer att fungera. 1331 01:02:56,020 --> 01:02:57,270 Du måste ta ställning. 1332 01:02:57,270 --> 01:03:00,670 1333 01:03:00,670 --> 01:03:02,500 Och vem tror denna kod inte kommer att fungera? 1334 01:03:02,500 --> 01:03:04,610 Räck upp handen. 1335 01:03:04,610 --> 01:03:06,750 Alla andra ska vara höja sin hand. 1336 01:03:06,750 --> 01:03:07,670 OK. 1337 01:03:07,670 --> 01:03:09,390 Michael, var står du? 1338 01:03:09,390 --> 01:03:10,680 >> MICHAEL: Jag kan inte bestämma mig. 1339 01:03:10,680 --> 01:03:12,070 Typ av i mitten. 1340 01:03:12,070 --> 01:03:12,736 >> JASON Hirschhorn: Du är i mitten. 1341 01:03:12,736 --> 01:03:13,092 Välj en. 1342 01:03:13,092 --> 01:03:14,400 >> MICHAEL: Jag måste tro och säger att det kommer att fungera. 1343 01:03:14,400 --> 01:03:14,660 >> JASON Hirschhorn: OK. 1344 01:03:14,660 --> 01:03:16,047 Du har tro och säger att det fungerar? 1345 01:03:16,047 --> 01:03:26,490 1346 01:03:26,490 --> 01:03:27,020 Vad hände? 1347 01:03:27,020 --> 01:03:28,270 >> [inplacering UTTRYCKER] 1348 01:03:28,270 --> 01:03:35,170 1349 01:03:35,170 --> 01:03:35,950 >> JASON Hirschhorn: Nej seg fel. 1350 01:03:35,950 --> 01:03:40,320 Hur kan vi kontrollera om två saker är lika? 1351 01:03:40,320 --> 01:03:42,060 Två filer är lika. 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 kontroller för skillnaderna mellan två filer, och om den återvänder 1355 01:03:51,630 --> 01:03:52,890 ingenting, de är identiska. 1356 01:03:52,890 --> 01:03:59,030 Och om vi öppnar upp, vi får vår fil. 1357 01:03:59,030 --> 01:04:00,490 Så det var den rätta lösningen. 1358 01:04:00,490 --> 01:04:01,780 Låt oss titta tillbaka på det en gång till. 1359 01:04:01,780 --> 01:04:04,080 Vi gjorde faktiskt inte ens måste initiera den. 1360 01:04:04,080 --> 01:04:05,520 >> Det skulle antagligen se lite renare om du inte lägger 1361 01:04:05,520 --> 01:04:07,680 något slumpmässigt i det. 1362 01:04:07,680 --> 01:04:13,070 Poängen är, du behövs för att skapa lite utrymme för att lagra något från 1363 01:04:13,070 --> 01:04:15,530 fread och ta något slut fwrite. 1364 01:04:15,530 --> 01:04:18,400 Och det där måste vara antingen en lokal variabel på stacken - du 1365 01:04:18,400 --> 01:04:19,890 kunde ha malloc'd lite utrymme. 1366 01:04:19,890 --> 01:04:23,030 >> Så vi kunde faktiskt ha skriftlig malloc här, och 1367 01:04:23,030 --> 01:04:25,420 som skulle ha fungerat. 1368 01:04:25,420 --> 01:04:28,660 Och då skulle vi ha förvaring våra saker någonstans på högen. 1369 01:04:28,660 --> 01:04:31,940 Men detta är faktiskt sannolikt, den mest eleganta lösningen. 1370 01:04:31,940 --> 01:04:34,490 Bara skapa utrymme på stacken för dessa saker att gå. 1371 01:04:34,490 --> 01:04:37,690 1372 01:04:37,690 --> 01:04:38,990 >> Jag skulle ha två andra kommentarer. 1373 01:04:38,990 --> 01:04:44,650 Om du skulle ta sin tur i detta, och sedan få poäng på detta, mina kommentarer 1374 01:04:44,650 --> 01:04:47,400 skulle vara som följer. 1375 01:04:47,400 --> 01:04:54,300 Dessa 1 är här, för mig, titta som magic numbers. 1376 01:04:54,300 --> 01:04:56,860 Denna 1, i termer av fread, vettigt. 1377 01:04:56,860 --> 01:04:59,580 Det är många saker att läsa eller skriva. 1378 01:04:59,580 --> 01:05:03,740 >> Men här en här bör förmodligen vara något annat. 1379 01:05:03,740 --> 01:05:05,180 Så vad är en lösning? 1380 01:05:05,180 --> 01:05:06,545 >> STUDENT 65: Storlek på byte. 1381 01:05:06,545 --> 01:05:10,100 1382 01:05:10,100 --> 01:05:11,080 >> JASON Hirschhorn: Gillar det? 1383 01:05:11,080 --> 01:05:13,130 >> STUDENT 65: Storlek på röding. 1384 01:05:13,130 --> 01:05:13,820 >> JASON Hirschhorn: Storlek på röding. 1385 01:05:13,820 --> 01:05:15,290 Ja, är byte inte en typ. 1386 01:05:15,290 --> 01:05:16,320 Så storleken på röding verk. 1387 01:05:16,320 --> 01:05:30,270 Vi skulle kunna ha, på toppen av vår kod, # definierat det. 1388 01:05:30,270 --> 01:05:33,410 Kallade något BYTE och det är verkligen en röding. 1389 01:05:33,410 --> 01:05:37,675 Egentligen en ännu bättre metod kan ha varit här - 1390 01:05:37,675 --> 01:05:39,391 uint. 1391 01:05:39,391 --> 01:05:40,780 Någon som vet vad det är? 1392 01:05:40,780 --> 01:05:44,388 1393 01:05:44,388 --> 01:05:44,840 >> Ursäkta. 1394 01:05:44,840 --> 01:05:46,090 Jag har det bakåt. 1395 01:05:46,090 --> 01:05:51,620 1396 01:05:51,620 --> 01:05:52,200 Vänta, nej. 1397 01:05:52,200 --> 01:05:53,450 Vilken väg tar det vägen? 1398 01:05:53,450 --> 01:05:58,071 1399 01:05:58,071 --> 01:05:59,660 Någon som vet vad det är? 1400 01:05:59,660 --> 01:06:00,950 Yeah. 1401 01:06:00,950 --> 01:06:05,650 >> STUDENT 67: Tänkt att hjälpa standardisera över system saker som 1402 01:06:05,650 --> 01:06:08,760 har - som heltal utan tecken som har 8 byte? 1403 01:06:08,760 --> 01:06:11,785 >> JASON Hirschhorn: Det är exakt rätt. 1404 01:06:11,785 --> 01:06:14,310 På olika maskiner, storleken på en röding - 1405 01:06:14,310 --> 01:06:15,180 vanligtvis inte en röding. 1406 01:06:15,180 --> 01:06:16,100 Tecken är vanligtvis en bitgrupp. 1407 01:06:16,100 --> 01:06:19,590 Men storleken på andra datatyper är olika storlekar på en 32-bitars maskin 1408 01:06:19,590 --> 01:06:21,370 jämfört med en 64-bitars maskin. 1409 01:06:21,370 --> 01:06:25,180 En uint8_t är alltid 8 bitar - 1410 01:06:25,180 --> 01:06:27,210 alltid en bitgrupp. 1411 01:06:27,210 --> 01:06:29,580 >> Och jag måste inkludera att standard int header-fil. 1412 01:06:29,580 --> 01:06:35,040 Så nu, det hade förmodligen varit det bästa sättet att skriva den här koden. 1413 01:06:35,040 --> 01:06:40,160 1414 01:06:40,160 --> 01:06:41,450 Så jag bli av med de magiska siffrorna. 1415 01:06:41,450 --> 01:06:44,690 Och jag har också en mer logisk skriver för buffert. 1416 01:06:44,690 --> 01:06:49,450 Det är inte bara en röding, det är ett byte, vilket är vad vi förväntar oss att det ska vara. 1417 01:06:49,450 --> 01:06:53,400 >> Och här uppe, vi har faktiskt varit lite mer robust. 1418 01:06:53,400 --> 01:06:55,190 Vi ska inte kalla det en röding, som - 1419 01:06:55,190 --> 01:06:58,630 kanske, vem vet - kan vara en annan storleken på olika maskiner. 1420 01:06:58,630 --> 01:07:02,025 Vi är faktiskt säger det är precis en byte, alltid, oavsett vad. 1421 01:07:02,025 --> 01:07:05,810 Och om vi ser här, vi gör cp. 1422 01:07:05,810 --> 01:07:08,340 Uh-oh. 1423 01:07:08,340 --> 01:07:09,590 Vad hände? 1424 01:07:09,590 --> 01:07:14,470 1425 01:07:14,470 --> 01:07:16,170 >> STUDENT 68: Det kan vara påslagen. 1426 01:07:16,170 --> 01:07:17,880 >> JASON Hirschhorn: Vad? 1427 01:07:17,880 --> 01:07:19,130 >> STUDENT 69: Är det? 1428 01:07:19,130 --> 01:07:21,940 1429 01:07:21,940 --> 01:07:25,080 >> STUDENT 70: Du gjorde inte definiera det som en typ. 1430 01:07:25,080 --> 01:07:28,684 >> STUDENT 71: Men det ska definieras i standarden. 1431 01:07:28,684 --> 01:07:29,934 >> STUDENT 72: Vad händer? 1432 01:07:29,934 --> 01:07:37,660 1433 01:07:37,660 --> 01:07:40,210 >> STUDENT 73: Bör definiera vara versaler? 1434 01:07:40,210 --> 01:07:41,370 >> JASON Hirschhorn: Så det är inte # define. 1435 01:07:41,370 --> 01:07:45,490 Faktiskt, i detta fall, är jag kommer att använda typedef. 1436 01:07:45,490 --> 01:07:48,590 Eftersom vi använder det som en typ på en plats. 1437 01:07:48,590 --> 01:07:51,990 Så i det här fallet, vi faktiskt vill typedef som vi skriver ut en ny typ 1438 01:07:51,990 --> 01:07:54,490 byte, och det är i huvudsak detta. 1439 01:07:54,490 --> 01:07:56,590 Det är lite annorlunda än # define. 1440 01:07:56,590 --> 01:08:02,740 >> Och nu, fungerar vår kod perfekt. 1441 01:08:02,740 --> 01:08:05,230 Så, återigen, # define tar något, ersätter det överallt 1442 01:08:05,230 --> 01:08:06,780 med den andra saken. 1443 01:08:06,780 --> 01:08:07,920 Det är bara ett makro - 1444 01:08:07,920 --> 01:08:09,420 stenografi för att bli av magic numbers. 1445 01:08:09,420 --> 01:08:11,360 Men i detta fall, eftersom vi är använder den som en typ - 1446 01:08:11,360 --> 01:08:12,180 just här - 1447 01:08:12,180 --> 01:08:19,880 För att detta ska fungera, vi behöver att typedef vad byte är. 1448 01:08:19,880 --> 01:08:21,840 >> Och vi definiera det här. 1449 01:08:21,840 --> 01:08:24,750 Det är inte en struct, det är faktiskt bara ett heltal utan tecken. 1450 01:08:24,750 --> 01:08:27,680 Det är en byte långt. 1451 01:08:27,680 --> 01:08:31,910 Denna kod kommer att finnas tillgängliga på nätet, och ni alla borde ha det just nu. 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 minuter kvar att gå över problemet set 5. 1455 01:08:41,359 --> 01:08:44,270 Jag vill gå igenom copy.c tillsammans, och sedan ska vi tala kort 1456 01:08:44,270 --> 01:08:47,120 om de andra delarna av problemet inställd. 1457 01:08:47,120 --> 01:08:48,899 Så låt mig dra upp copy.c. 1458 01:08:48,899 --> 01:09:03,930 1459 01:09:03,930 --> 01:09:08,810 Och det häftiga är, vi har faktiskt redan skrivit en hel del av denna kod. 1460 01:09:08,810 --> 01:09:11,180 >> Koden skrev vi bokstavligen bara kom ut här när jag var 1461 01:09:11,180 --> 01:09:13,120 skriver detta på min egen. 1462 01:09:13,120 --> 01:09:16,990 Men detta är copy.c, är grunden för de två första delarna av 1463 01:09:16,990 --> 01:09:22,340 problemet set till whodunit.c, vilket du behöver för att skriva, och resize.c. 1464 01:09:22,340 --> 01:09:27,050 Recover.c, som är den tredje och sista del av problemet set, är inte 1465 01:09:27,050 --> 01:09:29,529 baserad bort av denna fil. 1466 01:09:29,529 --> 01:09:32,200 >> Du kommer att behöva skriva den filen, Vi ger dig en mall för att 1467 01:09:32,200 --> 01:09:34,620 fil, men det har ingenting att göra med copy.c. 1468 01:09:34,620 --> 01:09:38,675 Men eftersom copy.c är grunden för de två första delarna, vi ska 1469 01:09:38,675 --> 01:09:42,000 för att gå igenom det nu, så att du har en bra känsla för vad den gör. 1470 01:09:42,000 --> 01:09:43,640 >> Och kommentarerna ger en del av det bort. 1471 01:09:43,640 --> 01:09:45,120 Vi har redan skrivit en del av detta. 1472 01:09:45,120 --> 01:09:49,220 Först ska vi se till vi får tre argument. 1473 01:09:49,220 --> 01:09:50,560 Därefter ska vi komma ihåg filnamnet. 1474 01:09:50,560 --> 01:09:52,960 Så vi hoppade över detta steg när Vi kodade vår sak - 1475 01:09:52,960 --> 01:09:54,700 när vår cp. 1476 01:09:54,700 --> 01:09:56,750 Men här, de gör det lite renare. 1477 01:09:56,750 --> 01:09:59,350 >> De kontrollerar att båda filerna är bra, i 1478 01:09:59,350 --> 01:10:00,450 Förutom att öppna dem. 1479 01:10:00,450 --> 01:10:04,760 Vi skrev all denna kod just nu, så jag är kommer inte att uppehålla mig vid denna kod. 1480 01:10:04,760 --> 01:10:09,670 Nästa är en del saker som är specifika för de typer av filer som vi använder, som 1481 01:10:09,670 --> 01:10:12,240 är bitmap filer. 1482 01:10:12,240 --> 01:10:15,660 Bitmap-filer har en del metadata associerade med dem. 1483 01:10:15,660 --> 01:10:20,190 >> Så de första byte berätta om filen. 1484 01:10:20,190 --> 01:10:23,460 De är inte färgerna i pixeln i den bilden. 1485 01:10:23,460 --> 01:10:25,120 De berätta om filen. 1486 01:10:25,120 --> 01:10:28,220 Och om du läser igenom problemet set, du har mycket mer information 1487 01:10:28,220 --> 01:10:33,100 om vilka typer av metadata strukturer ingår med bitmappar. 1488 01:10:33,100 --> 01:10:39,350 >> Men det är därför vi har denna första uppsättning - denna kod här. 1489 01:10:39,350 --> 01:10:42,490 Vi läser metadata - 1490 01:10:42,490 --> 01:10:45,800 två bitar av metadata - filen rubriken och informationen rubriken. 1491 01:10:45,800 --> 01:10:51,030 Och vi kontrollerar vissa delar av det till se till att det är en sann bitmappfil 1492 01:10:51,030 --> 01:10:52,420 innan du fortsätter. 1493 01:10:52,420 --> 01:10:55,470 >> Och återigen, det är detaljer som vi behöver inte gå in på nu. 1494 01:10:55,470 --> 01:10:57,720 Om du läser igenom problemet set, kommer du att förstå dessa. 1495 01:10:57,720 --> 01:11:01,370 Lång historia kort, de är bara att säga, detta är en bitmap-fil, och 1496 01:11:01,370 --> 01:11:02,810 bekräftar att. 1497 01:11:02,810 --> 01:11:05,180 >> Nästa, vi skriver dem till ut filen. 1498 01:11:05,180 --> 01:11:05,660 Vi ser det här. 1499 01:11:05,660 --> 01:11:06,910 Vi skriver den ut pekaren. 1500 01:11:06,910 --> 01:11:09,260 1501 01:11:09,260 --> 01:11:11,320 Därefter ska vi bestämma stoppning. 1502 01:11:11,320 --> 01:11:15,240 Så återigen, som är egenhet med en bitmap-fil, några rader inkluderar 1503 01:11:15,240 --> 01:11:16,840 stoppning i slutet. 1504 01:11:16,840 --> 01:11:19,000 Och om du läser igenom problemet set, du kommer att lära dig mer om utfyllnad. 1505 01:11:19,000 --> 01:11:22,330 Detta är formeln för att hitta stoppning. 1506 01:11:22,330 --> 01:11:23,610 >> Viktigt att komma ihåg - 1507 01:11:23,610 --> 01:11:29,720 när du ändrar storlek på en bitmapp fil, stoppningen ändras. 1508 01:11:29,720 --> 01:11:31,970 När du ändrar storlek på en fil, stoppningen ändras. 1509 01:11:31,970 --> 01:11:34,310 Det kommer aldrig att bli större än 3 - 1510 01:11:34,310 --> 01:11:36,510 det ska vara 0 till 3, inkluderande. 1511 01:11:36,510 --> 01:11:38,930 Men när du ändrar storlek på något, stoppningen ändringar. 1512 01:11:38,930 --> 01:11:47,100 >> Om jag bara har en pixel i den raden, jag behöver tre byte av stoppning, eftersom 1513 01:11:47,100 --> 01:11:51,190 varje rad måste vara multipler av fyra bytes länge i en bitmap-fil. 1514 01:11:51,190 --> 01:11:56,120 Men om jag dubbla det, att gå från en pixel att två pixel, som var och en, 1515 01:11:56,120 --> 01:11:59,510 låt oss säga, är ett byte, då jag behöver två byte av stoppning för att göra 1516 01:11:59,510 --> 01:12:00,970 som är lika med fyra. 1517 01:12:00,970 --> 01:12:04,200 >> Så när jag ändra storleken på något, Jag behöver ändra beloppet 1518 01:12:04,200 --> 01:12:06,551 av stoppning jag har. 1519 01:12:06,551 --> 01:12:08,100 Är det vettigt att alla? 1520 01:12:08,100 --> 01:12:12,020 1521 01:12:12,020 --> 01:12:18,720 Därefter iterera vi över varje rad, eller genom alla rader. 1522 01:12:18,720 --> 01:12:21,400 Och sedan iterera vi igenom varje kolumn i varje rad. 1523 01:12:21,400 --> 01:12:25,330 Vi ska behandla denna bitmapp som ett rutnät, som vi har behandlat 1524 01:12:25,330 --> 01:12:26,490 styrelsen i 15. 1525 01:12:26,490 --> 01:12:29,200 >> Som vi behandlade blocken när vi tryckt dem på skärmen. 1526 01:12:29,200 --> 01:12:31,350 Ett rutnät med rader och kolumner. 1527 01:12:31,350 --> 01:12:32,350 Då - vi såg detta. 1528 01:12:32,350 --> 01:12:33,840 Vi har faktiskt bara kodat detta. 1529 01:12:33,840 --> 01:12:35,780 Vi skapade en tillfällig lagring. 1530 01:12:35,780 --> 01:12:38,710 Vi läser in där, och sedan Vi skriver ut det. 1531 01:12:38,710 --> 01:12:42,680 Detta är precis vad vi just gjorde. 1532 01:12:42,680 --> 01:12:46,760 >> Nästa, eftersom jag sa varje rad slutar i några stoppning, vi 1533 01:12:46,760 --> 01:12:48,260 hoppa över den utfyllnad - 1534 01:12:48,260 --> 01:12:51,000 den gamla stoppning. 1535 01:12:51,000 --> 01:12:52,630 Och då kan vi lägga till den igen. 1536 01:12:52,630 --> 01:12:55,140 I det här fallet skapar vi exakt samma fil. 1537 01:12:55,140 --> 01:12:56,180 Vi bara kopiera den. 1538 01:12:56,180 --> 01:12:57,700 Så denna linje är ganska dumt. 1539 01:12:57,700 --> 01:12:59,660 Vi kunde bokstavligen bara sätta stoppningen i. 1540 01:12:59,660 --> 01:13:04,290 >> Men om du ändrar storleken på filen, Vill du fortfarande här linjen? 1541 01:13:04,290 --> 01:13:08,510 1542 01:13:08,510 --> 01:13:11,560 Så om vi ändrar storleken på en fil, vill vi ändå vill hoppa 1543 01:13:11,560 --> 01:13:12,810 över den gamla stoppning? 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 gör. 1547 01:13:17,090 --> 01:13:19,290 Eftersom denna, återigen, erbjudanden med källfilen. 1548 01:13:19,290 --> 01:13:21,570 Vi bryr oss inte om utfyllnaden från källfilen. 1549 01:13:21,570 --> 01:13:23,410 Vi vill gå till nästa rad. 1550 01:13:23,410 --> 01:13:28,850 Men vi vill inte bara sätta tillbaka den gamla mängden stoppning. 1551 01:13:28,850 --> 01:13:31,540 Vi måste sätta tillbaka den ny mängd stoppning. 1552 01:13:31,540 --> 01:13:35,810 >> Så när vi ändrar storleken på en fil, ändå vill vi att hoppa över 1553 01:13:35,810 --> 01:13:38,270 stoppning i den gamla filen - vad Vi läser in från. 1554 01:13:38,270 --> 01:13:40,370 Men det vi skriver till, kommer vi att behöva lägga tillbaka några olika 1555 01:13:40,370 --> 01:13:41,890 antal vaddering som vi har fastställt. 1556 01:13:41,890 --> 01:13:42,780 Yeah. 1557 01:13:42,780 --> 01:13:44,550 >> STUDENT 75: Ordningen på dessa två linjer ingen roll, eller hur? 1558 01:13:44,550 --> 01:13:46,160 Eftersom du hanterar olika filer. 1559 01:13:46,160 --> 01:13:46,620 >> JASON Hirschhorn: Exakt. 1560 01:13:46,620 --> 01:13:48,220 Ordningen för dessa två linjer spelar ingen roll. 1561 01:13:48,220 --> 01:13:49,790 Vi skriver den här raden. 1562 01:13:49,790 --> 01:13:51,430 Det är här för filen vi skriver till. 1563 01:13:51,430 --> 01:13:54,370 Det är viktigt, så att vi får rätt mängd fyllning. 1564 01:13:54,370 --> 01:13:57,560 Detta har att göra med den i filen. 1565 01:13:57,560 --> 01:13:58,560 Vi vill hoppa över stoppningen. 1566 01:13:58,560 --> 01:13:59,470 >> Vi vill inte läsa - 1567 01:13:59,470 --> 01:14:01,500 Om vi ​​läser en byte i taget, vi bryr sig inte om de stoppning byte. 1568 01:14:01,500 --> 01:14:04,070 Vi vill flytta till nästa rad. 1569 01:14:04,070 --> 01:14:11,800 Slutligen precis som Lucy gav för oss, vi stänger filerna och återgå 0. 1570 01:14:11,800 --> 01:14:13,890 Så detta är copy.c. 1571 01:14:13,890 --> 01:14:17,850 Och vi skrev faktiskt - vi tillbringade större delen av avsnitt skriver detta, i grunden. 1572 01:14:17,850 --> 01:14:18,740 >> Du gjorde det här. 1573 01:14:18,740 --> 01:14:22,440 Så förhoppningsvis har du en bra känsla av vad som händer här. 1574 01:14:22,440 --> 01:14:25,890 Den stora skillnaden, ärligt talat, är bara denna första del som behandlar 1575 01:14:25,890 --> 01:14:29,970 egenheter i bitmap-filer. 1576 01:14:29,970 --> 01:14:33,570 Så jag har som min nästa bild, vad behöver vi göra? 1577 01:14:33,570 --> 01:14:35,510 Nåväl, låt oss tänka på deckare. 1578 01:14:35,510 --> 01:14:38,080 >> Och för någon som läser igenom problemet satt, vad gör vi 1579 01:14:38,080 --> 01:14:41,410 behöver göra DECKARE? 1580 01:14:41,410 --> 01:14:42,080 Simply. 1581 01:14:42,080 --> 01:14:42,460 Aleja. 1582 01:14:42,460 --> 01:14:48,570 >> Aleja: Kan du ta ut den del för varje pixel som betecknar rött. 1583 01:14:48,570 --> 01:14:49,730 Och sedan - 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 del av varje pixel som markerar rött. 1587 01:14:54,460 --> 01:14:57,234 Det är nära, men inte alla av det. 1588 01:14:57,234 --> 01:14:59,780 >> STUDENT 76: Tja, det finns olika sätt att göra det. 1589 01:14:59,780 --> 01:14:59,870 >> JASON Hirschhorn: OK. 1590 01:14:59,870 --> 01:15:03,070 Ge mig ett sätt. 1591 01:15:03,070 --> 01:15:08,240 >> STUDENT 76: Ta ut alla röda, och sedan betona blått och grönt. 1592 01:15:08,240 --> 01:15:10,010 >> JASON Hirschhorn: OK. 1593 01:15:10,010 --> 01:15:11,830 Så med tanke på båda dessa sätt - 1594 01:15:11,830 --> 01:15:15,210 det låter som vi ger det en bildpunkt, det har en röd, blå och grön nivå. 1595 01:15:15,210 --> 01:15:19,350 Vi vill förändra de relativa nivåerna av den röda, blå och grön, beroende 1596 01:15:19,350 --> 01:15:20,740 på detta bildelement. 1597 01:15:20,740 --> 01:15:28,380 Var i denna kod bör vi ändra den relativa rött, blått och grönt 1598 01:15:28,380 --> 01:15:29,720 nivåer av en given pixel. 1599 01:15:29,720 --> 01:15:30,600 Efter att vi har läst den - 1600 01:15:30,600 --> 01:15:32,520 innan vi skriva det? 1601 01:15:32,520 --> 01:15:34,564 Ge mig radnumret. 1602 01:15:34,564 --> 01:15:35,950 >> FLERA STUDENTER: 83. 1603 01:15:35,950 --> 01:15:37,320 >> JASON Hirschhorn: 83. 1604 01:15:37,320 --> 01:15:38,570 Så just här. 1605 01:15:38,570 --> 01:15:40,830 1606 01:15:40,830 --> 01:15:45,710 För deckare, den kod du behöver för att skrivning borde alla gå där. 1607 01:15:45,710 --> 01:15:47,640 Och det är den enda kod du behöver för att skriva. 1608 01:15:47,640 --> 01:15:51,520 Därför att, som vi hört, allt du behöver för att göra är att ändra dessa relativt blå, 1609 01:15:51,520 --> 01:15:54,420 röda och gröna nivåer från varje pixel. 1610 01:15:54,420 --> 01:15:58,250 >> Du har läst det på, och nu är du kommer att skriva ut det. 1611 01:15:58,250 --> 01:16:03,100 Hur får jag - om jag har den här grejen kallad triple, just här, och det är av 1612 01:16:03,100 --> 01:16:04,570 skriver RGBTRIPLE - 1613 01:16:04,570 --> 01:16:08,650 väl, om vi såg i bmp.h, vad är RGBTRIPLE? 1614 01:16:08,650 --> 01:16:11,450 1615 01:16:11,450 --> 01:16:12,700 >> STUDENT 77: Det är en struct. 1616 01:16:12,700 --> 01:16:17,440 1617 01:16:17,440 --> 01:16:18,900 >> JASON Hirschhorn: RGBTRIPLE är en struct. 1618 01:16:18,900 --> 01:16:22,330 Vi ser att här ända ner. 1619 01:16:22,330 --> 01:16:26,600 Och så om jag ville tillgång till, säg, röd nivå av struct, hur gör jag 1620 01:16:26,600 --> 01:16:30,005 komma åt den röda nivån på denna struct? 1621 01:16:30,005 --> 01:16:37,280 >> [KLASS Sorl] 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: Är det korrekt? 1625 01:16:48,856 --> 01:16:53,040 >> STUDENT 79: Det bör vara trippel punkt, i stället för RGBTRIPLE prick? 1626 01:16:53,040 --> 01:16:54,120 >> JASON Hirschhorn: Triple. 1627 01:16:54,120 --> 01:16:56,700 Triple är den lokala variabeln, så här, det finns inga tips här. 1628 01:16:56,700 --> 01:16:58,400 Så vi bara använda punktnotation. 1629 01:16:58,400 --> 01:17:00,480 Detta kommer att ge mig den nivå av rött. 1630 01:17:00,480 --> 01:17:06,180 Om jag vill ändra det, jag bara ställa det lika med något annat. 1631 01:17:06,180 --> 01:17:13,190 Så återigen, denna kodrad åtkomst denna variabel inuti denna struct, och 1632 01:17:13,190 --> 01:17:15,070 Vi kan ställa in den på något nytt. 1633 01:17:15,070 --> 01:17:20,040 >> Så för deckare, återigen, är det, i grund och botten vad vi behöver göra. 1634 01:17:20,040 --> 01:17:21,170 Mycket enkelt. 1635 01:17:21,170 --> 01:17:25,020 Ändra precis några relativa nivåer, och det är där den koden går. 1636 01:17:25,020 --> 01:17:27,720 Ändra storlek, å andra sidan, är lite knepigare. 1637 01:17:27,720 --> 01:17:30,900 I själva verket är omformate förmodligen svåraste delen av detta problem inställd. 1638 01:17:30,900 --> 01:17:32,720 Vi har tre minuter att gå över den. 1639 01:17:32,720 --> 01:17:34,910 >> Men återigen, vi har redan skrivit de flesta av denna kod, så vi 1640 01:17:34,910 --> 01:17:36,500 borde vara ganska bekant. 1641 01:17:36,500 --> 01:17:40,750 Vad är några saker som vi vill göra i ändra storlek, om du har läst över 1642 01:17:40,750 --> 01:17:43,470 problem set? 1643 01:17:43,470 --> 01:17:45,290 Om du ger dem till mig, vi kan prata om dem. 1644 01:17:45,290 --> 01:17:47,340 Vad är några saker som vi vill göra? 1645 01:17:47,340 --> 01:17:47,970 >> STUDENT 80: Vertikalt - 1646 01:17:47,970 --> 01:17:52,360 så du måste vågrätt ändra storlek på den, men vertikalt ändra storlek på den också? 1647 01:17:52,360 --> 01:17:58,475 >> JASON Hirschhorn: Så om vi får en pixel, och vi vill ändra storlek på den genom en 1648 01:17:58,475 --> 01:18:03,460 faktor på två, måste det nu vara storleksändras vågrätt och ändra storlek 1649 01:18:03,460 --> 01:18:05,220 vertikalt. 1650 01:18:05,220 --> 01:18:06,640 Låter det vettigt? 1651 01:18:06,640 --> 01:18:07,060 Yeah. 1652 01:18:07,060 --> 01:18:09,300 Så det är nog största utmaningen. 1653 01:18:09,300 --> 01:18:10,430 Och vi ska prata om det i en sekund. 1654 01:18:10,430 --> 01:18:11,065 Yeah. 1655 01:18:11,065 --> 01:18:15,270 >> STUDENT 81: Som jag tänkte på det var du behövde skriva ut den - 1656 01:18:15,270 --> 01:18:15,490 >> JASON Hirschhorn: Vänta. 1657 01:18:15,490 --> 01:18:17,580 Tala inte om för oss vad du gjorde. 1658 01:18:17,580 --> 01:18:20,620 Vi kommer att prata i logik. 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 Vad var frågan? 1662 01:18:27,410 --> 01:18:28,892 >> JASON Hirschhorn: Du bara höjde handen. 1663 01:18:28,892 --> 01:18:31,600 Det var ingen fråga. 1664 01:18:31,600 --> 01:18:32,520 Låt mig presentera den. 1665 01:18:32,520 --> 01:18:34,560 Låt mig bara diskutera detta kort. 1666 01:18:34,560 --> 01:18:38,400 Så vi har en pixel, vill vi kopiera den, både horisontellt och 1667 01:18:38,400 --> 01:18:39,360 vertikalt. 1668 01:18:39,360 --> 01:18:48,920 Så idealt vad vi gör här är att vi Läs i vår pixel, vi skriver det 1669 01:18:48,920 --> 01:18:51,690 men många gånger. 1670 01:18:51,690 --> 01:18:54,720 >> Men sedan har vi våra knep här, eftersom då vill vi att hoppa till 1671 01:18:54,720 --> 01:18:57,660 nästa rad och skriva den på början av nästa rad. 1672 01:18:57,660 --> 01:19:02,960 Så om vi vill att replikera både horisontellt och vertikalt, vad som är 1673 01:19:02,960 --> 01:19:05,050 ett bra sätt att göra det - 1674 01:19:05,050 --> 01:19:06,780 en bra men för att göra det? 1675 01:19:06,780 --> 01:19:11,950 Så vi behöver inte ständigt söka runt vår fil att placera saker. 1676 01:19:11,950 --> 01:19:14,360 >> Den frågan kanske inte har var vettigt, men jag tror att en 1677 01:19:14,360 --> 01:19:15,800 svara för det kommer att hjälpa. 1678 01:19:15,800 --> 01:19:17,210 >> STUDENT 82: Skapa en array? 1679 01:19:17,210 --> 01:19:20,090 >> JASON Hirschhorn: Så låt oss tänka av varje fil som en rad. 1680 01:19:20,090 --> 01:19:22,550 Låt oss tänka i termer av rader. 1681 01:19:22,550 --> 01:19:26,670 Om vi ​​har vår första raden från vår lilla bild, kan vi göra den raden 1682 01:19:26,670 --> 01:19:30,640 i en stor rad från en stor bild, och sedan kopiera den raden dock 1683 01:19:30,640 --> 01:19:34,250 många gånger som behövs för att replikeras, snarare än att gå pixel för pixel, 1684 01:19:34,250 --> 01:19:37,260 vilket blir förvirrande när hantera filer. 1685 01:19:37,260 --> 01:19:38,730 >> För om vi hade - 1686 01:19:38,730 --> 01:19:41,260 Jag kör ut i rymden. 1687 01:19:41,260 --> 01:19:46,490 Om detta är vår fil, och vi har som en pixel där, och vi vill lägga den 1688 01:19:46,490 --> 01:19:49,840 just där, har vi fortfarande en del saker att behöva gå dit när vi är 1689 01:19:49,840 --> 01:19:51,450 skriva och skapa vår nya fil - 1690 01:19:51,450 --> 01:19:53,250 vår fil som är dubbelt så stor. 1691 01:19:53,250 --> 01:19:56,820 >> Men det är verkligen svårt med filfunktioner att hoppa runt till nya linjer 1692 01:19:56,820 --> 01:20:00,260 så där, och sedan gå tillbaka hit och lägga saker där. 1693 01:20:00,260 --> 01:20:04,500 Det är nästan omöjligt att göra något så, om det är vettigt. 1694 01:20:04,500 --> 01:20:10,180 Så om vi tänker i termer av rader, kan vi ta vår rad, och sedan lägga den - 1695 01:20:10,180 --> 01:20:11,720 replikera rader vertikalt. 1696 01:20:11,720 --> 01:20:15,860 >> Och det är hur vi handskas med storleksändring vertikalt istället för horisontellt. 1697 01:20:15,860 --> 01:20:18,810 Det var typ av snabb, och lite förvirrande. 1698 01:20:18,810 --> 01:20:22,375 Tyvärr vår tid är slut. 1699 01:20:22,375 --> 01:20:27,340 Jag kommer att stå utanför för dig här som har frågor om 1700 01:20:27,340 --> 01:20:30,500 Problemet set, inklusive återhämta sig. 1701 01:20:30,500 --> 01:20:32,320 >> Så låt oss skjuta för nu. 1702 01:20:32,320 --> 01:20:34,480 Och igen, om du har några frågor, vi kan prata utanför. 1703 01:20:34,480 --> 01:20:38,294