1 00:00:00,000 --> 00:00:07,810 2 00:00:07,810 --> 00:00:09,840 >> JASON HIRSCHHORN: Welkom, iedereen, en met week 6. 3 00:00:09,840 --> 00:00:14,790 Ik ben blij om u allen levend zien en goed na Quiz 0, omdat ik weet dat 4 00:00:14,790 --> 00:00:15,810 was een beetje ruw. 5 00:00:15,810 --> 00:00:18,370 Maar gelukkig, u allen deed ongelooflijk goed. 6 00:00:18,370 --> 00:00:21,680 En dus dat is geweldig. 7 00:00:21,680 --> 00:00:25,840 Als je in mijn sectie, heb ik het meest gegeven van je back uw quizzen reeds. 8 00:00:25,840 --> 00:00:28,050 >> Een paar van jullie, ik ontmoeten na de les. 9 00:00:28,050 --> 00:00:32,360 En als je een extensie student en u nog niet uw quiz terug ontvangen 10 00:00:32,360 --> 00:00:35,490 nog, wordt uw TF waarschijnlijk bezig en sorteren het, en zal het terug te krijgen 11 00:00:35,490 --> 00:00:36,490 om u binnenkort. 12 00:00:36,490 --> 00:00:39,650 Dus mijn extensie studenten die nu kijken - hopelijk wonen - 13 00:00:39,650 --> 00:00:42,880 Ik zal uw quizzen krijgen kort ook. 14 00:00:42,880 --> 00:00:45,670 >> Onze agenda voor vandaag is als volgt. 15 00:00:45,670 --> 00:00:50,170 Ten eerste gaan we gaan over een aantal middelen die CS50 biedt aan u. 16 00:00:50,170 --> 00:00:54,590 We gaan gaan over Quiz 0, en Ik zal uw vragen te beantwoorden iedereen 17 00:00:54,590 --> 00:00:57,360 heeft over specifieke problemen. 18 00:00:57,360 --> 00:01:02,050 En dan zullen we gaan over file I / O en probleem set 5. 19 00:01:02,050 --> 00:01:07,360 Die laatste twee onderwerpen zal nemen het grootste deel van sectie vandaag. 20 00:01:07,360 --> 00:01:11,680 >> Ik heb deze lijst elke week als een herinnering aan u allen, maar van de kern 21 00:01:11,680 --> 00:01:14,650 sectie hebben we maar 90 minuten - we zijn niet in staat om alles te dekken dat ik 22 00:01:14,650 --> 00:01:16,280 zou graag dekken voor jullie. 23 00:01:16,280 --> 00:01:21,170 Maar we hebben een ton van de middelen voor u om uit te putten als je te weten 24 00:01:21,170 --> 00:01:24,000 het materiaal en werk door uw probleem stelt. 25 00:01:24,000 --> 00:01:30,810 >> Een herinnering die ik heb online een tekst doos, opgezet voor u in te vullen als u 26 00:01:30,810 --> 00:01:33,250 nog feedback voor mij, zowel positieve als 27 00:01:33,250 --> 00:01:35,180 constructief, over sectie. 28 00:01:35,180 --> 00:01:38,600 Dat URL ligt hier recht naar beneden. 29 00:01:38,600 --> 00:01:43,250 Dus alsjeblieft, neem een ​​moment als u een feedback, of het nu tijdens sectie, 30 00:01:43,250 --> 00:01:48,030 of na, of nadat u de video bekijken online, om mij uw mening. 31 00:01:48,030 --> 00:01:52,100 Ik waardeer alle van. 32 00:01:52,100 --> 00:01:55,730 >> Dus ik heb met kleine conversaties met veel van mijn 33 00:01:55,730 --> 00:01:59,350 studenten over de hele week - als ik de hand terug quizzen, praten over de 34 00:01:59,350 --> 00:02:01,480 Natuurlijk zien hoe je het doet. 35 00:02:01,480 --> 00:02:05,120 En een thema heeft zich langs te komen en meer dan in het praten over - in 36 00:02:05,120 --> 00:02:05,660 name - 37 00:02:05,660 --> 00:02:07,710 probleem stelt. 38 00:02:07,710 --> 00:02:13,090 En ik heb dat thema ingekapseld op het bord nu. 39 00:02:13,090 --> 00:02:16,630 >> Wezen, er is een verschil tussen het draaien in iets dat 40 00:02:16,630 --> 00:02:19,590 correct en iets gedaan dat is goed gedaan. 41 00:02:19,590 --> 00:02:22,920 De meeste mensen hebben gedaan fantastisch in termen van juistheid - 42 00:02:22,920 --> 00:02:25,460 5 of 4 op alle psets. 43 00:02:25,460 --> 00:02:27,930 De meeste mensen krijgen die alle van de tijd. 44 00:02:27,930 --> 00:02:31,150 >> Echter, alleen omdat je hebt gedaan iets wat niet het recht dat je hebt 45 00:02:31,150 --> 00:02:34,450 iets gedaan als elegant, of efficiënt en zo schoon je 46 00:02:34,450 --> 00:02:35,270 het zou hebben gedaan. 47 00:02:35,270 --> 00:02:36,790 En dat is wat het ontwerp - 48 00:02:36,790 --> 00:02:39,230 en in mindere mate, stijl - 49 00:02:39,230 --> 00:02:40,450 assen voor. 50 00:02:40,450 --> 00:02:45,130 Dus Ik duw jullie allemaal, en andere TFs duwen jullie, niet alleen beurt 51 00:02:45,130 --> 00:02:48,320 in dingen die juist zijn, maar zet in de dingen die goed zijn gecodeerd. 52 00:02:48,320 --> 00:02:53,060 >> Niet doen onnodig voor loops, niet de herberekening variabelen als 53 00:02:53,060 --> 00:02:53,800 je niet hoeft te doen. 54 00:02:53,800 --> 00:02:58,520 Bijvoorbeeld, terugkijkend naar probleem stellen 4, bij het plaatsen van stenen op de 55 00:02:58,520 --> 00:03:03,070 scherm, elke toer - elke steen in een bepaalde rij heeft dezelfde y-coordinaat - 56 00:03:03,070 --> 00:03:04,390 dezelfde hoogte coördineren. 57 00:03:04,390 --> 00:03:07,930 >> Zodat y-coördinaat niet hoefde te berekend in de binnenruimte 58 00:03:07,930 --> 00:03:11,070 geneste FOR-lus die je waarschijnlijk gebruikt die stenen op het scherm gezet. 59 00:03:11,070 --> 00:03:14,030 Alleen moet elk berekenen keer dat u een rij geschakeld, of 60 00:03:14,030 --> 00:03:15,200 bewoog een rij naar beneden. 61 00:03:15,200 --> 00:03:19,760 Dus zeggen dat als er 10 stenen in een rij, kan elke steen dezelfde hebben 62 00:03:19,760 --> 00:03:22,260 y-coördinaat, en dat y-coordinaat kan gewoon worden berekend 63 00:03:22,260 --> 00:03:23,550 eens en voor altijd van die. 64 00:03:23,550 --> 00:03:27,810 >> Het hoeft niet te worden berekend 10 tijden, evenmin deze berekening nodig 65 00:03:27,810 --> 00:03:30,220 gebeuren in de werkelijke functie aan te roepen - 66 00:03:30,220 --> 00:03:33,020 de nieuwe gracked functie oproep. 67 00:03:33,020 --> 00:03:37,820 Dus als dat was een beetje verwarrend voor u, meer algemeen, dingen die 68 00:03:37,820 --> 00:03:40,730 niet nodig om elke keer weer gebeuren je door een FOR-lus mag niet 69 00:03:40,730 --> 00:03:42,900 gezet in de FOR-lus, en mag niet gebeuren elke keer dat je gaat 70 00:03:42,900 --> 00:03:44,080 door de FOR-lus. 71 00:03:44,080 --> 00:03:49,270 >> Een ander goed ontwerp voorbeeld zagen we in week 3 voor 15, kon je houden 72 00:03:49,270 --> 00:03:50,500 spoor van de nul. 73 00:03:50,500 --> 00:03:53,600 Dus als je het bord initialiseren, u opslaan - in een globale variabele, misschien - 74 00:03:53,600 --> 00:03:56,140 de x en y-coördinaat van het nulpunt. 75 00:03:56,140 --> 00:03:57,520 En dan wanneer je - 76 00:03:57,520 --> 00:04:00,310 in uw verhuizing functie, wanneer u te maken een succesvolle zet, u een update van de 77 00:04:00,310 --> 00:04:02,040 locatie van de nul. 78 00:04:02,040 --> 00:04:06,240 >> Dat zou je redden van die te maken hebben passen voor een loop om te kijken door de 79 00:04:06,240 --> 00:04:10,700 boord van elk moment in je move functie en vind de nul, of vind de tegel, 80 00:04:10,700 --> 00:04:12,460 en dan kijken wat het ernaast. 81 00:04:12,460 --> 00:04:16,329 In plaats daarvan, heb je de locatie van de nul, kun je gewoon kijken boven, onder, 82 00:04:16,329 --> 00:04:21,160 en links en rechts ervan, te vinden de tegel die je zocht. 83 00:04:21,160 --> 00:04:24,970 >> Dus in termen van de programma's zijn we schrijven, ze zijn nooit groot genoeg 84 00:04:24,970 --> 00:04:28,580 dat sommige van deze ontwerpbeslissingen werkelijk gaan belemmeren uw 85 00:04:28,580 --> 00:04:31,670 programma, of maak het langzamer draaien, of misschien zelfs onvoldoende geheugen. 86 00:04:31,670 --> 00:04:35,030 Maar we zijn nog steeds te duwen jullie te schrijven als elegant en 87 00:04:35,030 --> 00:04:36,450 efficiënte code mogelijk. 88 00:04:36,450 --> 00:04:39,910 >> Dus als je eindigen met het schrijven dingen dat een aanzienlijk groter zijn 89 00:04:39,910 --> 00:04:44,660 reikwijdte zullen zij goede geschreven ontwerpen naast juistheid. 90 00:04:44,660 --> 00:04:46,300 Dus een aantal van jullie hebben bracht dat uit. 91 00:04:46,300 --> 00:04:48,560 Dat is iets wat we zoeken - iets wat we zullen blijven 92 00:04:48,560 --> 00:04:49,840 duw je jongens op. 93 00:04:49,840 --> 00:04:52,460 >> Als je ooit nog vragen hebben over de ontwerp van uw programma, voel je vrij 94 00:04:52,460 --> 00:04:56,870 om uit te reiken naar mij, en ik ben blij om lopen door uw programma met u, 95 00:04:56,870 --> 00:05:01,320 en wijzen op een aantal van de ontwerpen beslissingen die je gemaakt, en geven u een aantal 96 00:05:01,320 --> 00:05:06,240 suggesties over hoe om zelfs betere ontwerpbeslissingen. 97 00:05:06,240 --> 00:05:08,870 >> Dus we gaan om verder te gaan om te praten over Quiz 0. 98 00:05:08,870 --> 00:05:11,300 Voordat we dat doen, doet niemand Voor vragen over wat 99 00:05:11,300 --> 00:05:14,252 Ik heb tot nu toe gedekt? 100 00:05:14,252 --> 00:05:21,500 >> [Geritsel NOISE] 101 00:05:21,500 --> 00:05:22,750 >> JASON HIRSCHHORN: Zeven seconden. 102 00:05:22,750 --> 00:05:23,250 OK. 103 00:05:23,250 --> 00:05:24,970 Laten we praten over Quiz 0 voor een beetje. 104 00:05:24,970 --> 00:05:26,700 De meeste van jullie hebben je Quiz 0 terug. 105 00:05:26,700 --> 00:05:29,820 Als je dat niet doet, hopelijk Herinner je je het een beetje. 106 00:05:29,820 --> 00:05:34,770 Maar als je Quiz 0, dan heb je genomen hebben ook toegang tot de PDF online in 107 00:05:34,770 --> 00:05:35,890 de sample oplossingen. 108 00:05:35,890 --> 00:05:39,480 >> Heeft iemand nog vragen voordat We springen in de week van materiaal over 109 00:05:39,480 --> 00:05:41,520 een bepaald probleem op Quiz 0 - 110 00:05:41,520 --> 00:05:44,630 waarom is het antwoord wat het is? 111 00:05:44,630 --> 00:05:47,255 Is er iemand in de war over iets? 112 00:05:47,255 --> 00:05:50,230 Zelfs als u hebt het probleem recht, maar zou gewoon willen dat ik het uit te leggen een beetje 113 00:05:50,230 --> 00:05:52,640 meer, ik ben blij dat nu gebeuren. 114 00:05:52,640 --> 00:05:57,800 >> Dus ik heb jullie gevraagd om kom bereid met een aantal 115 00:05:57,800 --> 00:05:59,440 gedachten over Quiz 0. 116 00:05:59,440 --> 00:06:02,660 Dus die willen ons begon met een vraag of 117 00:06:02,660 --> 00:06:04,655 opmerking over Quiz 0? 118 00:06:04,655 --> 00:06:07,435 119 00:06:07,435 --> 00:06:10,410 >> [PAPIER RITSELENDE] 120 00:06:10,410 --> 00:06:11,470 >> JASON HIRSCHHORN: Niet iedereen deed perfect. 121 00:06:11,470 --> 00:06:12,720 Dus ik weet [Lacht] 122 00:06:12,720 --> 00:06:15,950 er moet een aantal vragen worden over 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: Nummer 10. 128 00:06:30,520 --> 00:06:33,560 >> JASON HIRSCHHORN: Nummer 10. 129 00:06:33,560 --> 00:06:35,400 Welke was nummer 10? 130 00:06:35,400 --> 00:06:35,840 >> OMPICA: The - 131 00:06:35,840 --> 00:06:36,420 >> JASON HIRSCHHORN: I haven't - 132 00:06:36,420 --> 00:06:37,670 >> OMPICA: De include - 133 00:06:37,670 --> 00:06:40,060 134 00:06:40,060 --> 00:06:42,180 >> JASON HIRSCHHORN: Nummer 10 was acht i - het schrijven van acht tot i? 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 Dus nog een vraag die je zou kunnen hebben vroeg was ik vooruitziende blik? 138 00:06:47,390 --> 00:06:48,630 Het antwoord is ja. 139 00:06:48,630 --> 00:06:52,060 In hoofdstuk voordat de quiz, vroeg ik jullie om zowel Sterling coderen en 140 00:06:52,060 --> 00:06:52,980 acht i. 141 00:06:52,980 --> 00:06:54,770 Beiden overkomen verschijnen op de quiz. 142 00:06:54,770 --> 00:06:57,510 Dus hopelijk, je betaald aandacht aan. 143 00:06:57,510 --> 00:07:02,520 >> En als je had, dan zou je waarschijnlijk goed gedaan op die twee. 144 00:07:02,520 --> 00:07:06,030 Maar acht tot ik, hebben we niet echt code in klasse, maar het was, wederom, 145 00:07:06,030 --> 00:07:07,500 gevraagd op de quiz. 146 00:07:07,500 --> 00:07:13,270 Dus een paar dingen rekening Let bij het coderen van acht tot i. 147 00:07:13,270 --> 00:07:17,320 Het eerste ding, per de vraag, was dat je nodig had om te controleren of de string 148 00:07:17,320 --> 00:07:20,300 was gelijk aan null. 149 00:07:20,300 --> 00:07:28,060 >> Een paar mensen probeerden later controleren in het programma als 's beugel ik was - 150 00:07:28,060 --> 00:07:30,940 dus een specifiek karakter in dat snaar - was gelijk aan null. 151 00:07:30,940 --> 00:07:35,600 Maar vergeet niet, dat null is in wezen - het is goed om te denken aan 152 00:07:35,600 --> 00:07:39,100 null als een nul pointer - een pointer naar nul - 153 00:07:39,100 --> 00:07:40,920 ergens in het geheugen waar je kunt nooit toegang. 154 00:07:40,920 --> 00:07:44,730 >> Dus als er iets is gelijk aan nul, u weten dat het niet is geïnitialiseerd, 155 00:07:44,730 --> 00:07:46,430 of er is niets daar. 156 00:07:46,430 --> 00:07:50,950 Dus s is een char ster, s beugel i is een char. 157 00:07:50,950 --> 00:07:57,410 Dus is het zinvol om te vergelijken en op null, maar niet s beugel ik op null. 158 00:07:57,410 --> 00:07:59,390 Maar nogmaals - dus dat was het eerste wat dat je moest doen - 159 00:07:59,390 --> 00:08:03,510 controleren om ervoor te zorgen dat u daadwerkelijk kreeg een echte string. 160 00:08:03,510 --> 00:08:08,020 >> Vervolgens moet je wilde gaan door elk teken in de string. 161 00:08:08,020 --> 00:08:12,500 En dat zou hetzelfde zijn als een s beugel Ik, bijvoorbeeld, als ik uw iterator. 162 00:08:12,500 --> 00:08:17,250 En neem dat karakter, en krijgen de werkelijke waarde. 163 00:08:17,250 --> 00:08:21,800 Je heb het opgeslagen als een char, maar de ASCII-waarde voor nul - 164 00:08:21,800 --> 00:08:23,010 nul als een karakter - 165 00:08:23,010 --> 00:08:25,450 is eigenlijk het getal nul. 166 00:08:25,450 --> 00:08:28,700 Het is een ander nummer dat u kunt opzoeken in de ASCII-tabel. 167 00:08:28,700 --> 00:08:30,790 >> Dus een manier te corrigeren voor - Waarschijnlijk de beste manier te corrigeren 168 00:08:30,790 --> 00:08:33,760 dat - is af te trekken van het het karakter waarde - 169 00:08:33,760 --> 00:08:35,140 nul als een karakter. 170 00:08:35,140 --> 00:08:38,490 Dus minus enkel aanhalingsteken, nul, nog een enkele offerte. 171 00:08:38,490 --> 00:08:44,620 Dat zal het aantal u hebt als een char, en krijgen die gelijk is aan 172 00:08:44,620 --> 00:08:46,720 het nummer als een echte integer. 173 00:08:46,720 --> 00:08:50,300 >> En dat is zeer vergelijkbaar met de aanpak veel mensen namen in de 174 00:08:50,300 --> 00:08:52,800 probleem set 2, met Caesar en Viginere - 175 00:08:52,800 --> 00:08:55,160 die cijfers, als je werden ze draaien. 176 00:08:55,160 --> 00:08:59,210 Dus nadat je het hebt als een nummer uit nul tot negen, dan - afhankelijk 177 00:08:59,210 --> 00:09:02,750 waar het gaat in het uiteindelijke aantal - je nodig hebt om het te vermenigvuldigen 178 00:09:02,750 --> 00:09:04,120 met een vermogen van 10. 179 00:09:04,120 --> 00:09:07,340 >> Sommige mensen verplaatst van de achterzijde naar de voorkant, en vermenigvuldigd het individu 180 00:09:07,340 --> 00:09:08,940 getal met een macht van 10. 181 00:09:08,940 --> 00:09:11,160 Sommige mensen verplaatst van de voor naar achter - 182 00:09:11,160 --> 00:09:14,430 en dus nam de hoogste bestellen nummers eerst - 183 00:09:14,430 --> 00:09:18,190 en zou redden die in een globale teller variabele. 184 00:09:18,190 --> 00:09:20,880 En dan elke keer door de FOR lus, vermenigvuldig dit reusachtige mondiale 185 00:09:20,880 --> 00:09:25,640 variabele teller met 10, te maken ruimte voor de volgende char. 186 00:09:25,640 --> 00:09:28,750 >> Dus dat was een beetje verwarrend zonder mij te schrijven op het bord. 187 00:09:28,750 --> 00:09:31,550 Maar de monsteroplossing is voor u beschikbaar. 188 00:09:31,550 --> 00:09:32,870 Maar dat waren de grote dingen we zochten. 189 00:09:32,870 --> 00:09:36,400 Ook een controle om ervoor te zorgen dat elke individuele karakter was inderdaad een 190 00:09:36,400 --> 00:09:39,780 karakter tussen nul en negen, en niet enkele andere karakter, zoals een A, 191 00:09:39,780 --> 00:09:41,160 bijvoorbeeld. 192 00:09:41,160 --> 00:09:43,150 >> Dat waren de dingen die we zochten in die vraag. 193 00:09:43,150 --> 00:09:46,510 194 00:09:46,510 --> 00:09:47,980 Is dat een antwoord op je vraag? 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 Zijn er nog andere vragen over Quiz 0? 198 00:09:53,940 --> 00:09:55,440 Wat over het compileren? 199 00:09:55,440 --> 00:09:56,740 Iedereen samenstellen toch? 200 00:09:56,740 --> 00:09:58,370 Nee. 201 00:09:58,370 --> 00:09:58,840 Er waren - 202 00:09:58,840 --> 00:10:01,010 [Lacht] 203 00:10:01,010 --> 00:10:03,265 Heeft u vragen over de compilatie proces? 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 >> [PAPIER RITSELENDE] 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: Is nummer 7 - willekeurig? 210 00:10:14,140 --> 00:10:16,500 >> JASON HIRSCHHORN: Nummer 7. 211 00:10:16,500 --> 00:10:20,670 Nummer 7 was krijgen een willekeurig getal. 212 00:10:20,670 --> 00:10:21,110 Excellent. 213 00:10:21,110 --> 00:10:25,630 Dus je krijgt een geheel getal een en een integer b, en u wilt een willekeurige 214 00:10:25,630 --> 00:10:28,710 integer tussen a en b. 215 00:10:28,710 --> 00:10:31,740 We kunnen eigenlijk schrijven deze op het bestuur, omdat deze een 216 00:10:31,740 --> 00:10:33,320 was een regel code - 217 00:10:33,320 --> 00:10:34,390 een manier om het te doen. 218 00:10:34,390 --> 00:10:37,810 >> Dus we krijgen drand als een functie die we konden gebruiken. 219 00:10:37,810 --> 00:10:38,820 En wat doet drand - 220 00:10:38,820 --> 00:10:40,290 ervan uitgaande dat het is al gezaaid - 221 00:10:40,290 --> 00:10:42,316 wat doet drand terug? 222 00:10:42,316 --> 00:10:44,840 >> MICHAEL: Een float tussen 0,0 en 1,0. 223 00:10:44,840 --> 00:10:45,530 >> JASON HIRSCHHORN: Een aantal - ja. 224 00:10:45,530 --> 00:10:47,910 Een getal tussen 0 en 1. 225 00:10:47,910 --> 00:10:51,760 En dus hebben we B en A. 226 00:10:51,760 --> 00:10:55,480 En dan hebben we onze willekeurig getal tussen 0 en 1 aan ons gegeven door drand. 227 00:10:55,480 --> 00:11:01,480 228 00:11:01,480 --> 00:11:06,630 Sommige mensen probeerden b zetten, of b minus een, of iets in die 229 00:11:06,630 --> 00:11:07,960 haakjes. 230 00:11:07,960 --> 00:11:11,210 Dat zou betekenen dat ze argumenten voor deze functie. 231 00:11:11,210 --> 00:11:13,450 >> drand geen argumenten hebben - zoals getString doet 232 00:11:13,450 --> 00:11:14,330 geen argumenten nemen. 233 00:11:14,330 --> 00:11:16,600 Dus het is gewoon geopend Paren, dicht Paren - en dat zelf is 234 00:11:16,600 --> 00:11:17,330 de functie aan te roepen. 235 00:11:17,330 --> 00:11:19,770 En dat geeft je een aantal tussen 0 en 1. 236 00:11:19,770 --> 00:11:22,820 Natuurlijk, we hebben een hele reeks die nummers kunnen worden inch 237 00:11:22,820 --> 00:11:28,470 >> Zeggen, als b is 10 en een 5 is, hebben we echt wil een nummer met een bereik van 5. 238 00:11:28,470 --> 00:11:36,940 Dus het volgende wat we moeten doen is vermenigvuldig dit met het bereik b minus een. 239 00:11:36,940 --> 00:11:40,380 Dus de veronderstelling dat is vermenigvuldigd. 240 00:11:40,380 --> 00:11:42,590 En dat zal ons een aantal binnen een bepaald bereik. 241 00:11:42,590 --> 00:11:46,610 En dat specifiek bereik zijnde de verschil tussen b minus een. 242 00:11:46,610 --> 00:11:50,030 >> En ten slotte, dat zal alleen geef het uit - zeggen dat het bereik tussen b minus een 243 00:11:50,030 --> 00:11:52,520 wordt 5, dat zal ons een geven getal van 0 tot 5. 244 00:11:52,520 --> 00:11:56,000 Maar als er een is in feite 5, moeten we stimuleren Dit bereik tot waar het 245 00:11:56,000 --> 00:12:01,380 eigenlijk hoort te zijn, door het toevoegen van een. 246 00:12:01,380 --> 00:12:02,580 Zodat krijgt de logica rechts. 247 00:12:02,580 --> 00:12:03,745 En dan, zou je nog een vraag? 248 00:12:03,745 --> 00:12:04,547 >> MICHAEL: Nee. 249 00:12:04,547 --> 00:12:06,010 Ik voel me echt dom nu. 250 00:12:06,010 --> 00:12:06,405 [Lacht] 251 00:12:06,405 --> 00:12:06,730 >> JASON HIRSCHHORN: Nee. 252 00:12:06,730 --> 00:12:08,640 Voel je niet echt dom. 253 00:12:08,640 --> 00:12:10,560 Een aantal mensen moeite met deze vraag. 254 00:12:10,560 --> 00:12:13,920 En dan, de andere vraag is, drand, je zei, geeft je een float - 255 00:12:13,920 --> 00:12:14,940 retourneert een float. 256 00:12:14,940 --> 00:12:18,020 Maar deze functie inderdaad gevraagd een integer worden geretourneerd. 257 00:12:18,020 --> 00:12:23,700 >> U hoeft niet om dit expliciet werpen een integer, omdat deze 258 00:12:23,700 --> 00:12:29,090 operaties behandelen alle een drijven - als een floating point nummer. 259 00:12:29,090 --> 00:12:31,570 Als deze zal - ook als dit een geheel getal is, zal dit 260 00:12:31,570 --> 00:12:32,890 correct vermenigvuldigd. 261 00:12:32,890 --> 00:12:34,000 Alle vermenigvuldiging werkt. 262 00:12:34,000 --> 00:12:35,060 U hoeft niet om het hier uit te brengen. 263 00:12:35,060 --> 00:12:36,480 In feite moet je niet wierp hem. 264 00:12:36,480 --> 00:12:37,310 >> Dat zou - 265 00:12:37,310 --> 00:12:40,750 als je een nummer zou werpen die tussen 0 en 1 - 266 00:12:40,750 --> 00:12:42,680 een willekeurig getal, een floating point - 267 00:12:42,680 --> 00:12:47,850 dan zal het ofwel alleen 0 of 1 zijn, dus je zult al die precisie te verliezen. 268 00:12:47,850 --> 00:12:50,120 Maar aan het eind, als je terugkomt, het automatisch krijgt 269 00:12:50,120 --> 00:12:51,620 teruggestuurd als een geheel. 270 00:12:51,620 --> 00:12:56,870 Zodat u niet hoeft te doen dat casting jezelf. 271 00:12:56,870 --> 00:13:00,810 >> Dus dit was het antwoord op die vraag, nummer 7. 272 00:13:00,810 --> 00:13:02,190 Andere vragen op Quiz 0? 273 00:13:02,190 --> 00:13:03,300 Ja, Annie. 274 00:13:03,300 --> 00:13:05,050 >> ANNIE: Wanneer gaan we gebruik maken van recursieve - 275 00:13:05,050 --> 00:13:07,850 wanneer gebruiken we iteratieve loops? 276 00:13:07,850 --> 00:13:10,210 >> JASON HIRSCHHORN: Wanneer gebruik je recursieve - dus meer in het algemeen, de 277 00:13:10,210 --> 00:13:14,110 voors en tegens van recursie versus een iteratieve aanpak. 278 00:13:14,110 --> 00:13:17,110 Kan iemand bieden een pro of een con? 279 00:13:17,110 --> 00:13:19,460 Alsjeblieft? 280 00:13:19,460 --> 00:13:20,140 Niet kan iedereen het. 281 00:13:20,140 --> 00:13:22,526 Wie kan een pro of een con te bieden? 282 00:13:22,526 --> 00:13:26,963 >> [PAPIER RITSELENDE] 283 00:13:26,963 --> 00:13:29,730 >> STUDENT 1: recursieve minder codering - minder te typen? 284 00:13:29,730 --> 00:13:33,170 >> JASON HIRSCHHORN: Dus over het algemeen, recursie vooral, een functie - 285 00:13:33,170 --> 00:13:35,750 of een algoritme zoals samenvoegen soort - die zich leent 286 00:13:35,750 --> 00:13:37,300 een recursieve benadering - 287 00:13:37,300 --> 00:13:40,710 zou eenvoudiger zijn recursief coderen. 288 00:13:40,710 --> 00:13:43,940 En net meer zin het recursief doen. 289 00:13:43,940 --> 00:13:46,230 Dus dat zou een pro recursie zijn. 290 00:13:46,230 --> 00:13:46,610 Anderen? 291 00:13:46,610 --> 00:13:47,467 Yeah? 292 00:13:47,467 --> 00:13:49,240 >> STUDENT 2: Con recursie - 293 00:13:49,240 --> 00:13:50,940 Het maakt gebruik van meer geheugen. 294 00:13:50,940 --> 00:13:52,200 >> JASON HIRSCHHORN: Dus precies goed. 295 00:13:52,200 --> 00:13:55,720 Een recursieve functie zal blijven toevoegen stack frames om de stapel. 296 00:13:55,720 --> 00:13:59,690 Dus als je werkt op een hoop getallen en moeten deze bellen 297 00:13:59,690 --> 00:14:02,560 functioneren veel, dan zal je zeker nemen meer geheugen, terwijl 298 00:14:02,560 --> 00:14:05,810 een iteratieve aanpak zal alleen zet een stack frame op de stack, omdat 299 00:14:05,810 --> 00:14:08,420 het allemaal gebeurt binnen een functie. 300 00:14:08,420 --> 00:14:11,010 >> Iedere andere voor-en nadelen? 301 00:14:11,010 --> 00:14:11,500 Yeah. 302 00:14:11,500 --> 00:14:12,550 >> STUDENT 3: Voordelen voor recursie. 303 00:14:12,550 --> 00:14:15,950 Je hoeft niet te bepalen in vooraf hoe vaak de 304 00:14:15,950 --> 00:14:17,660 code moest worden herhaald. 305 00:14:17,660 --> 00:14:22,810 Je kan een vooraf bepaald aantal hebben tijden die je moet herhalen, dan 306 00:14:22,810 --> 00:14:26,420 recursie is beter, omdat duurt dat resultaat. 307 00:14:26,420 --> 00:14:27,780 >> JASON HIRSCHHORN: Ik denk dat het waar is. 308 00:14:27,780 --> 00:14:30,770 Maar ik denk dat in beide gevallen Je zou nooit - 309 00:14:30,770 --> 00:14:33,290 zou je waarschijnlijk wat te krijgen input van de gebruiker. 310 00:14:33,290 --> 00:14:35,990 Of deze functie zou wat input hebben dat zou bepalen hoe vaak het 311 00:14:35,990 --> 00:14:36,730 moet worden uitgevoerd. 312 00:14:36,730 --> 00:14:39,520 Dus over het algemeen, zou je niet moeilijk code - zelfs in een iteratieve benadering - hoe 313 00:14:39,520 --> 00:14:40,940 vele malen dat lus moet worden uitgevoerd. 314 00:14:40,940 --> 00:14:46,100 315 00:14:46,100 --> 00:14:48,670 >> Hebt u een ander je hebt denken, Annie? 316 00:14:48,670 --> 00:14:49,330 OK. 317 00:14:49,330 --> 00:14:51,650 Dus dat zijn waarschijnlijk de twee - 318 00:14:51,650 --> 00:14:54,370 de grootste pro en de grootste con een recursieve versus 319 00:14:54,370 --> 00:14:57,080 een iteratieve aanpak. 320 00:14:57,080 --> 00:14:57,690 OK. 321 00:14:57,690 --> 00:14:59,465 Iets anders op Quiz 0? 322 00:14:59,465 --> 00:15:08,940 323 00:15:08,940 --> 00:15:09,920 >> Laten we verder gaan. 324 00:15:09,920 --> 00:15:15,260 File I / O. Er is een prachtige korte deze week op file I / O die hopelijk 325 00:15:15,260 --> 00:15:19,270 u meerdere hebt bekeken tijden, en bewonderd. 326 00:15:19,270 --> 00:15:22,910 Een hoop werk ging in dat, en ik heb hoorde het is waanzinnig nuttig. 327 00:15:22,910 --> 00:15:25,740 Ik heb ook de link op deze dia, in het geval je dat nog niet had een 328 00:15:25,740 --> 00:15:29,160 kans om hem te bekijken 10 keer. 329 00:15:29,160 --> 00:15:35,280 >> Dus, gaan we kort gaan over de belangrijke stappen om het openen en werken 330 00:15:35,280 --> 00:15:38,400 met bestanden, en dan gaan we duik in een codering probleem voordat 331 00:15:38,400 --> 00:15:40,400 het onderzoeken van het probleem te stellen. 332 00:15:40,400 --> 00:15:44,330 Dus nogmaals, ik ga dit opgemaakt op het scherm, maar ik ga praten 333 00:15:44,330 --> 00:15:47,630 slechts een minuut over wat we doet hier met bestand I/O-- 334 00:15:47,630 --> 00:15:49,090 Wat betekent dat? 335 00:15:49,090 --> 00:15:55,280 >> Dat betekent dat we kunnen creëren onze programma's, en dan hebben onze programma's 336 00:15:55,280 --> 00:16:00,370 exit, en geen enkele invloed op hebben gemaakt de wereld buiten ons programma. 337 00:16:00,370 --> 00:16:04,630 Maar als we beginnen werken met bestanden - zowel hen in het lezen en het creëren van 338 00:16:04,630 --> 00:16:10,460 hen - kunnen we enig effect hebben op de wereld buiten ons programma. 339 00:16:10,460 --> 00:16:15,440 >> Net zoals als Microsoft Word niet in staat was aan een Word-documenten te maken, dan 340 00:16:15,440 --> 00:16:18,710 zodra Microsoft Word afsluit, al uw werk zou zijn gegaan, en het zou 341 00:16:18,710 --> 00:16:19,740 echt nutteloos. 342 00:16:19,740 --> 00:16:23,620 We uiteindelijk willen in staat zijn om programma's schrijven die kunnen invloed hebben op de 343 00:16:23,620 --> 00:16:31,350 wereld om hen heen, zowel door het nemen van complexe inputs - in termen van dossiers en 344 00:16:31,350 --> 00:16:37,080 via bestanden, en ook het creëren van interessante en meeslepend uitgangen - 345 00:16:37,080 --> 00:16:39,520 in termen van verschillende soorten bestanden. 346 00:16:39,520 --> 00:16:43,730 >> Dus dat is de reden waarom we beginnen te leren hoe te werken met bestanden. 347 00:16:43,730 --> 00:16:47,080 Meer specifiek, wat wij als volgt. 348 00:16:47,080 --> 00:16:47,680 Het is heel simpel. 349 00:16:47,680 --> 00:16:51,530 Er zijn slechts een paar stappen, en ze zijn hier vermeld op deze code. 350 00:16:51,530 --> 00:16:55,130 Dus we gaan door te gaan deze code regel voor regel. 351 00:16:55,130 --> 00:16:57,630 >> Ten eerste, zie je gemarkeerd - 352 00:16:57,630 --> 00:17:01,330 wanneer u werkt met een bestand, ongeacht het type bestand het is, 353 00:17:01,330 --> 00:17:02,670 je nodig hebt om het te openen. 354 00:17:02,670 --> 00:17:05,130 En dat is met een oproep om fopen - 355 00:17:05,130 --> 00:17:05,950 hier. 356 00:17:05,950 --> 00:17:07,980 U de naam van het bestand. 357 00:17:07,980 --> 00:17:11,930 Als het bestand niet in uw telefoonboek, of de map waarin het programma 358 00:17:11,930 --> 00:17:15,910 leven, dan moet je ook op te nemen een pad naar de plaats waar dat bestand is. 359 00:17:15,910 --> 00:17:19,099 >> We gaan ervan uit dat deze bestand genaamd "text.txt" - 360 00:17:19,099 --> 00:17:24,220 een eenvoudig tekstdocument - is in de dezelfde map als dit programma is. 361 00:17:24,220 --> 00:17:26,859 Dus dat is een ander ding om in te houden geest - dat als u een bestand wilt openen 362 00:17:26,859 --> 00:17:30,050 ergens anders, je eigenlijk nodig hebt de locatie omvatten. 363 00:17:30,050 --> 00:17:33,520 >> Ten tweede kunt u een argument doorgeven aan fopen, en dat is wat u wilt doen 364 00:17:33,520 --> 00:17:34,620 met het bestand. 365 00:17:34,620 --> 00:17:38,450 Er zijn drie belangrijke argumenten die je gaat doorgeven aan fopen. 366 00:17:38,450 --> 00:17:40,060 Wie kan mij die drie? 367 00:17:40,060 --> 00:17:44,960 368 00:17:44,960 --> 00:17:47,130 Wie kan mij een van hen? 369 00:17:47,130 --> 00:17:48,130 Ja. 370 00:17:48,130 --> 00:17:50,010 >> STUDENT 4: De bestandsnaam? 371 00:17:50,010 --> 00:17:50,440 >> JASON HIRSCHHORN: Sorry. 372 00:17:50,440 --> 00:17:55,490 De drie belangrijkste argumenten die je kunt doorgeven als tweede argument aan fopen. 373 00:17:55,490 --> 00:17:57,060 Je hebt gelijk - de bestandsnaam is het eerste argument. 374 00:17:57,060 --> 00:18:01,620 Maar het tweede argument om fopen zijn algemeen drie snaren, en - ja. 375 00:18:01,620 --> 00:18:02,210 Aleja. 376 00:18:02,210 --> 00:18:03,490 >> Aleja: A voor append. 377 00:18:03,490 --> 00:18:06,840 >> JASON HIRSCHHORN: A, als je wilt toevoegen aan een bestand dat al bestaat. 378 00:18:06,840 --> 00:18:07,810 >> STUDENT 5: R voor lezen. 379 00:18:07,810 --> 00:18:09,930 >> JASON HIRSCHHORN: R, als je wilt lezen uit een bestand. 380 00:18:09,930 --> 00:18:10,670 >> STUDENT 6: W voor schrijven. 381 00:18:10,670 --> 00:18:12,840 >> JASON HIRSCHHORN: En w, als je wilt schrijven naar een bestand. 382 00:18:12,840 --> 00:18:17,570 Dus in dit geval, we schrijven naar het bestand, dus we hebben w. 383 00:18:17,570 --> 00:18:22,360 Als je ze opent, moet je ook opslaan bestand ergens, en dat is met de 384 00:18:22,360 --> 00:18:26,000 code aan de linkerkant van de opdracht operator - 385 00:18:26,000 --> 00:18:31,220 Ik ben het creëren van een pointer naar een bestand genoemd, in dit geval, bestand. 386 00:18:31,220 --> 00:18:36,070 >> We gaan niet te maken wat dit alles caps FILE ding is. 387 00:18:36,070 --> 00:18:40,600 Het volstaat te zeggen, het is een lange stroom van nullen en enen. 388 00:18:40,600 --> 00:18:44,970 En dat is hoe we gaan bedienen en te begrijpen. 389 00:18:44,970 --> 00:18:47,300 >> Het volgende wat we moeten doen - en dit is ongelooflijk belangrijk - 390 00:18:47,300 --> 00:18:49,070 wanneer u een bestand opent - 391 00:18:49,070 --> 00:18:54,250 in feite, wanneer je malloc noemen, voor voorbeeld, en nog wat geheugen en probeer 392 00:18:54,250 --> 00:18:57,980 en sla het op in een pointer, je altijd willen controleren om ervoor te zorgen dat die 393 00:18:57,980 --> 00:19:00,230 functie niet null terug. 394 00:19:00,230 --> 00:19:05,230 >> Dus in dit geval, we controleren om ervoor ervoor dat we eigenlijk opende de 395 00:19:05,230 --> 00:19:10,230 correct in te dienen, en er was geen fout in ons programma. 396 00:19:10,230 --> 00:19:15,160 Vervolgens, als we eenmaal gecontroleerd om ervoor te zorgen dat dat we een werkende file, kunnen we 397 00:19:15,160 --> 00:19:18,520 schrijven naar of gelezen van de of toevoegen aan het bestand. 398 00:19:18,520 --> 00:19:24,270 In dit geval ben ik gewoon afdrukken de ene regel naar dit bestand. 399 00:19:24,270 --> 00:19:25,450 >> Hoe weet ik dat? 400 00:19:25,450 --> 00:19:27,990 Nou, ik gebruik deze functie genoemd fprintf. 401 00:19:27,990 --> 00:19:30,970 Alle functies die u gaat gebruiken bij het schrijven naar of het lezen van, of 402 00:19:30,970 --> 00:19:34,950 het manipuleren van bestanden zullen vergelijkbaar zijn functies die u eerder hebt gezien, maar 403 00:19:34,950 --> 00:19:38,420 beginnen met de letter F, staat voor file. 404 00:19:38,420 --> 00:19:43,440 En fprintf, in tegenstelling tot onze normale druk app, neemt een extra argument, 405 00:19:43,440 --> 00:19:47,800 en dat is het bestand waar u deze lijn wilt afdrukken. 406 00:19:47,800 --> 00:19:50,640 >> Ik heb niets te het recht van ohai. 407 00:19:50,640 --> 00:19:52,860 Ik heb niet de derde argument printf - 408 00:19:52,860 --> 00:19:57,030 of het tweede argument printf, de derde argument om fprintf, omdat ik 409 00:19:57,030 --> 00:19:59,480 hebben geen placeholders hier. 410 00:19:59,480 --> 00:20:01,070 Ik ben niet met inbegrip van alle variabelen. 411 00:20:01,070 --> 00:20:06,070 Maar nogmaals, fprintf en al deze file functies die werken met bestanden 412 00:20:06,070 --> 00:20:09,820 zijn over het algemeen gaat het bestand nodig waarop ze werken. 413 00:20:09,820 --> 00:20:15,960 >> Ten slotte is de laatste belangrijke ding om te doen is om het dossier te sluiten, net als 414 00:20:15,960 --> 00:20:19,530 met - wanneer we iets malloc, we iets willen bevrijden, opdat wij niet 415 00:20:19,530 --> 00:20:22,730 een geheugen lek - we willen om ons dossier te sluiten. 416 00:20:22,730 --> 00:20:28,180 Als dit programma verlaten zonder afsluiting het bestand, kansen zijn niets zou gaan 417 00:20:28,180 --> 00:20:30,050 verkeerd, vooral als het was een klein bestand. 418 00:20:30,050 --> 00:20:35,020 >> Maar het is zeker een goede stijl van coderen en oefenen om altijd uw dossier af te sluiten 419 00:20:35,020 --> 00:20:38,050 als je klaar bent het te gebruiken. 420 00:20:38,050 --> 00:20:43,630 Dus dat is de basis van het dossier van I / O. U heeft waarschijnlijk gezien dat vóór of 421 00:20:43,630 --> 00:20:45,710 zag het in die fantastische kort. 422 00:20:45,710 --> 00:20:48,410 Heeft iemand nog vragen hebben, voordat we gaan in wat oefening codering 423 00:20:48,410 --> 00:20:51,800 problemen, over het dossier van I / O of de stappen die ik ging net over? 424 00:20:51,800 --> 00:21:00,198 425 00:21:00,198 --> 00:21:03,162 >> [TYPEN SOUNDS] 426 00:21:03,162 --> 00:21:04,150 >> JASON HIRSCHHORN: Heeft u een vraag, Avi? 427 00:21:04,150 --> 00:21:04,660 >> AVI: Nee. 428 00:21:04,660 --> 00:21:04,740 >> JASON HIRSCHHORN: OK. 429 00:21:04,740 --> 00:21:06,746 Ik ga naar een ander wachten zeven seconden. 430 00:21:06,746 --> 00:21:07,590 [Lacht] 431 00:21:07,590 --> 00:21:08,620 Dat is echt een goede tip. 432 00:21:08,620 --> 00:21:10,750 Jullie hou niet het stellen van vragen. 433 00:21:10,750 --> 00:21:11,660 Dat is prima. 434 00:21:11,660 --> 00:21:12,330 OK. 435 00:21:12,330 --> 00:21:17,620 Dus onze eerste training probleem is, we zijn naar de functie dupliceren 436 00:21:17,620 --> 00:21:22,330 een command-line tool die u waarschijnlijk gebruikt voor - kopiëren - 437 00:21:22,330 --> 00:21:23,500 de kopie tool. 438 00:21:23,500 --> 00:21:28,050 Als je cp typt en vervolgens doorgeven twee argumenten in uw terminal, kunt u 439 00:21:28,050 --> 00:21:28,980 een kopie van een bestand. 440 00:21:28,980 --> 00:21:31,220 En dat is wat we gaan om nu te schrijven. 441 00:21:31,220 --> 00:21:35,830 >> Dus nogmaals, het aflezen van deze dia, zou ik u naar een programma dat duurt te schrijven 442 00:21:35,830 --> 00:21:38,130 twee en slechts twee command-line argumenten - 443 00:21:38,130 --> 00:21:40,750 een bronbestand en een doelbestand - 444 00:21:40,750 --> 00:21:44,590 en kopieert de inhoud van de bron bestand naar het doelbestand 445 00:21:44,590 --> 00:21:46,960 een byte tegelijk. 446 00:21:46,960 --> 00:21:48,510 Dus dat is een veel gevraagd voor. 447 00:21:48,510 --> 00:21:52,200 >> Weer een goede benadering is om niet rechtstreeks naar de C-code, maar 448 00:21:52,200 --> 00:21:54,280 breken in een paar stappen. 449 00:21:54,280 --> 00:21:58,400 Eerste, na te denken over de logica in - precies wat ik je vraag te doen - 450 00:21:58,400 --> 00:22:00,620 en begrijp alle van de stappen om dit probleem. 451 00:22:00,620 --> 00:22:04,410 Niet in C, maar in sommige pseudocode, of zelfs een mentaal model van 452 00:22:04,410 --> 00:22:06,030 wat er gaande is. 453 00:22:06,030 --> 00:22:10,050 >> Vervolgens, als je eenmaal de pseudocode naar beneden, erachter te komen hoe de pseudocode 454 00:22:10,050 --> 00:22:14,600 kaarten op gereedschappen en dingen die we hebben geleerd voor gebruik in C. 455 00:22:14,600 --> 00:22:19,070 >> En tenslotte, als je eenmaal al die samen, kunt u het probleem te coderen. 456 00:22:19,070 --> 00:22:23,370 5 tot 10 minuten te werken aan dit probleem. 457 00:22:23,370 --> 00:22:25,800 Ik zal de instructies zetten back-up in een tweede. 458 00:22:25,800 --> 00:22:27,990 En dan gaan we voorbij gaan de pseudocode en code 459 00:22:27,990 --> 00:22:29,230 leven als een groep. 460 00:22:29,230 --> 00:22:31,640 >> Als u vragen hebt, terwijl je werken aan dit, voel je vrij om te verhogen 461 00:22:31,640 --> 00:22:34,260 je hand, en ik zal komen rond en beantwoord ze. 462 00:22:34,260 --> 00:22:37,020 463 00:22:37,020 --> 00:22:39,330 >> STUDENT 7: Kan ik vegen een stuk papier? 464 00:22:39,330 --> 00:22:41,537 >> JASON HIRSCHHORN: What's up? 465 00:22:41,537 --> 00:26:46,047 466 00:26:46,047 --> 00:26:48,043 >> [TYPEN SOUNDS] 467 00:26:48,043 --> 00:26:48,730 >> JASON HIRSCHHORN: OK. 468 00:26:48,730 --> 00:26:51,710 Laten we gaan over de pseudocode eerste, en dan zal ik je een paar meer geven 469 00:26:51,710 --> 00:26:52,960 minuten te eindigen codering. 470 00:26:52,960 --> 00:26:55,540 471 00:26:55,540 --> 00:26:58,650 >> Wie wil ik beginnen met met de eerste regel van 472 00:26:58,650 --> 00:27:00,030 pseudocode voor deze functie? 473 00:27:00,030 --> 00:27:03,330 474 00:27:03,330 --> 00:27:05,740 >> STUDENT 8: Controleer dat jullie kregen twee bestanden. 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 En als wij niet? 478 00:27:22,990 --> 00:27:25,974 >> STUDENT 8: Ik zou 0 terugkeren. 479 00:27:25,974 --> 00:27:27,872 >> JASON HIRSCHHORN: Moeten we 0 terugkeren? 480 00:27:27,872 --> 00:27:30,182 >> STUDENT 8: Geeft een - 481 00:27:30,182 --> 00:27:30,650 blanking. 482 00:27:30,650 --> 00:27:30,850 Sorry. 483 00:27:30,850 --> 00:27:31,210 >> JASON HIRSCHHORN: Yeah. 484 00:27:31,210 --> 00:27:32,710 Waarschijnlijk niet 0. 485 00:27:32,710 --> 00:27:34,680 Omdat 0 betekent alles was goed. 486 00:27:34,680 --> 00:27:35,030 OK. 487 00:27:35,030 --> 00:27:36,730 Dus dat is de eerste regel van pseudocode. 488 00:27:36,730 --> 00:27:38,715 Wie heeft de tweede regel van pseudocode? 489 00:27:38,715 --> 00:27:40,630 >> STUDENT 9: Open beide bestanden? 490 00:27:40,630 --> 00:27:41,880 >> JASON HIRSCHHORN: Open beide bestanden. 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: Controleer als het bestand is NULL? 494 00:27:52,850 --> 00:28:10,906 495 00:28:10,906 --> 00:28:12,580 >> JASON HIRSCHHORN: Controleer zeker ook niet NULL. 496 00:28:12,580 --> 00:28:15,800 Even terzijde - 497 00:28:15,800 --> 00:28:17,540 slash 0 - 498 00:28:17,540 --> 00:28:18,887 is dat NULL? 499 00:28:18,887 --> 00:28:20,080 >> STUDENT 11: Nee. 500 00:28:20,080 --> 00:28:21,190 >> JASON HIRSCHHORN: Dat is niet NULL. 501 00:28:21,190 --> 00:28:23,400 Dat heet de NULL terminator. 502 00:28:23,400 --> 00:28:25,580 Het is eigenlijk gespeld met slechts een l. 503 00:28:25,580 --> 00:28:28,580 Dus controleren iets tegen dat - dat is eigenlijk een personage - 504 00:28:28,580 --> 00:28:31,710 dus controleren iets tegen dat niet hetzelfde als controle om te zien of het 505 00:28:31,710 --> 00:28:32,690 is gelijk aan NULL. 506 00:28:32,690 --> 00:28:34,100 >> En sommige mensen - 507 00:28:34,100 --> 00:28:36,040 op hun quizzen en hun probleem sets - heb de 508 00:28:36,040 --> 00:28:36,890 twee van deze verward. 509 00:28:36,890 --> 00:28:38,830 Maar de twee daarvan zijn in feite verschillend. 510 00:28:38,830 --> 00:28:40,220 Men eindigt een string - 511 00:28:40,220 --> 00:28:43,210 een is een pointer naar 0. 512 00:28:43,210 --> 00:28:46,490 >> STUDENT 12: Waarom zou je niet controleren zorg ervoor dat de bestanden niet NULL 513 00:28:46,490 --> 00:28:48,670 voordat u ze opent? 514 00:28:48,670 --> 00:28:54,772 >> JASON HIRSCHHORN: Dus geopend bespaart iets in dat bestand. 515 00:28:54,772 --> 00:28:57,780 En als je hier terug - 516 00:28:57,780 --> 00:28:59,520 dus deze lijn - fopen - 517 00:28:59,520 --> 00:29:05,300 zal je een adres en op te slaan geven dat adres in het dossier of het werkt. 518 00:29:05,300 --> 00:29:07,650 Als het niet werkt, het zal NULL opslaan - 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 Heb je. 522 00:29:08,500 --> 00:29:09,050 >> JASON HIRSCHHORN: In bestand. 523 00:29:09,050 --> 00:29:11,990 Dus je kunt niet controleren op NULL voordat je ze hebt geopend. 524 00:29:11,990 --> 00:29:13,520 NULL betekent iets niet deed goed werken. 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 Check dus zeker niet wil maken? 528 00:29:22,590 --> 00:29:23,200 Of zijn? 529 00:29:23,200 --> 00:29:23,770 Wat vinden we? 530 00:29:23,770 --> 00:29:24,310 We gaan met dat. 531 00:29:24,310 --> 00:29:24,520 >> STUDENT 13: Is. 532 00:29:24,520 --> 00:29:25,020 >> JASON HIRSCHHORN: Is? 533 00:29:25,020 --> 00:29:25,930 Evenmin is? 534 00:29:25,930 --> 00:29:26,350 >> STUDENT 13: Is. 535 00:29:26,350 --> 00:29:26,390 >> JASON HIRSCHHORN: OK. 536 00:29:26,390 --> 00:29:28,510 We lijken sommige hebben consensus over dat. 537 00:29:28,510 --> 00:29:30,520 Evenmin is NULL. 538 00:29:30,520 --> 00:29:32,250 OK, volgende regel van pseudocode. 539 00:29:32,250 --> 00:29:33,600 Wie heeft mij nog niet gegeven een lijn? 540 00:29:33,600 --> 00:29:37,350 541 00:29:37,350 --> 00:29:38,295 We zullen op je wachten. 542 00:29:38,295 --> 00:29:39,020 Yeah. 543 00:29:39,020 --> 00:29:40,895 >> STUDENT 14: Je moet lezen van het eerste bestand? 544 00:29:40,895 --> 00:29:42,290 >> JASON HIRSCHHORN: OK. 545 00:29:42,290 --> 00:29:46,240 >> STUDENT 14: Of we gebruiken fscanf of zoiets het eerste bestand? 546 00:29:46,240 --> 00:29:50,650 >> JASON HIRSCHHORN: Dus we willen lezen uit het eerste bestand en - 547 00:29:50,650 --> 00:29:51,900 laten we deze hier. 548 00:29:51,900 --> 00:30:00,600 549 00:30:00,600 --> 00:30:01,880 Lees uit het bronbestand. 550 00:30:01,880 --> 00:30:05,370 En dan, wat doen we nadat we lezen van het bronbestand? 551 00:30:05,370 --> 00:30:06,620 Iemand anders? 552 00:30:06,620 --> 00:30:09,150 553 00:30:09,150 --> 00:30:12,190 >> STUDENT 15: Schrijf in het doelbestand? 554 00:30:12,190 --> 00:30:22,080 555 00:30:22,080 --> 00:30:25,620 >> JASON HIRSCHHORN: Wij schrijven het doelbestand, en - 556 00:30:25,620 --> 00:30:26,210 OK. 557 00:30:26,210 --> 00:30:30,030 Wat missen we? 558 00:30:30,030 --> 00:30:32,460 Iemand anders die heeft mij niet een bepaalde regel code nog - van pseudocode. 559 00:30:32,460 --> 00:30:33,510 Yeah. 560 00:30:33,510 --> 00:30:36,540 >> STUDENT 16: Misschien kan je altijd controleren of er is iets te lezen voor, 561 00:30:36,540 --> 00:30:37,970 als de volgende regel? 562 00:30:37,970 --> 00:30:39,550 Die zijn als de volgende regel, zien of het bestaat. 563 00:30:39,550 --> 00:30:40,660 >> [ELEKTRONISCHE TOON] 564 00:30:40,660 --> 00:30:41,095 >> JASON HIRSCHHORN: Oeps. 565 00:30:41,095 --> 00:30:43,120 Dat is mijn journaling software. 566 00:30:43,120 --> 00:30:43,580 Yeah? 567 00:30:43,580 --> 00:30:44,960 >> STUDENT 16: Ja. 568 00:30:44,960 --> 00:30:48,940 >> JASON HIRSCHHORN: Dus geef het me nog een keer. 569 00:30:48,940 --> 00:30:51,640 >> STUDENT 16: Controleer of er voldoende nog een volgende lijn van de 570 00:30:51,640 --> 00:30:52,920 bronbestand te lezen. 571 00:30:52,920 --> 00:30:53,500 >> JASON HIRSCHHORN: OK. 572 00:30:53,500 --> 00:30:56,060 Zodat we niet lezen van regels - werden hier lezen bytes - 573 00:30:56,060 --> 00:30:57,590 maar je bent juist bent. 574 00:30:57,590 --> 00:31:00,040 We willen lezen en schrijven tot er niet meer 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 En dus deze moet echt ingesprongen zijn een beetje, omdat ze onder daar. 578 00:31:16,940 --> 00:31:17,470 Rechts? 579 00:31:17,470 --> 00:31:20,620 Totdat we uit bytes, gaan we lezen van het bronbestand en schrijf 580 00:31:20,620 --> 00:31:22,160 naar het doelbestand. 581 00:31:22,160 --> 00:31:24,510 >> En dan, wat is het laatste lijn van pseudocode? 582 00:31:24,510 --> 00:31:26,380 Iemand die niet gegeven me nog iets. 583 00:31:26,380 --> 00:31:29,270 584 00:31:29,270 --> 00:31:30,260 >> STUDENT 17: Sluit de bestanden? 585 00:31:30,260 --> 00:31:31,510 >> JASON HIRSCHHORN: Precies. 586 00:31:31,510 --> 00:31:36,370 587 00:31:36,370 --> 00:31:37,450 Sluit de bestanden. 588 00:31:37,450 --> 00:31:38,400 Dus er is pseudocode. 589 00:31:38,400 --> 00:31:41,870 Ik ga naar de pseudocode in kunt plaatsen gedit, en in een paar minuten zijn we 590 00:31:41,870 --> 00:31:44,626 zal dit samen te coderen. 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 Laten we aan de slag als groep. 594 00:33:58,290 --> 00:33:59,940 Nishant, ik heb mijn nieuwe bestand. 595 00:33:59,940 --> 00:34:01,130 Ik heb dit net geopend. 596 00:34:01,130 --> 00:34:01,880 Untitled document 1. 597 00:34:01,880 --> 00:34:05,490 Wat is het eerste wat ik moet doen? 598 00:34:05,490 --> 00:34:07,040 >> Nishant: Voeg bibliotheken? 599 00:34:07,040 --> 00:34:08,219 >> JASON HIRSCHHORN: OK. 600 00:34:08,219 --> 00:34:11,070 Wat bibliotheken? 601 00:34:11,070 --> 00:34:17,570 >> Nishant: stdio.h, stdlib.h, geloof ik? 602 00:34:17,570 --> 00:34:18,000 >> JASON HIRSCHHORN: OK. 603 00:34:18,000 --> 00:34:21,592 Wat is stdlib voor? 604 00:34:21,592 --> 00:34:23,010 >> Nishant: Ik vergat. 605 00:34:23,010 --> 00:34:23,219 >> JASON HIRSCHHORN: OK. 606 00:34:23,219 --> 00:34:24,179 Dus omvatten stdio. 607 00:34:24,179 --> 00:34:28,630 Wat moet ik doen, zelfs voordat Ik begin te coderen? 608 00:34:28,630 --> 00:34:29,710 >> Nishant: Schrijf een header? 609 00:34:29,710 --> 00:34:31,830 >> JASON HIRSCHHORN: Hoe krijg ik het gekleurd? 610 00:34:31,830 --> 00:34:34,060 >> [Onderbreekt hem VOICES] 611 00:34:34,060 --> 00:34:35,040 >> Nishant: Hoe krijg je het gekleurd? 612 00:34:35,040 --> 00:34:38,060 >> JASON HIRSCHHORN: Hoe ik kleurcodering? 613 00:34:38,060 --> 00:34:38,570 >> Nishant: Ik weet het niet. 614 00:34:38,570 --> 00:34:38,830 Oh. 615 00:34:38,830 --> 00:34:39,389 Besparen. 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 Ik moet het opslaan als een. C. 619 00:34:41,760 --> 00:34:46,239 Dus sla het op het bureaublad als cp.c. 620 00:34:46,239 --> 00:34:47,280 Sweet. 621 00:34:47,280 --> 00:34:51,199 En als ik wil volledige stijl te krijgen punten, wat moet ik 622 00:34:51,199 --> 00:34:53,085 onder meer aan de top? 623 00:34:53,085 --> 00:34:58,390 >> Nishant: U kon uw naam, naam schrijven van het programma, en het doel 624 00:34:58,390 --> 00:34:59,640 van het programma ook? 625 00:34:59,640 --> 00:35:08,400 626 00:35:08,400 --> 00:35:10,040 >> JASON HIRSCHHORN: Ziet er goed uit. 627 00:35:10,040 --> 00:35:10,470 Excellent. 628 00:35:10,470 --> 00:35:12,940 Dus je hebt ons perfect begonnen. 629 00:35:12,940 --> 00:35:13,720 # Include - 630 00:35:13,720 --> 00:35:15,365 zullen we ook schrijven - 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 Dus ik denk dat ik ben klaar om te gaan. 634 00:35:33,520 --> 00:35:38,003 Wie heeft de eerste regel van de code voor mij - of de eerste regels code die 635 00:35:38,003 --> 00:35:41,280 het zal duren om te voldoen aan onze eerste commentaar in pseudocode? 636 00:35:41,280 --> 00:35:41,985 Je. 637 00:35:41,985 --> 00:35:48,780 >> STUDENT 18: Moet het niet int argc, en dan char * argv? 638 00:35:48,780 --> 00:35:49,490 >> JASON HIRSCHHORN: Ik denk je hebt gelijk. 639 00:35:49,490 --> 00:35:56,270 Laten we veranderen in de belangrijkste open Paren int, int argc, komma, char * argv? 640 00:35:56,270 --> 00:35:57,150 Als dat? 641 00:35:57,150 --> 00:35:57,410 >> STUDENT 18: Beugels. 642 00:35:57,410 --> 00:35:58,260 >> JASON HIRSCHHORN: Beugels. 643 00:35:58,260 --> 00:35:59,860 Open beugel, haakje sluiten, dicht ouder. 644 00:35:59,860 --> 00:36:00,240 Perfect. 645 00:36:00,240 --> 00:36:02,160 Nu kan ik command-line argumenten nemen. 646 00:36:02,160 --> 00:36:02,430 OK. 647 00:36:02,430 --> 00:36:04,250 Zorgen we krijgen twee bestanden. 648 00:36:04,250 --> 00:36:07,905 Je kan me dat ook geven. 649 00:36:07,905 --> 00:36:09,180 >> STUDENT 18: Als argc - 650 00:36:09,180 --> 00:36:11,060 dit men niet gelijk 3. 651 00:36:11,060 --> 00:36:14,360 >> JASON HIRSCHHORN: Als geopend Paren argc niet gelijk 3? 652 00:36:14,360 --> 00:36:16,970 >> STUDENT 18: Ja, u terug 1 of iets. 653 00:36:16,970 --> 00:36:17,460 >> JASON HIRSCHHORN: Sorry. 654 00:36:17,460 --> 00:36:19,120 >> STUDENT 18: Return 1 of iets. 655 00:36:19,120 --> 00:36:20,270 >> JASON HIRSCHHORN: Terug 1. 656 00:36:20,270 --> 00:36:22,230 OK? 657 00:36:22,230 --> 00:36:22,970 Geweldig. 658 00:36:22,970 --> 00:36:24,290 Open beide bestanden. 659 00:36:24,290 --> 00:36:26,160 Wie kan mij helpen beide bestanden openen? 660 00:36:26,160 --> 00:36:28,125 Wie heeft mij nog niet gegeven code? 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: Dus alle doppen F-I-L-E ster bron. 664 00:36:36,145 --> 00:36:39,390 665 00:36:39,390 --> 00:36:40,920 >> JASON HIRSCHHORN: Ik ga tot het afsluiten van de klinkers. 666 00:36:40,920 --> 00:36:41,570 Die zijn cool. 667 00:36:41,570 --> 00:36:42,716 Het is net als Tumblr. 668 00:36:42,716 --> 00:36:44,610 >> STUDENT 18: Is gelijk fopen - 669 00:36:44,610 --> 00:36:46,612 >> JASON HIRSCHHORN: Is gelijk fopen? 670 00:36:46,612 --> 00:36:49,870 >> STUDENT 18: Open Paren, argv, haakje openen. 671 00:36:49,870 --> 00:36:50,055 >> JASON HIRSCHHORN: Wacht. 672 00:36:50,055 --> 00:36:50,240 Sorry. 673 00:36:50,240 --> 00:36:51,050 Open Paren. 674 00:36:51,050 --> 00:36:51,456 OK. 675 00:36:51,456 --> 00:36:53,080 >> STUDENT 18: Ja. 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: Ja. 679 00:36:56,140 --> 00:36:58,540 Argv geopend beugel 1 - 680 00:36:58,540 --> 00:36:59,730 Ja. 681 00:36:59,730 --> 00:37:06,470 En dan komma, en dan dubbele open citaat, r, dubbel aanhalingsteken, 682 00:37:06,470 --> 00:37:08,250 dicht Paren, puntkomma. 683 00:37:08,250 --> 00:37:09,450 >> JASON HIRSCHHORN: Zoet. 684 00:37:09,450 --> 00:37:10,950 En hoe zit het met de andere? 685 00:37:10,950 --> 00:37:16,030 >> STUDENT 18: Zeer vergelijkbaar, maar in plaats daarvan van S-R-C, zou je het ook noemt D-S-T. 686 00:37:16,030 --> 00:37:17,060 >> JASON HIRSCHHORN: Oo! 687 00:37:17,060 --> 00:37:17,772 Dat vind ik leuk. 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 En dan argv, haakje openen, 2. 690 00:37:23,057 --> 00:37:23,200 Yeah. 691 00:37:23,200 --> 00:37:26,720 En dan w plaats van 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 Volgende paar regels. 695 00:37:31,360 --> 00:37:34,040 Ook als iemand heeft dingen toe te voegen aan lijnen die we hebben gedaan, voel je vrij om 696 00:37:34,040 --> 00:37:35,690 toe te voegen die ook. 697 00:37:35,690 --> 00:37:37,520 Controleer of geen van beide is NULL. 698 00:37:37,520 --> 00:37:41,450 Wie kan mij de code die ik moet geven aan voldoen aan die lijn van pseudocode? 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 >> Boogschutter: Als src gelijk gelijken NULL of dst gelijk gelijken 702 00:37:58,645 --> 00:38:04,590 NULL, dan keert u terug - 703 00:38:04,590 --> 00:38:07,130 704 00:38:07,130 --> 00:38:07,976 >> JASON HIRSCHHORN: Wat? 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 Dus als geopend Paren src gelijk gelijk is aan NULL, of - 708 00:38:14,400 --> 00:38:15,590 wat dat thing's - pijp? 709 00:38:15,590 --> 00:38:16,346 Pijp? 710 00:38:16,346 --> 00:38:17,140 We noemen het pijp. 711 00:38:17,140 --> 00:38:22,340 Pijp, pijp, dst gelijk gelijken NULL, terug 2. 712 00:38:22,340 --> 00:38:23,900 OK? 713 00:38:23,900 --> 00:38:26,060 Tot we bytes - 714 00:38:26,060 --> 00:38:29,820 we soort overgeslagen deze stap uit de pseudocode deel aan het gaan naar hier. 715 00:38:29,820 --> 00:38:31,970 >> Maar tot we bytes - wat klinkt dat? 716 00:38:31,970 --> 00:38:34,680 Welk type C structuur - 717 00:38:34,680 --> 00:38:36,160 maar ik heb niet het woord structuur te gebruiken, want we gaan aan de slag met 718 00:38:36,160 --> 00:38:37,350 dat in andere gevallen - 719 00:38:37,350 --> 00:38:39,495 maar C instrument klinkt dat? 720 00:38:39,495 --> 00:38:39,970 >> STUDENT 19: Een lus. 721 00:38:39,970 --> 00:38:40,980 >> JASON HIRSCHHORN: Een lus. 722 00:38:40,980 --> 00:38:43,060 Klinkt als een lus. 723 00:38:43,060 --> 00:38:49,670 Dus wie kan me de eerste lijn geven van de lus code hier? 724 00:38:49,670 --> 00:38:56,320 725 00:38:56,320 --> 00:39:01,980 U kunt ook kiezen wat voor soort loop je wilt, als je me 726 00:39:01,980 --> 00:39:03,215 deze lijn van code. 727 00:39:03,215 --> 00:39:04,150 Er zijn drie soorten. 728 00:39:04,150 --> 00:39:06,530 Je krijgt te plukken. 729 00:39:06,530 --> 00:39:08,080 Ik stel voor een van die. 730 00:39:08,080 --> 00:39:08,410 Avi. 731 00:39:08,410 --> 00:39:09,230 Welke wil je? 732 00:39:09,230 --> 00:39:09,960 >> AVI: VOOR. 733 00:39:09,960 --> 00:39:11,460 >> JASON HIRSCHHORN: VOOR. 734 00:39:11,460 --> 00:39:15,180 >> AVI: int i gelijk is aan nul. 735 00:39:15,180 --> 00:39:17,360 >> JASON HIRSCHHORN: OK. 736 00:39:17,360 --> 00:39:18,570 >> AVI: Dit deel ik ben niet zeker over. 737 00:39:18,570 --> 00:39:29,080 Maar i kleiner dan de grootte van ster bron? 738 00:39:29,080 --> 00:39:31,128 Ik ben niet zeker van dat. 739 00:39:31,128 --> 00:39:32,580 >> JASON HIRSCHHORN: OK. 740 00:39:32,580 --> 00:39:35,870 >> AVI: Omdat u wilt dat de grootte van een bestand, toch? 741 00:39:35,870 --> 00:39:41,090 >> JASON HIRSCHHORN: Dus dit zal waarschijnlijk niet Geef ons de grootte van de werkelijke 742 00:39:41,090 --> 00:39:43,010 bestand in bytes. 743 00:39:43,010 --> 00:39:47,680 Dus wat kunnen we doen? 744 00:39:47,680 --> 00:39:48,810 Wat is een ander type lus? 745 00:39:48,810 --> 00:39:50,180 Of moeten we vasthouden aan de FOR-lus? 746 00:39:50,180 --> 00:39:55,350 747 00:39:55,350 --> 00:39:57,900 >> STUDENT 20: Kunt u een WHILE lus doen? 748 00:39:57,900 --> 00:40:01,350 En dan, wat je zou doen is you'd - 749 00:40:01,350 --> 00:40:03,930 want we hebben een char * voor het bestand. 750 00:40:03,930 --> 00:40:07,950 Dus als we gewoon blijven ophogen dat totdat we de nul karakter aan zou vinden 751 00:40:07,950 --> 00:40:08,500 het einde van het? 752 00:40:08,500 --> 00:40:11,130 Of nee, is dat niet hoe de bestanden werken? 753 00:40:11,130 --> 00:40:14,300 >> JASON HIRSCHHORN: Dus we kunnen houden het verhogen van de char * 754 00:40:14,300 --> 00:40:16,340 totdat we de NULL - 755 00:40:16,340 --> 00:40:18,580 >> STUDENT 20: In wezen blijven gaan teken voor teken totdat we raken 756 00:40:18,580 --> 00:40:21,250 het einde van het bestand. 757 00:40:21,250 --> 00:40:21,600 >> JASON HIRSCHHORN: Ja. 758 00:40:21,600 --> 00:40:22,560 Dus dat is wat we willen doen. 759 00:40:22,560 --> 00:40:24,545 We willen lezen, karakter houden door karakter, tot we bij 760 00:40:24,545 --> 00:40:25,080 het einde van het bestand. 761 00:40:25,080 --> 00:40:25,375 >> STUDENT 20: Ja. 762 00:40:25,375 --> 00:40:25,860 Vinden - 763 00:40:25,860 --> 00:40:28,540 wat is het einde of stopteken aan het einde van een tekstbestand. 764 00:40:28,540 --> 00:40:28,620 >> JASON HIRSCHHORN: OK. 765 00:40:28,620 --> 00:40:30,140 Dus toen we bij het einde van het bestand - Hoe weten we dat we hebben bereikt 766 00:40:30,140 --> 00:40:33,200 het einde van een bestand? 767 00:40:33,200 --> 00:40:34,710 Als ik bel - 768 00:40:34,710 --> 00:40:35,910 dus laten we een stap terug. 769 00:40:35,910 --> 00:40:37,550 Wat is een functie? 770 00:40:37,550 --> 00:40:39,360 Laten we deze lijn hier. 771 00:40:39,360 --> 00:40:40,630 Lees uit het bronbestand. 772 00:40:40,630 --> 00:40:41,880 Wie kan mij dat regel code geven? 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 Wat als ik wil lezen, zeer specifiek een byte? 778 00:40:52,240 --> 00:40:55,012 779 00:40:55,012 --> 00:40:56,860 >> STUDENT 21: Ik weet het niet. 780 00:40:56,860 --> 00:40:57,110 >> JASON HIRSCHHORN: OK. 781 00:40:57,110 --> 00:40:59,380 Zelfs eenvoudiger dan fscanf - wat is een - 782 00:40:59,380 --> 00:41:01,890 Ik wil lezen uit een bronbestand? 783 00:41:01,890 --> 00:41:03,720 Lezen van een bronbestand. 784 00:41:03,720 --> 00:41:04,850 Wat is een functie - ja. 785 00:41:04,850 --> 00:41:05,380 >> STUDENT 22: Het is fread? 786 00:41:05,380 --> 00:41:06,070 >> JASON HIRSCHHORN: fread. 787 00:41:06,070 --> 00:41:07,550 Ik denk dat laten we vasthouden aan dat een voor nu. 788 00:41:07,550 --> 00:41:10,380 789 00:41:10,380 --> 00:41:13,650 Wat voor argumenten doet fread nemen? 790 00:41:13,650 --> 00:41:17,410 >> STUDENT 22: Waarschijnlijk het bestandstype, en vervolgens locatie in het bestand? 791 00:41:17,410 --> 00:41:19,550 >> JASON HIRSCHHORN: Wat kan ik hier typen om erachter te komen wat voor soort argumenten 792 00:41:19,550 --> 00:41:20,950 fread neemt? 793 00:41:20,950 --> 00:41:23,710 >> MEERDERE STUDENTEN: Man fread. 794 00:41:23,710 --> 00:41:24,740 >> JASON HIRSCHHORN: Man fread en fwrite. 795 00:41:24,740 --> 00:41:25,980 Ziet eruit alsof ze hangen samen. 796 00:41:25,980 --> 00:41:29,589 Dus fread neemt hoeveel argumenten? 797 00:41:29,589 --> 00:41:30,920 >> STUDENT 23: Vier. 798 00:41:30,920 --> 00:41:32,690 >> JASON HIRSCHHORN: Het duurt vier argumenten. 799 00:41:32,690 --> 00:41:41,100 Het duurt een pointer, een maat, en dat ding, dat is raar, en een bestand. 800 00:41:41,100 --> 00:41:42,000 OK? 801 00:41:42,000 --> 00:41:43,990 Laten we lezen over het hier. 802 00:41:43,990 --> 00:41:49,370 "De functie fread leest n memb elementen van gegevens, elke maat bytes 803 00:41:49,370 --> 00:41:53,840 lang, van de stroom naar wijst streamen, ze op te slaan op de locatie 804 00:41:53,840 --> 00:41:56,170 van de aanwijzer. " 805 00:41:56,170 --> 00:41:57,960 >> Dus vier argumenten. 806 00:41:57,960 --> 00:42:04,510 Waarom heb ik niet kopiëren dit gewoon, en plak het hier. 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 Dus wie kan beginnen invullen deze argumenten voor mij? 810 00:42:13,673 --> 00:42:15,840 Avi. 811 00:42:15,840 --> 00:42:17,720 >> AVI: Haal de leegte. 812 00:42:17,720 --> 00:42:20,530 Zet gewoon src. 813 00:42:20,530 --> 00:42:23,142 Neem pointer en de ster. 814 00:42:23,142 --> 00:42:26,102 Put src. 815 00:42:26,102 --> 00:42:27,050 Dan - 816 00:42:27,050 --> 00:42:28,500 >> JASON HIRSCHHORN: Dus ik ga stoppen je daar, want dat is ingevuld. 817 00:42:28,500 --> 00:42:32,590 818 00:42:32,590 --> 00:42:34,710 Je hebt gelijk met src, maar waar moet src gaan? 819 00:42:34,710 --> 00:42:35,960 >> [Onderbreekt hem VOICES] 820 00:42:35,960 --> 00:42:38,976 821 00:42:38,976 --> 00:42:41,610 >> JASON HIRSCHHORN: het moet ga hierheen. 822 00:42:41,610 --> 00:42:43,790 Dat is het src - onze src is een type. 823 00:42:43,790 --> 00:42:44,610 Laten we eens kijken hier. 824 00:42:44,610 --> 00:42:49,610 Dit vraagt ​​om een ​​bestandstype *, we eigenlijk meestal ze te zien als dat. 825 00:42:49,610 --> 00:42:57,630 Dus dit vraagt ​​om een ​​argument van bestandstype * genaamd stroom die is src. 826 00:42:57,630 --> 00:42:58,480 OK? 827 00:42:58,480 --> 00:43:00,410 >> Welke maat van dingen te doen we willen lezen? 828 00:43:00,410 --> 00:43:03,340 Ik je dit gaf in de beschrijving van het probleem. 829 00:43:03,340 --> 00:43:04,370 >> STUDENT 24: een byte tegelijk. 830 00:43:04,370 --> 00:43:05,340 >> JASON HIRSCHHORN: Een byte. 831 00:43:05,340 --> 00:43:08,205 Hoe groot is een byte? 832 00:43:08,205 --> 00:43:11,642 Zijn grootte is in bytes, dus wat kan ik daar? 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 Rechts. 836 00:43:17,020 --> 00:43:19,940 Zijn grootte is in eenheid byte, dus 1 is 1 byte. 837 00:43:19,940 --> 00:43:22,284 Hoeveel wil ik lezen op een moment. 838 00:43:22,284 --> 00:43:23,520 >> STUDENT 26: One? 839 00:43:23,520 --> 00:43:24,270 >> JASON HIRSCHHORN: Éen ding. 840 00:43:24,270 --> 00:43:28,540 Ik wil een ding van formaat lezen 1, een beet tegelijkertijd. 841 00:43:28,540 --> 00:43:32,110 En waar kan ik het, zodra ik het lezen? 842 00:43:32,110 --> 00:43:35,050 843 00:43:35,050 --> 00:43:36,510 >> STUDENT 27: Bestemming? 844 00:43:36,510 --> 00:43:39,270 >> JASON HIRSCHHORN: Dus ik kan het niet het recht in bestemming. 845 00:43:39,270 --> 00:43:40,800 >> STUDENT 28: Je gaat put het in een derde pointer? 846 00:43:40,800 --> 00:43:41,780 >> STUDENT 27: Als u de bestemming. 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: Je kan iets verklaren als tijdelijk opslag eerder. 850 00:43:46,820 --> 00:43:47,350 >> JASON HIRSCHHORN: OK. 851 00:43:47,350 --> 00:43:50,080 Geef me dat. 852 00:43:50,080 --> 00:43:53,930 >> STUDENT 29: Een ander bestand wijzer, misschien? 853 00:43:53,930 --> 00:43:54,220 >> JASON HIRSCHHORN: OK. 854 00:43:54,220 --> 00:43:55,585 Dus dit is nietig ster - 855 00:43:55,585 --> 00:43:57,750 het is een soort leegte ster, zodat het niet moeten een bestands pointer zijn. 856 00:43:57,750 --> 00:44:02,520 En als ik lees een byte, waar een goede plek zou zijn 857 00:44:02,520 --> 00:44:03,850 om een ​​byte te slaan? 858 00:44:03,850 --> 00:44:04,660 >> STUDENT 29: Een array? 859 00:44:04,660 --> 00:44:05,770 >> JASON HIRSCHHORN: Een array. 860 00:44:05,770 --> 00:44:07,730 OK. 861 00:44:07,730 --> 00:44:14,040 En wat is iets dat alleen grootte van een byte? 862 00:44:14,040 --> 00:44:16,980 863 00:44:16,980 --> 00:44:18,060 >> STUDENT 30: Een char *? 864 00:44:18,060 --> 00:44:18,530 >> STUDENT 29: Ja. 865 00:44:18,530 --> 00:44:19,880 >> JASON HIRSCHHORN: A char * is een byte. 866 00:44:19,880 --> 00:44:20,440 >> STUDENT 29: Een char. 867 00:44:20,440 --> 00:44:21,810 >> JASON HIRSCHHORN: Een char is een byte. 868 00:44:21,810 --> 00:44:22,920 Rechts? 869 00:44:22,920 --> 00:44:26,740 Dus laten we noemen deze buffer is een generieke naam voor deze dingen op te slaan 870 00:44:26,740 --> 00:44:27,910 iets tijdelijk. 871 00:44:27,910 --> 00:44:30,880 Dus ik maak een buffer. 872 00:44:30,880 --> 00:44:31,150 Rechts? 873 00:44:31,150 --> 00:44:32,990 Maar het vergt wel een leegte *. 874 00:44:32,990 --> 00:44:38,660 Dus misschien heb je gelijk, dat het moet een buffer van maat 0 zijn. 875 00:44:38,660 --> 00:44:41,070 Het slaat dus een - 876 00:44:41,070 --> 00:44:41,280 rechts. 877 00:44:41,280 --> 00:44:43,560 >> Omdat dit recht hier - char buffer is een teken, maar 878 00:44:43,560 --> 00:44:45,110 dit duurt een leegte * - 879 00:44:45,110 --> 00:44:45,870 een pointer. 880 00:44:45,870 --> 00:44:50,640 Dus ik kon doen en nu buffer is een pointer. 881 00:44:50,640 --> 00:44:53,214 Wat kan ik doen? 882 00:44:53,214 --> 00:44:55,775 >> STUDENT 31: Zet een ster naast char. 883 00:44:55,775 --> 00:44:58,380 >> JASON HIRSCHHORN: ik kon hebt gemaakt het char *. 884 00:44:58,380 --> 00:45:00,216 OK. 885 00:45:00,216 --> 00:45:03,131 Wat is een ander ding dat ik kan doen? 886 00:45:03,131 --> 00:45:04,050 Of laten we gaan met deze. 887 00:45:04,050 --> 00:45:05,740 Char * buffer, dus wat zet ik hier? 888 00:45:05,740 --> 00:45:08,290 889 00:45:08,290 --> 00:45:09,310 >> STUDENT 31: Buffer. 890 00:45:09,310 --> 00:45:10,560 >> JASON HIRSCHHORN: Buffer. 891 00:45:10,560 --> 00:45:12,640 892 00:45:12,640 --> 00:45:14,500 Buffer is een pointer naar een char. 893 00:45:14,500 --> 00:45:19,480 En op die locatie, we zetten een byte van iets wat we lezen. 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: Gewoon een snelle vraag. 897 00:45:21,230 --> 00:45:24,440 Wil je buffer malloc? 898 00:45:24,440 --> 00:45:25,930 >> JASON HIRSCHHORN: Wie kan die vraag te beantwoorden? 899 00:45:25,930 --> 00:45:30,210 >> STUDENT 32: Nou, Het maakt eigenlijk niet punt om iets nu, dus - 900 00:45:30,210 --> 00:45:32,610 >> JASON HIRSCHHORN: Maar doen we willen het malloc? 901 00:45:32,610 --> 00:45:35,600 >> STUDENT 32: Als je om het te doen dat Trouwens, ik denk, ja, omdat je nodig hebt 902 00:45:35,600 --> 00:45:36,990 een plaats voor het te wijzen. 903 00:45:36,990 --> 00:45:38,350 >> JASON HIRSCHHORN: Hebben we moet het malloc? 904 00:45:38,350 --> 00:45:40,580 >> STUDENT 33: Als je gaat gebruiken buiten de lus. 905 00:45:40,580 --> 00:45:42,524 >> JASON HIRSCHHORN: Gaan we gebruiken buiten de lus? 906 00:45:42,524 --> 00:45:44,392 >> STUDENT 34: Ja. 907 00:45:44,392 --> 00:45:44,860 >> STUDENT 35: Wacht. 908 00:45:44,860 --> 00:45:46,980 Willen we het te verklaren in de lus naar buiten? 909 00:45:46,980 --> 00:45:50,100 >> JASON HIRSCHHORN: Dus ik denk dat we moeten sommige pseudo WHILE lus hier dat we 910 00:45:50,100 --> 00:45:51,950 proberen te achterhalen, dat hebben wij nog niet aan gekregen. 911 00:45:51,950 --> 00:45:54,710 912 00:45:54,710 --> 00:45:56,010 We hoeven niet te malloc. 913 00:45:56,010 --> 00:45:59,310 We zijn actief in de belangrijkste, het is alleen maar voor gebruik binnen deze lus. 914 00:45:59,310 --> 00:46:00,540 Het hoeft niet te bestaan buiten dit. 915 00:46:00,540 --> 00:46:02,340 >> Zo kan een lokale variabele. 916 00:46:02,340 --> 00:46:03,925 Je hebt een pointer naar een lokale variabele. 917 00:46:03,925 --> 00:46:07,984 918 00:46:07,984 --> 00:46:09,590 >> STUDENT 36: Maar het is niet wijst naar iets. 919 00:46:09,590 --> 00:46:11,540 >> JASON HIRSCHHORN: Nee, het is niet geïnitialiseerd tot niets. 920 00:46:11,540 --> 00:46:12,790 Maar we zijn niet van plan om het ook te gebruiken. 921 00:46:12,790 --> 00:46:15,300 We gaan iets in te zetten het de eerste keer dat we het gebruiken. 922 00:46:15,300 --> 00:46:16,580 Dus dat lijkt OK. 923 00:46:16,580 --> 00:46:17,780 Zodat we niet malloc hier nodig. 924 00:46:17,780 --> 00:46:19,360 En ik denk dat het goed is zoals het is. 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 Wij hebben de fread lijn. 928 00:46:27,190 --> 00:46:28,490 Laten we de volgende regel. 929 00:46:28,490 --> 00:46:32,984 >> Als we willen schrijven naar een bestand, wat is een goede functie te gebruiken om dat te doen? 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 is een. 933 00:46:36,010 --> 00:46:37,260 Wat is er nog een? 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 En voor onze doeleinden, fwrite, die we hier zagen, is 937 00:46:41,250 --> 00:46:42,500 waarschijnlijk de betere keuze. 938 00:46:42,500 --> 00:46:51,970 939 00:46:51,970 --> 00:46:53,950 Het duurt vier argumenten ook. 940 00:46:53,950 --> 00:46:57,570 Nishant, kunt u me de argumenten? 941 00:46:57,570 --> 00:47:00,570 >> Nishant: De eerste gaat er gewoon buffer zijn. 942 00:47:00,570 --> 00:47:02,210 >> JASON HIRSCHHORN: OK. 943 00:47:02,210 --> 00:47:06,752 >> Nishant: De tweede is gewoon naar zijn 1. 944 00:47:06,752 --> 00:47:09,510 Derde een gaat worden 1. 945 00:47:09,510 --> 00:47:11,470 En de vierde men gaat dst zijn. 946 00:47:11,470 --> 00:47:18,010 947 00:47:18,010 --> 00:47:19,550 >> JASON HIRSCHHORN: Heeft iemand vragen over die lijn? 948 00:47:19,550 --> 00:47:28,370 949 00:47:28,370 --> 00:47:29,130 Dat ziet er goed uit. 950 00:47:29,130 --> 00:47:29,590 OK. 951 00:47:29,590 --> 00:47:34,250 Dus nu lijkt het alsof het een ding zijn we vermist - eigenlijk, laten we schrijven 952 00:47:34,250 --> 00:47:35,090 deze laatste regel. 953 00:47:35,090 --> 00:47:36,300 Sluit de bestanden. 954 00:47:36,300 --> 00:47:38,880 Wie kan ons eindigen schrijven deze laatste twee regels? 955 00:47:38,880 --> 00:47:39,120 Ja. 956 00:47:39,120 --> 00:47:39,850 Sorry, wat is uw naam? 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: FSluit src en vervolgens fclose bestemming. 960 00:47:47,560 --> 00:47:52,430 >> JASON HIRSCHHORN: FSluit open Paren, src, dicht Paren, puntkomma. 961 00:47:52,430 --> 00:47:53,680 En 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: Open haakjes, dst en dan puntkomma. 965 00:48:01,710 --> 00:48:02,520 >> JASON HIRSCHHORN: Great. 966 00:48:02,520 --> 00:48:04,338 En wat moet ik onder andere aan het eind? 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 Moet ik? 970 00:48:06,820 --> 00:48:10,560 971 00:48:10,560 --> 00:48:12,590 Gewoon een vraag. 972 00:48:12,590 --> 00:48:14,957 Moeten we return 0 omvatten? 973 00:48:14,957 --> 00:48:16,240 >> MEERDERE STUDENTEN: Nee. 974 00:48:16,240 --> 00:48:16,430 >> JASON HIRSCHHORN: Nee. 975 00:48:16,430 --> 00:48:18,090 Belangrijkste doet het automatisch als je naar het einde. 976 00:48:18,090 --> 00:48:20,580 Maar ik vind het leuk om omvatten het expliciet. 977 00:48:20,580 --> 00:48:23,860 Vooral als we andere gaan terug dingen door het programma. 978 00:48:23,860 --> 00:48:24,810 OK. 979 00:48:24,810 --> 00:48:26,230 Dit is wat we missen - 980 00:48:26,230 --> 00:48:28,520 TERWIJL wat? 981 00:48:28,520 --> 00:48:31,630 Wie kan denken aan een - 982 00:48:31,630 --> 00:48:35,240 heeft een aantal gevoel van wat dingen kon binnen gaan? 983 00:48:35,240 --> 00:48:37,350 Zelfs al is het maar in sommige pseudocode zoals taal? 984 00:48:37,350 --> 00:48:41,330 >> Wat zijn we echt - wat willen we gaan tot? 985 00:48:41,330 --> 00:48:41,980 Ja, Lucy. 986 00:48:41,980 --> 00:48:43,240 >> LUCY: Het einde van het bestand. 987 00:48:43,240 --> 00:48:44,990 >> JASON HIRSCHHORN: Het einde van het bestand. 988 00:48:44,990 --> 00:48:49,280 Dus wat bedoel je met het einde van het bestand? 989 00:48:49,280 --> 00:48:50,955 >> LUCY: Zodra u bij de einde van het bestand, te stoppen. 990 00:48:50,955 --> 00:48:51,240 >> JASON HIRSCHHORN: OK. 991 00:48:51,240 --> 00:48:53,460 Dus zodra bereiken we het einde van het bestand. 992 00:48:53,460 --> 00:48:56,893 Hoe weten we wanneer we hebt bereikt het einde van het bestand? 993 00:48:56,893 --> 00:48:59,900 >> STUDENT 40: Ik denk buffer wordt ingesteld op NULL. 994 00:48:59,900 --> 00:49:01,885 >> STUDENT 41: Buffer wordt verklaard in de lus. 995 00:49:01,885 --> 00:49:03,670 >> JASON HIRSCHHORN: Dus je denkt buffer wordt ingesteld op NULL. 996 00:49:03,670 --> 00:49:05,850 Waarom zou buffer worden ingesteld op NULL? 997 00:49:05,850 --> 00:49:10,420 >> STUDENT 40: Want als je fread, je probeert te zetten 998 00:49:10,420 --> 00:49:13,528 niets in de buffer. 999 00:49:13,528 --> 00:49:13,980 >> JASON HIRSCHHORN: OK. 1000 00:49:13,980 --> 00:49:15,550 Dus je denkt fread - 1001 00:49:15,550 --> 00:49:19,000 wanneer we het einde van het hebt bereikt file, wat fread gaat doen? 1002 00:49:19,000 --> 00:49:21,230 Ik denk dat is de vraag we moeten uitzoeken. 1003 00:49:21,230 --> 00:49:21,960 Wat doet fread doen? 1004 00:49:21,960 --> 00:49:25,640 Is het zetten NULL in buffer, of doet het iets anders doen? 1005 00:49:25,640 --> 00:49:27,510 Hoe kunnen we achterhalen wat het doet? 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 Dus laten we eens kijken hier. 1009 00:49:32,280 --> 00:49:34,000 Return waarde. 1010 00:49:34,000 --> 00:49:39,620 Op succes, fread en fwrite terug de aantal artikelen gelezen of geschreven. 1011 00:49:39,620 --> 00:49:43,700 Dit aantal is gelijk aan het aantal bytes pas over, indien de grootte is 1. 1012 00:49:43,700 --> 00:49:47,780 Als er een fout optreedt, of het einde van de bestand is bereikt, is de geretourneerde waarde een 1013 00:49:47,780 --> 00:49:51,490 korte telling artikel of 0. 1014 00:49:51,490 --> 00:49:57,860 >> Dus voor onze doeleinden, indien fread bereikt het einde van het bestand, en leest uit 1015 00:49:57,860 --> 00:50:02,100 het einde van het bestand, is er niets meer om te lezen, wat gaat het om terug te keren? 1016 00:50:02,100 --> 00:50:03,290 >> STUDENT 43: Zero? 1017 00:50:03,290 --> 00:50:04,540 >> JASON HIRSCHHORN: Wat? 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 Het gaat terug op nul komen. 1021 00:50:06,940 --> 00:50:09,360 1022 00:50:09,360 --> 00:50:13,010 Dus we weten dat fread, toen we hebben aan het einde van het bestand, gaat 1023 00:50:13,010 --> 00:50:13,690 nul terug. 1024 00:50:13,690 --> 00:50:17,460 Hoe kunnen we dat in ons voordeel? 1025 00:50:17,460 --> 00:50:21,733 >> AVI: U kunt buiten een variabele declareert van de lus genoemd cheque. 1026 00:50:21,733 --> 00:50:27,040 Als check gelijk - 1027 00:50:27,040 --> 00:50:28,190 voor nu - een. 1028 00:50:28,190 --> 00:50:28,920 >> JASON HIRSCHHORN: OK. 1029 00:50:28,920 --> 00:50:38,050 >> AVI: En dan kun je een IF zetten verklaring direct na fread zeggen als 1030 00:50:38,050 --> 00:50:42,600 fread gelijk aan nul - 1031 00:50:42,600 --> 00:50:43,850 nee. 1032 00:50:43,850 --> 00:50:46,002 1033 00:50:46,002 --> 00:50:47,252 >> JASON HIRSCHHORN: Wie kan helpen Avi uit? 1034 00:50:47,252 --> 00:50:49,690 1035 00:50:49,690 --> 00:50:52,410 >> AVI: Wat is de waarde geretourneerd door fread? 1036 00:50:52,410 --> 00:50:54,060 >> JASON HIRSCHHORN: We hebben net ging meer dan dat. 1037 00:50:54,060 --> 00:50:55,450 >> AVI: Hoe doe je het voor? 1038 00:50:55,450 --> 00:50:57,190 >> JASON HIRSCHHORN: Dus het terugkeert - laten we kijk omhoog hier - het geeft een 1039 00:50:57,190 --> 00:50:59,340 size_t, die in wezen een geheel getal. 1040 00:50:59,340 --> 00:51:02,240 1041 00:51:02,240 --> 00:51:03,410 Zo geeft een geheel. 1042 00:51:03,410 --> 00:51:05,160 En in dit geval, zal het return 1 of 0 - 1043 00:51:05,160 --> 00:51:08,760 1 als het lezen een ding - een byte, en 0 als we het einde bereikt. 1044 00:51:08,760 --> 00:51:13,560 1045 00:51:13,560 --> 00:51:16,450 Dus als fread - 1046 00:51:16,450 --> 00:51:16,855 ja? 1047 00:51:16,855 --> 00:51:20,330 >> STUDENT 45: Kun je niet gewoon de volledige fread (buffer, 1, 1, src) in de 1048 00:51:20,330 --> 00:51:21,660 while loop? 1049 00:51:21,660 --> 00:51:26,510 >> JASON HIRSCHHORN: Dus u voorstelt dit te doen in daar? 1050 00:51:26,510 --> 00:51:27,600 >> [Onderbreekt hem VOICES] 1051 00:51:27,600 --> 00:51:29,520 >> JASON HIRSCHHORN: Wacht even. 1052 00:51:29,520 --> 00:51:30,885 Dus we bevrijden van dat. 1053 00:51:30,885 --> 00:51:33,300 Dus je voorstelt zetten fread in daar? 1054 00:51:33,300 --> 00:51:35,457 Wat moeten we gaan ook als je dat willen doen? 1055 00:51:35,457 --> 00:51:36,740 >> STUDENT 45: De buffer buiten. 1056 00:51:36,740 --> 00:51:38,110 >> JASON HIRSCHHORN: We moeten ook verplaatsen deze hier. 1057 00:51:38,110 --> 00:51:41,700 >> STUDENT 45: Maar doet dat voortdurend vooruit het? 1058 00:51:41,700 --> 00:51:42,950 >> [Onderbreekt hem VOICES] 1059 00:51:42,950 --> 00:51:46,540 1060 00:51:46,540 --> 00:51:47,470 >> JASON HIRSCHHORN: OK. 1061 00:51:47,470 --> 00:51:50,570 Dus dit is wat Okshar voorgesteld. 1062 00:51:50,570 --> 00:51:51,930 We creëren onze buffer. 1063 00:51:51,930 --> 00:51:57,020 We TERWIJL fread, dan fwrite we. 1064 00:51:57,020 --> 00:51:59,760 Gedachten over dit? 1065 00:51:59,760 --> 00:52:04,050 >> STUDENT 46: Mijn enige vraag is, zou het eigenlijk de opdracht fread voeren? 1066 00:52:04,050 --> 00:52:06,175 >> JASON HIRSCHHORN: Goede vraag. 1067 00:52:06,175 --> 00:52:11,050 Als je het aantrekken van een functie aan te roepen binnenkant van een aandoening, doet dat 1068 00:52:11,050 --> 00:52:12,300 functie-oproep te voeren? 1069 00:52:12,300 --> 00:52:15,760 1070 00:52:15,760 --> 00:52:17,770 We hebben eerder gezien voorbeelden van. 1071 00:52:17,770 --> 00:52:24,900 1072 00:52:24,900 --> 00:52:25,660 Rechts? 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 Dus het doet uitvoeren. 1076 00:52:30,140 --> 00:52:31,790 >> JASON HIRSCHHORN: We hebben dingen gezien zoals dat vóór, waar we een 1077 00:52:31,790 --> 00:52:33,550 functie oproep binnen van een aandoening. 1078 00:52:33,550 --> 00:52:35,540 Betekent dat de functie oproep te voeren? 1079 00:52:35,540 --> 00:52:36,350 Ja. 1080 00:52:36,350 --> 00:52:37,410 Dus het antwoord is ja. 1081 00:52:37,410 --> 00:52:41,010 Deze functie oproep zal uitvoeren. 1082 00:52:41,010 --> 00:52:42,418 Maar nogmaals, het is wat we willen? 1083 00:52:42,418 --> 00:52:49,250 1084 00:52:49,250 --> 00:52:52,204 >> Wat is een manier waarop we konden achterhalen te komen of het is wat we willen? 1085 00:52:52,204 --> 00:52:53,470 >> MEERDERE STUDENTEN: Run it? 1086 00:52:53,470 --> 00:52:54,460 >> JASON HIRSCHHORN: We kunnen het uit te voeren. 1087 00:52:54,460 --> 00:52:57,500 Maar voordat we dat doen, kunnen we ook redeneren doorheen. 1088 00:52:57,500 --> 00:52:57,920 Als - 1089 00:52:57,920 --> 00:53:01,920 zeggen dat we een byte in onze bestand, wij hier krijgt, 1090 00:53:01,920 --> 00:53:02,660 we krijgen aan deze code. 1091 00:53:02,660 --> 00:53:03,620 Deze zal lopen. 1092 00:53:03,620 --> 00:53:07,780 fread zal een byte terugkeren en opslaan in de buffer. 1093 00:53:07,780 --> 00:53:11,290 En dit zal evalueren om 1, rechts, nadat hij terugkeert 1. 1094 00:53:11,290 --> 00:53:12,640 >> Dus terwijl 1. 1095 00:53:12,640 --> 00:53:15,325 Betekent dit dat de code binnen De while-lus zal uitvoeren? 1096 00:53:15,325 --> 00:53:15,453 >> STUDENT 47: Ja. 1097 00:53:15,453 --> 00:53:16,040 Het is waar. 1098 00:53:16,040 --> 00:53:16,290 >> JASON HIRSCHHORN: Ja. 1099 00:53:16,290 --> 00:53:17,490 1 waar. 1100 00:53:17,490 --> 00:53:18,240 Het is niet 0. 1101 00:53:18,240 --> 00:53:20,360 Dus de code binnen hier zal uitvoeren. 1102 00:53:20,360 --> 00:53:22,300 Dus we zullen schrijven dat. 1103 00:53:22,300 --> 00:53:25,340 We komen terug naar deze te gaan lijn weer. 1104 00:53:25,340 --> 00:53:26,850 Nu hebben we - 1105 00:53:26,850 --> 00:53:28,550 we zijn aan het einde van ons bestand. 1106 00:53:28,550 --> 00:53:30,980 We lezen uit het einde van ons bestand, want we hadden maar een byte in. 1107 00:53:30,980 --> 00:53:34,270 >> Fread geeft 0, winkels iets buffer. 1108 00:53:34,270 --> 00:53:35,890 Ik weet eerlijk gezegd niet wat het slaat in buffer. 1109 00:53:35,890 --> 00:53:38,380 We kunnen waarschijnlijk opzoeken om te zien wat het doet. 1110 00:53:38,380 --> 00:53:40,130 Dat ik eerlijk gezegd niet weten. 1111 00:53:40,130 --> 00:53:43,090 We weten niet, wie wat cares het slaat in buffer? 1112 00:53:43,090 --> 00:53:44,010 Maar het doet terugkeren 0. 1113 00:53:44,010 --> 00:53:45,440 En zal terwijl 0 uitvoeren? 1114 00:53:45,440 --> 00:53:49,950 1115 00:53:49,950 --> 00:53:51,180 >> TERWIJL 0 zullen niet worden uitgevoerd. 1116 00:53:51,180 --> 00:53:54,030 Dus dan gaan we hier beneden bewegen. 1117 00:53:54,030 --> 00:53:58,870 Dus laten we een show van de handen als dit is de code die we moeten lopen, of als we 1118 00:53:58,870 --> 00:54:00,140 moet eerst veranderingen doen. 1119 00:54:00,140 --> 00:54:02,180 Dus als je denkt - je moet stemmen. 1120 00:54:02,180 --> 00:54:06,885 Als u denkt dat we deze code zou moeten lopen zo is, neem dan steek je hand. 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 Er is een - 1124 00:54:14,315 --> 00:54:17,260 heb je een vraag, zorg? 1125 00:54:17,260 --> 00:54:18,080 Yeah. 1126 00:54:18,080 --> 00:54:21,240 >> STUDENT 48: Na buffer gaan we buiten de lus, doen we 1127 00:54:21,240 --> 00:54:22,670 moet het malloc? 1128 00:54:22,670 --> 00:54:23,310 >> JASON HIRSCHHORN: Goede vraag. 1129 00:54:23,310 --> 00:54:26,670 Nadat we verhuizen buffer buiten de lus, moeten we het malloc? 1130 00:54:26,670 --> 00:54:28,400 Dit is een scope vraag. 1131 00:54:28,400 --> 00:54:32,130 Als we initialiseren buffer buiten van deze lus, zal het bestaan 1132 00:54:32,130 --> 00:54:33,534 binnenzijde van de lus? 1133 00:54:33,534 --> 00:54:35,230 >> MEERDERE STUDENTEN: Ja. 1134 00:54:35,230 --> 00:54:35,580 >> JASON HIRSCHHORN: Ja. 1135 00:54:35,580 --> 00:54:40,100 Het toepassingsgebied omvat binnenkant van de lus, en, eigenlijk, iets minder dan het binnen 1136 00:54:40,100 --> 00:54:42,460 van deze code, met inbegrip van de dingen binnen hier. 1137 00:54:42,460 --> 00:54:43,930 Dus we hoeven niet te malloc. 1138 00:54:43,930 --> 00:54:47,766 Het is een lokale variabele, en het toepassingsgebied bevat nog steeds de lus. 1139 00:54:47,766 --> 00:54:49,540 >> STUDENT 49: Moeten we het gratis? 1140 00:54:49,540 --> 00:54:51,770 >> JASON HIRSCHHORN: Hebben we moeten vrije buffer? 1141 00:54:51,770 --> 00:54:53,860 >> STUDENT 49: Ja, als we niet malloc. 1142 00:54:53,860 --> 00:54:55,750 >> JASON HIRSCHHORN: Hebben we moeten vrije buffer? 1143 00:54:55,750 --> 00:54:57,160 Dat doen we niet. 1144 00:54:57,160 --> 00:55:01,280 Nogmaals, het is een lokale variabele, dus we hoeven niet te bevrijden. 1145 00:55:01,280 --> 00:55:02,170 OK. 1146 00:55:02,170 --> 00:55:03,480 Laten we eens kijken wat er gebeurt. 1147 00:55:03,480 --> 00:55:17,290 1148 00:55:17,290 --> 00:55:18,220 Het is dus niet-geïnitialiseerd. 1149 00:55:18,220 --> 00:55:20,830 Dat was wat iets dat Marcus eerder voorgesteld. 1150 00:55:20,830 --> 00:55:25,340 Dus we hebben die fout, variabele buffer wordt uninitialized wanneer hier gebruikt. 1151 00:55:25,340 --> 00:55:26,590 >> Hoe kunnen we dit oplossen? 1152 00:55:26,590 --> 00:55:29,460 1153 00:55:29,460 --> 00:55:30,960 >> STUDENT 50: malloc het? 1154 00:55:30,960 --> 00:55:31,770 >> STUDENT 51: Is gelijk aan NULL? 1155 00:55:31,770 --> 00:55:33,000 >> STUDENT 52: Zeg buffer is gelijk aan 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 Ziet er goed uit. 1159 00:55:40,770 --> 00:55:42,410 We hebben het nu. 1160 00:55:42,410 --> 00:55:45,630 Laten we iets te kopiëren proberen te creëren. 1161 00:55:45,630 --> 00:56:08,990 1162 00:56:08,990 --> 00:56:10,490 Dus hebben we onze tekstbestand. 1163 00:56:10,490 --> 00:56:11,740 Hoe kunnen we dit programma uit te voeren? 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: U kunt dot doen slash cp, test.txt. 1167 00:56:22,230 --> 00:56:25,140 En dan kun je een ander bestand een naam waarin het zal opslaan in. 1168 00:56:25,140 --> 00:56:25,510 >> JASON HIRSCHHORN: OK. 1169 00:56:25,510 --> 00:56:27,380 We noemen het 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 schuld. 1173 00:56:34,320 --> 00:56:35,570 Gedachten over de seg schuld? 1174 00:56:35,570 --> 00:56:40,900 1175 00:56:40,900 --> 00:56:41,390 Dit is geweldig. 1176 00:56:41,390 --> 00:56:45,040 Hoe kunnen we te weten komen waar de seg fout is? 1177 00:56:45,040 --> 00:56:45,680 Wat? 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 We lopen door het schrijven van gdb gdb dot slash, de naam van ons programma. 1182 00:56:55,300 --> 00:56:57,020 Geen command line argumenten daar. 1183 00:56:57,020 --> 00:56:59,570 We gaan een set breekpunt bij de belangrijkste. 1184 00:56:59,570 --> 00:57:02,190 Als ik wil gdb beginnen, wat moet ik doen? 1185 00:57:02,190 --> 00:57:02,730 >> STUDENT 55: R. 1186 00:57:02,730 --> 00:57:08,910 >> JASON HIRSCHHORN: R. En dan? 1187 00:57:08,910 --> 00:57:09,400 >> STUDENT 55: De argumenten? 1188 00:57:09,400 --> 00:57:10,650 >> JASON HIRSCHHORN: Dan de command-line argumenten. 1189 00:57:10,650 --> 00:57:15,890 1190 00:57:15,890 --> 00:57:17,120 Laten we lopen door. 1191 00:57:17,120 --> 00:57:19,090 N is gewoon het nemen van me regel voor regel. 1192 00:57:19,090 --> 00:57:21,450 Ik ga om te gaan tot Ik krijg mijn seg fout. 1193 00:57:21,450 --> 00:57:22,700 Daar is mijn seg fout. 1194 00:57:22,700 --> 00:57:24,960 1195 00:57:24,960 --> 00:57:27,875 Het ziet eruit als fread veroorzaakt mijn seg fout. 1196 00:57:27,875 --> 00:57:30,570 1197 00:57:30,570 --> 00:57:32,770 Ik weet fread veroorzaakt mijn seg schuld, want dat was de 1198 00:57:32,770 --> 00:57:34,950 lijn we gewoon uitgevoerd. 1199 00:57:34,950 --> 00:57:36,530 >> En het enige dat was gebeurt in die lijn - 1200 00:57:36,530 --> 00:57:37,520 twee dingen gebeurden. 1201 00:57:37,520 --> 00:57:40,610 Fread ging, en toen waren we het doen van wat tijdens het controleren. 1202 00:57:40,610 --> 00:57:44,820 Ik durf te wedden dat de TERWIJL de controle werd niet veroorzaakt mijn seg fout. 1203 00:57:44,820 --> 00:57:46,950 Het meest waarschijnlijk, fread was waardoor mijn seg fout. 1204 00:57:46,950 --> 00:57:49,260 Ook zie ik hier iets, memcopy. 1205 00:57:49,260 --> 00:57:50,500 >> Geheugen kopie. 1206 00:57:50,500 --> 00:57:53,820 Klinkt als het verplaatsen van het geheugen van ene locatie naar de andere. 1207 00:57:53,820 --> 00:57:56,890 Klinkt als iets dat zou gebeuren in fread, misschien wat geheugen 1208 00:57:56,890 --> 00:57:58,910 het verplaatsen van hier naar hier. 1209 00:57:58,910 --> 00:58:01,740 1210 00:58:01,740 --> 00:58:03,860 Laten we weer meemaken. 1211 00:58:03,860 --> 00:58:06,900 Hoe start ik het over en voer het weer? 1212 00:58:06,900 --> 00:58:08,092 Yeah. 1213 00:58:08,092 --> 00:58:15,140 >> STUDENT 56: Heeft u behoefte aan zet een ampersand voor buffer? 1214 00:58:15,140 --> 00:58:17,800 >> JASON HIRSCHHORN: Dus ampersand vóór buffer zou mij het adres geven van 1215 00:58:17,800 --> 00:58:22,330 buffer, die een char *. 1216 00:58:22,330 --> 00:58:25,250 Laten we lopen door dit nog een keer. 1217 00:58:25,250 --> 00:58:28,248 Hoe voer ik door het nog een keer? 1218 00:58:28,248 --> 00:58:29,210 >> STUDENT 57: Kan je gewoon typ Uitvoeren weer? 1219 00:58:29,210 --> 00:58:32,050 >> JASON HIRSCHHORN: Typ gewoon run weer. 1220 00:58:32,050 --> 00:58:33,415 Dus we gaan niet deze lijn uit te voeren. 1221 00:58:33,415 --> 00:58:36,250 1222 00:58:36,250 --> 00:58:39,240 Dus buffer is een NULL-pointer. 1223 00:58:39,240 --> 00:58:40,490 Correct? 1224 00:58:40,490 --> 00:58:45,870 1225 00:58:45,870 --> 00:58:47,060 Het wijst naar - laten we eens kijken. 1226 00:58:47,060 --> 00:58:48,500 Als we onze - 1227 00:58:48,500 --> 00:58:50,430 trekken snel een foto van deze. 1228 00:58:50,430 --> 00:58:53,500 Kan iedereen zien of Ik schrijf hier dan? 1229 00:58:53,500 --> 00:59:02,890 >> Dus in de stapel, we hebben een lokale variabele en het is buffer genoemd, en 1230 00:59:02,890 --> 00:59:08,230 het is een pointer naar een char. 1231 00:59:08,230 --> 00:59:10,325 Welk adres is dit char op? 1232 00:59:10,325 --> 00:59:12,550 >> STUDENT 58: 0x0. 1233 00:59:12,550 --> 00:59:13,400 >> JASON HIRSCHHORN: Juist. 1234 00:59:13,400 --> 00:59:14,200 Dat is wat dit is. 1235 00:59:14,200 --> 00:59:17,600 In hier, binnen buffer wordt opgeslagen 0x0. 1236 00:59:17,600 --> 00:59:20,480 Dat is wat we hebben - de setup we nu hebben. 1237 00:59:20,480 --> 00:59:27,540 Dus deze lijn, fread, zet iets van de bron waar? 1238 00:59:27,540 --> 00:59:30,560 In dit vak of deze doos? 1239 00:59:30,560 --> 00:59:31,060 Welke doos? 1240 00:59:31,060 --> 00:59:33,290 Links of rechts doos doos? 1241 00:59:33,290 --> 00:59:34,750 Dit recht doos. 1242 00:59:34,750 --> 00:59:38,440 >> Het volgt de aanwijzer, en zet het in hier. 1243 00:59:38,440 --> 00:59:42,620 Wanneer we proberen contact geheugen op locatie 0, wat krijgen we? 1244 00:59:42,620 --> 00:59:45,050 Een segmentation fault. 1245 00:59:45,050 --> 00:59:46,550 Dat is de fout die we nu hebben. 1246 00:59:46,550 --> 00:59:46,970 Yeah. 1247 00:59:46,970 --> 00:59:48,410 >> STUDENT 59: Heb je niet tot ster buffer te zetten? 1248 00:59:48,410 --> 00:59:49,180 Of nee? 1249 00:59:49,180 --> 00:59:50,050 Voor fread? 1250 00:59:50,050 --> 00:59:51,450 >> JASON HIRSCHHORN: Dus fread neemt een pointer. 1251 00:59:51,450 --> 00:59:54,920 1252 00:59:54,920 --> 00:59:55,900 Het gaat zo in buffer. 1253 00:59:55,900 --> 00:59:58,980 En dan zal het de-verwijzing het ergens binnen fread. 1254 00:59:58,980 --> 01:00:00,700 Maar nogmaals, we zagen, het duurt een pointer. 1255 01:00:00,700 --> 01:00:02,560 We hoeven niet te passeren ster buffer. 1256 01:00:02,560 --> 01:00:05,350 Dat zou passeren het wat is hier. 1257 01:00:05,350 --> 01:00:07,980 En dat zou waarschijnlijk geven ons een fout omdat we de-vermeld wordt. 1258 01:00:07,980 --> 01:00:08,150 >> Rechts? 1259 01:00:08,150 --> 01:00:10,690 Wanneer we de-referentie deze pointer, wanneer we proberen om toegang te krijgen tot deze plaats, 1260 01:00:10,690 --> 01:00:13,140 we krijgen een foutmelding - onze segmentation fault. 1261 01:00:13,140 --> 01:00:15,800 Dus - 1262 01:00:15,800 --> 01:00:16,690 oops. 1263 01:00:16,690 --> 01:00:19,090 We gaan om te stoppen uit gdb. 1264 01:00:19,090 --> 01:00:20,160 Onze lijn - 1265 01:00:20,160 --> 01:00:22,990 ons probleem - rechts is hier op deze lijn. 1266 01:00:22,990 --> 01:00:26,410 En het is een probleem omdat van deze lijn. 1267 01:00:26,410 --> 01:00:31,780 >> Hoe kunnen we een vak dat is toegankelijk in fread. 1268 01:00:31,780 --> 01:00:31,980 Rechts? 1269 01:00:31,980 --> 01:00:35,190 We moeten een vak dat is een te maken byte groot, de grootte van een char. 1270 01:00:35,190 --> 01:00:38,590 Maar we moeten die doos om toegankelijk te zijn Als deze functie wordt uitgevoerd. 1271 01:00:38,590 --> 01:00:39,390 Dus waar - 1272 01:00:39,390 --> 01:00:39,640 ja. 1273 01:00:39,640 --> 01:00:40,440 Het even welke ideeën? 1274 01:00:40,440 --> 01:00:43,615 >> STUDENT 60: Stel gewoon het als een willekeurig karakter. 1275 01:00:43,615 --> 01:00:49,150 1276 01:00:49,150 --> 01:00:51,640 Gewoon doen char buffer gelijken het karakter. 1277 01:00:51,640 --> 01:00:53,795 En dan, als je buffer er - 1278 01:00:53,795 --> 01:00:54,110 >> JASON HIRSCHHORN: Wacht. 1279 01:00:54,110 --> 01:00:55,110 Char buffer? 1280 01:00:55,110 --> 01:00:55,880 Dus geen ster? 1281 01:00:55,880 --> 01:00:56,390 >> STUDENT 60: Ja. 1282 01:00:56,390 --> 01:00:58,560 Haal de ster. 1283 01:00:58,560 --> 01:01:00,690 Gelijk aan een willekeurig karakter. 1284 01:01:00,690 --> 01:01:01,460 >> JASON HIRSCHHORN: OK. 1285 01:01:01,460 --> 01:01:02,420 Dus geef me een. 1286 01:01:02,420 --> 01:01:03,170 >> STUDENT 60: Als een of zoiets. 1287 01:01:03,170 --> 01:01:06,160 En dan als je buffer daar, een gebruikt u - 1288 01:01:06,160 --> 01:01:06,420 >> STUDENT 61: Star? 1289 01:01:06,420 --> 01:01:07,650 Oh nee, de ampersand. 1290 01:01:07,650 --> 01:01:09,000 >> STUDENT 60: Gebruik de ampersand. 1291 01:01:09,000 --> 01:01:09,470 >> JASON HIRSCHHORN: OK. 1292 01:01:09,470 --> 01:01:11,320 En hoe zit het in fwrite? 1293 01:01:11,320 --> 01:01:14,150 >> STUDENT 60: Gebruik de ampersand weer. 1294 01:01:14,150 --> 01:01:14,320 >> JASON HIRSCHHORN: Oke. 1295 01:01:14,320 --> 01:01:20,970 Dus jouw idee is, creëren we een char en zet iets in, en dan 1296 01:01:20,970 --> 01:01:22,612 schrijven dat char. 1297 01:01:22,612 --> 01:01:23,760 >> STUDENT 60: Ja. 1298 01:01:23,760 --> 01:01:25,916 >> JASON HIRSCHHORN: Wat denken de mensen? 1299 01:01:25,916 --> 01:01:27,770 >> STUDENT 62: Het is ingewikkeld. 1300 01:01:27,770 --> 01:01:28,460 >> JASON HIRSCHHORN: OK. 1301 01:01:28,460 --> 01:01:29,760 Laten we trekken het uit. 1302 01:01:29,760 --> 01:01:35,720 Dus deze keer, ik ga dit tekenen in rood op de stapel hier, en dan hebben we 1303 01:01:35,720 --> 01:01:36,410 zal hebben - 1304 01:01:36,410 --> 01:01:36,822 ooh! 1305 01:01:36,822 --> 01:01:38,060 Sorry. 1306 01:01:38,060 --> 01:01:45,930 Dus deze keer hebben we iets te noemen buffer, en het is op de stapel. 1307 01:01:45,930 --> 01:01:48,430 Correct? 1308 01:01:48,430 --> 01:01:51,520 En we besparen in het een, in eerste instantie. 1309 01:01:51,520 --> 01:01:53,830 >> Dan hebben we onze oproep om fread. 1310 01:01:53,830 --> 01:02:01,300 Wat fread doet is het duurt een byte uit ons bestand en zet het ergens. 1311 01:02:01,300 --> 01:02:04,570 Het zet ze in welke de ding wijst naar. 1312 01:02:04,570 --> 01:02:09,130 Nou, voordat we hadden dit adres - 1313 01:02:09,130 --> 01:02:10,250 0x0. 1314 01:02:10,250 --> 01:02:13,349 Nu, wat adres hebben we? 1315 01:02:13,349 --> 01:02:14,650 >> STUDENT 63: Whatever adres buffer is. 1316 01:02:14,650 --> 01:02:15,970 >> JASON HIRSCHHORN: Whatever adres buffer is. 1317 01:02:15,970 --> 01:02:22,370 Het gaat waarschijnlijk zijn zoiets. 1318 01:02:22,370 --> 01:02:26,950 Waarschijnlijk gaat om te beginnen met een b en een f, en vervolgens zes andere 1319 01:02:26,950 --> 01:02:27,970 hexadecimale cijfers. 1320 01:02:27,970 --> 01:02:28,480 Maakt niet uit. 1321 01:02:28,480 --> 01:02:29,470 Sommige adres. 1322 01:02:29,470 --> 01:02:31,410 En we terloops op dat adres in 1323 01:02:31,410 --> 01:02:34,790 >> En we gaan ons een zetten byte ding op dat adres. 1324 01:02:34,790 --> 01:02:38,470 Dus we gaan ons een zetten byte ding in hier. 1325 01:02:38,470 --> 01:02:40,800 En dan gaan we schrijven vanuit wat er ooit in hier. 1326 01:02:40,800 --> 01:02:43,425 1327 01:02:43,425 --> 01:02:45,380 Heeft iemand enig vragen over dat? 1328 01:02:45,380 --> 01:02:50,990 1329 01:02:50,990 --> 01:02:54,690 Wie denkt deze code zal werken? 1330 01:02:54,690 --> 01:02:56,020 >> Steek je hand op als je denkt Deze code zal werken. 1331 01:02:56,020 --> 01:02:57,270 Je moet een standpunt in te nemen. 1332 01:02:57,270 --> 01:03:00,670 1333 01:03:00,670 --> 01:03:02,500 En wie denkt dat deze code werkt niet? 1334 01:03:02,500 --> 01:03:04,610 Steek je hand op. 1335 01:03:04,610 --> 01:03:06,750 Iedereen moet zijn het verhogen van hun hand. 1336 01:03:06,750 --> 01:03:07,670 OK. 1337 01:03:07,670 --> 01:03:09,390 Michael, waar sta je? 1338 01:03:09,390 --> 01:03:10,680 >> MICHAEL: Ik kan niet beslissen. 1339 01:03:10,680 --> 01:03:12,070 Soort in het midden. 1340 01:03:12,070 --> 01:03:12,736 >> JASON HIRSCHHORN: Je bent in het midden. 1341 01:03:12,736 --> 01:03:13,092 Kies er een. 1342 01:03:13,092 --> 01:03:14,400 >> MICHAEL: Ik geloof en zeggen dat het zal werken. 1343 01:03:14,400 --> 01:03:14,660 >> JASON HIRSCHHORN: OK. 1344 01:03:14,660 --> 01:03:16,047 Je zult geloven en zeggen dat het werkt? 1345 01:03:16,047 --> 01:03:26,490 1346 01:03:26,490 --> 01:03:27,020 Wat is er gebeurd? 1347 01:03:27,020 --> 01:03:28,270 >> [Onderbreekt hem VOICES] 1348 01:03:28,270 --> 01:03:35,170 1349 01:03:35,170 --> 01:03:35,950 >> JASON HIRSCHHORN: Geen seg fout. 1350 01:03:35,950 --> 01:03:40,320 Hoe kunnen we controleren om te zien of twee dingen gelijk zijn? 1351 01:03:40,320 --> 01:03:42,060 Twee bestanden zijn gelijk. 1352 01:03:42,060 --> 01:03:43,300 >> STUDENT 64: Verschil. 1353 01:03:43,300 --> 01:03:45,490 >> JASON HIRSCHHORN: Diff. 1354 01:03:45,490 --> 01:03:51,630 Diff controles voor de verschillen tussen twee bestanden, en als het weer 1355 01:03:51,630 --> 01:03:52,890 niets, ze zijn identiek. 1356 01:03:52,890 --> 01:03:59,030 En als we open te stellen, krijgen we ons bestand. 1357 01:03:59,030 --> 01:04:00,490 Dus dat was de juiste oplossing. 1358 01:04:00,490 --> 01:04:01,780 Laten we eens kijken terug op het nog een keer. 1359 01:04:01,780 --> 01:04:04,080 We deden eigenlijk niet eens nodig om het te initialiseren. 1360 01:04:04,080 --> 01:04:05,520 >> Het zou waarschijnlijk lijken een beetje schoner als je niet zet 1361 01:04:05,520 --> 01:04:07,680 iets willekeurigs in. 1362 01:04:07,680 --> 01:04:13,070 Het punt is, je moest maken wat ruimte om iets uit te slaan 1363 01:04:13,070 --> 01:04:15,530 fread en neem iets uit fwrite. 1364 01:04:15,530 --> 01:04:18,400 En dat ding moest ofwel een lokaal zijn variabele op de stack - u 1365 01:04:18,400 --> 01:04:19,890 wat ruimte had kunnen malloc'd. 1366 01:04:19,890 --> 01:04:23,030 >> Dus we konden eigenlijk hebben geschreven malloc hier, en 1367 01:04:23,030 --> 01:04:25,420 dat zou hebben gewerkt. 1368 01:04:25,420 --> 01:04:28,660 En dan zouden we zijn het opslaan onze spullen ergens op de heap. 1369 01:04:28,660 --> 01:04:31,940 Maar dit is eigenlijk, waarschijnlijk, de meest elegante oplossing. 1370 01:04:31,940 --> 01:04:34,490 Je maakt gewoon wat ruimte op de stapel voor deze dingen om te gaan. 1371 01:04:34,490 --> 01:04:37,690 1372 01:04:37,690 --> 01:04:38,990 >> Ik zou twee andere opmerkingen. 1373 01:04:38,990 --> 01:04:44,650 Als je aan de beurt te nemen aan deze, en dan krijg scoorde op deze, mijn commentaar 1374 01:04:44,650 --> 01:04:47,400 zou als volgt. 1375 01:04:47,400 --> 01:04:54,300 Deze 1 is hier, voor mij, kijk zoals magische getallen. 1376 01:04:54,300 --> 01:04:56,860 Deze 1, in termen van fread, zinvol. 1377 01:04:56,860 --> 01:04:59,580 Dat is het aantal dingen lezen of schrijven. 1378 01:04:59,580 --> 01:05:03,740 >> Maar deze hier moet waarschijnlijk iets anders. 1379 01:05:03,740 --> 01:05:05,180 Dus wat is een oplossing? 1380 01:05:05,180 --> 01:05:06,545 >> STUDENT 65: Grootte van de byte. 1381 01:05:06,545 --> 01:05:10,100 1382 01:05:10,100 --> 01:05:11,080 >> JASON HIRSCHHORN: Net als dat? 1383 01:05:11,080 --> 01:05:13,130 >> STUDENT 65: Grootte van de char. 1384 01:05:13,130 --> 01:05:13,820 >> JASON HIRSCHHORN: Grootte van de char. 1385 01:05:13,820 --> 01:05:15,290 Ja, byte is niet een soort. 1386 01:05:15,290 --> 01:05:16,320 Dus grootte van char werken. 1387 01:05:16,320 --> 01:05:30,270 We konden, bovenaan onze code, # gedefinieerd dat. 1388 01:05:30,270 --> 01:05:33,410 Riep iets BYTE en het is echt een char. 1389 01:05:33,410 --> 01:05:37,675 Eigenlijk, een nog betere benadering dit zou kunnen geweest zijn - 1390 01:05:37,675 --> 01:05:39,391 uint. 1391 01:05:39,391 --> 01:05:40,780 Weet iemand wat dat is? 1392 01:05:40,780 --> 01:05:44,388 1393 01:05:44,388 --> 01:05:44,840 >> Sorry. 1394 01:05:44,840 --> 01:05:46,090 Ik heb het naar achteren. 1395 01:05:46,090 --> 01:05:51,620 1396 01:05:51,620 --> 01:05:52,200 Wacht, nee. 1397 01:05:52,200 --> 01:05:53,450 Welke kant gaat het naartoe? 1398 01:05:53,450 --> 01:05:58,071 1399 01:05:58,071 --> 01:05:59,660 Weet iemand wat dat is? 1400 01:05:59,660 --> 01:06:00,950 Yeah. 1401 01:06:00,950 --> 01:06:05,650 >> STUDENT 67: moeten helpen standaardiseren tussen systemen dingen die 1402 01:06:05,650 --> 01:06:08,760 hebben - zoals unsigned integers dat 8 bytes? 1403 01:06:08,760 --> 01:06:11,785 >> JASON HIRSCHHORN: Dat is precies goed. 1404 01:06:11,785 --> 01:06:14,310 Op verschillende machines, de grootte van een char - 1405 01:06:14,310 --> 01:06:15,180 meestal niet een char. 1406 01:06:15,180 --> 01:06:16,100 Chars zijn meestal een byte. 1407 01:06:16,100 --> 01:06:19,590 Maar de grootte van andere gegevenstypen verschillende grootte op een 32-bit machine 1408 01:06:19,590 --> 01:06:21,370 versus een 64-bit machine. 1409 01:06:21,370 --> 01:06:25,180 Een uint8_t is altijd 8 bits - 1410 01:06:25,180 --> 01:06:27,210 altijd een byte. 1411 01:06:27,210 --> 01:06:29,580 >> En ik moet omvatten dat standaard int header file. 1412 01:06:29,580 --> 01:06:35,040 Dus nu, zou dit zijn waarschijnlijk de beste manier om deze code te schrijven. 1413 01:06:35,040 --> 01:06:40,160 1414 01:06:40,160 --> 01:06:41,450 Dus ik af van de magische getallen. 1415 01:06:41,450 --> 01:06:44,690 En ik heb ook een meer logische Typ voor de buffer. 1416 01:06:44,690 --> 01:06:49,450 Het is niet alleen een char, het is een byte, dat is wat we verwachten dat het is. 1417 01:06:49,450 --> 01:06:53,400 >> En hier, hebben we eigenlijk een beetje meer robuust. 1418 01:06:53,400 --> 01:06:55,190 We hebben het niet noemen het een char, die - 1419 01:06:55,190 --> 01:06:58,630 misschien, wie weet - kan een andere zijn grootte op verschillende machines. 1420 01:06:58,630 --> 01:07:02,025 We zijn eigenlijk te zeggen dit is precies een byte, altijd, wat er ook gebeurt. 1421 01:07:02,025 --> 01:07:05,810 En als we hier kijken, maken we cp. 1422 01:07:05,810 --> 01:07:08,340 Uh-oh. 1423 01:07:08,340 --> 01:07:09,590 Wat is er gebeurd? 1424 01:07:09,590 --> 01:07:14,470 1425 01:07:14,470 --> 01:07:16,170 >> STUDENT 68: Het kan worden geschakeld. 1426 01:07:16,170 --> 01:07:17,880 >> JASON HIRSCHHORN: Wat? 1427 01:07:17,880 --> 01:07:19,130 >> STUDENT 69: Is het? 1428 01:07:19,130 --> 01:07:21,940 1429 01:07:21,940 --> 01:07:25,080 >> STUDENT 70: Dat heb je niet definiëren als een type. 1430 01:07:25,080 --> 01:07:28,684 >> STUDENT 71: Maar het moet worden overeenkomstig de norm. 1431 01:07:28,684 --> 01:07:29,934 >> STUDENT 72: Wat gebeurt er? 1432 01:07:29,934 --> 01:07:37,660 1433 01:07:37,660 --> 01:07:40,210 >> STUDENT 73: Moet definiëren hoofdletters? 1434 01:07:40,210 --> 01:07:41,370 >> JASON HIRSCHHORN: Dus het is niet # define. 1435 01:07:41,370 --> 01:07:45,490 Eigenlijk, in dit geval, ben ik gaat typedef gebruiken. 1436 01:07:45,490 --> 01:07:48,590 Omdat we gebruiken het als een soort op een locatie. 1437 01:07:48,590 --> 01:07:51,990 Dus in dit geval, we eigenlijk willen typedef alsof we het afdrukken van een nieuw type 1438 01:07:51,990 --> 01:07:54,490 byte, en het is in wezen dit. 1439 01:07:54,490 --> 01:07:56,590 Het is een beetje anders dan # define. 1440 01:07:56,590 --> 01:08:02,740 >> En nu, onze code werkt perfect. 1441 01:08:02,740 --> 01:08:05,230 Dus nogmaals, # define neemt iets, vervangt het overal 1442 01:08:05,230 --> 01:08:06,780 met de andere zaak. 1443 01:08:06,780 --> 01:08:07,920 Het is gewoon een macro - 1444 01:08:07,920 --> 01:08:09,420 steno om zich te ontdoen van magische getallen. 1445 01:08:09,420 --> 01:08:11,360 Maar in dit geval, omdat we gebruiken als een soort - 1446 01:08:11,360 --> 01:08:12,180 hier - 1447 01:08:12,180 --> 01:08:19,880 in om dat te werken, moeten we naar typedef wat byte. 1448 01:08:19,880 --> 01:08:21,840 >> En we zijn het definiëren van hier. 1449 01:08:21,840 --> 01:08:24,750 Het is geen structuur, het is eigenlijk gewoon een unsigned integer. 1450 01:08:24,750 --> 01:08:27,680 Het is een byte lang. 1451 01:08:27,680 --> 01:08:31,910 Deze code zal online beschikbaar zijn, en jullie moeten het nu hebben. 1452 01:08:31,910 --> 01:08:33,830 >> Dus hebben we - 1453 01:08:33,830 --> 01:08:34,250 perfect - 1454 01:08:34,250 --> 01:08:41,359 13 minuten te gaan over probleem set 5. 1455 01:08:41,359 --> 01:08:44,270 Ik wil lopen door copy.c samen, en dan gaan we even praten 1456 01:08:44,270 --> 01:08:47,120 de rest het probleem stellen. 1457 01:08:47,120 --> 01:08:48,899 Dus laat me omhoog trekken copy.c. 1458 01:08:48,899 --> 01:09:03,930 1459 01:09:03,930 --> 01:09:08,810 En het leuke is, we hebben eigenlijk al veel van deze code geschreven. 1460 01:09:08,810 --> 01:09:11,180 >> De code die we letterlijk schreef net kwam hier toen ik 1461 01:09:11,180 --> 01:09:13,120 schrijf dit op mijn eigen. 1462 01:09:13,120 --> 01:09:16,990 Maar dit is copy.c, vormt de basis de eerste twee delen van 1463 01:09:16,990 --> 01:09:22,340 de voor whodunit.c, probleem dat je nodig hebt om te schrijven, en resize.c. 1464 01:09:22,340 --> 01:09:27,050 Recover.c, dat is de derde en laatste deel van het probleem set, is niet 1465 01:09:27,050 --> 01:09:29,529 gebaseerd off van dit bestand. 1466 01:09:29,529 --> 01:09:32,200 >> Je gaat nodig hebben om dat bestand te schrijven, geven wij u een sjabloon voor dat 1467 01:09:32,200 --> 01:09:34,620 bestand, maar het heeft niets te maken met copy.c. 1468 01:09:34,620 --> 01:09:38,675 Maar omdat copy.c is de basis voor de eerste twee delen, we gaan 1469 01:09:38,675 --> 01:09:42,000 nu doorheen lopen, dus je hebt een goed gevoel voor wat het doet. 1470 01:09:42,000 --> 01:09:43,640 >> En de commentaren geven wat van weg. 1471 01:09:43,640 --> 01:09:45,120 We hebben al een aantal van dit geschreven. 1472 01:09:45,120 --> 01:09:49,220 Ten eerste, we maken zeker krijgen we drie argumenten. 1473 01:09:49,220 --> 01:09:50,560 Vervolgens gaan we onthouden van de bestandsnaam. 1474 01:09:50,560 --> 01:09:52,960 Dus we overgeslagen deze stap als we gecodeerde ons ding - 1475 01:09:52,960 --> 01:09:54,700 toen onze cp. 1476 01:09:54,700 --> 01:09:56,750 Maar hier, ze maken het een beetje schoner. 1477 01:09:56,750 --> 01:09:59,350 >> Ze controleren om ervoor te zorgen beide bestanden zijn goed, in 1478 01:09:59,350 --> 01:10:00,450 Naast ze te openen. 1479 01:10:00,450 --> 01:10:04,760 We schreven al deze code gewoon nu, dus ik ben niet van plan om stil te staan ​​bij deze code. 1480 01:10:04,760 --> 01:10:09,670 Vervolgens is een aantal dingen die specifiek zijn voor de soorten bestanden die we gebruiken, die 1481 01:10:09,670 --> 01:10:12,240 zijn bitmap-bestanden. 1482 01:10:12,240 --> 01:10:15,660 Bitmap-bestanden hebben een aantal metadata met hen verbonden. 1483 01:10:15,660 --> 01:10:20,190 >> Dus de eerste paar bytes je vertellen over het bestand. 1484 01:10:20,190 --> 01:10:23,460 Ze zijn niet de kleuren van de pixel in die afbeelding. 1485 01:10:23,460 --> 01:10:25,120 Ze vertellen je over het bestand. 1486 01:10:25,120 --> 01:10:28,220 En als je leest door het probleem set, heb je veel meer informatie 1487 01:10:28,220 --> 01:10:33,100 Op welke soorten metadata structuren zijn opgenomen met bitmaps. 1488 01:10:33,100 --> 01:10:39,350 >> Maar dat is de reden waarom we hebben deze eerste set van - deze code hier. 1489 01:10:39,350 --> 01:10:42,490 We lezen de metadata - 1490 01:10:42,490 --> 01:10:45,800 twee stukken van metadata - het bestand header en de info header. 1491 01:10:45,800 --> 01:10:51,030 En we zijn het controleren van sommige delen van het aan zorg ervoor dat het een echte bitmap-bestand 1492 01:10:51,030 --> 01:10:52,420 voordat u verder gaat. 1493 01:10:52,420 --> 01:10:55,470 >> En nogmaals, dit zijn details die we niet nodig om nu in. 1494 01:10:55,470 --> 01:10:57,720 Als u lezen via het probleem set, u zult begrijpen deze. 1495 01:10:57,720 --> 01:11:01,370 Lang verhaal kort, deze zijn gewoon te zeggen, dit is een bitmap-bestand, en 1496 01:11:01,370 --> 01:11:02,810 bevestigt dat. 1497 01:11:02,810 --> 01:11:05,180 >> Vervolgens gaan we het schrijven van die aan de file. 1498 01:11:05,180 --> 01:11:05,660 We zien dat hier. 1499 01:11:05,660 --> 01:11:06,910 We schrijven naar de aanwijzer. 1500 01:11:06,910 --> 01:11:09,260 1501 01:11:09,260 --> 01:11:11,320 Vervolgens gaan we het bepalen van padding. 1502 01:11:11,320 --> 01:11:15,240 Dus nogmaals, net als bijzonderheid met een bitmap-bestand, sommige lijnen omvatten 1503 01:11:15,240 --> 01:11:16,840 padding aan het eind. 1504 01:11:16,840 --> 01:11:19,000 En als je leest door het probleem set, u meer over padding leren. 1505 01:11:19,000 --> 01:11:22,330 Dit is de formule om vulling te vinden. 1506 01:11:22,330 --> 01:11:23,610 >> Belangrijk om te onthouden - 1507 01:11:23,610 --> 01:11:29,720 wanneer u de grootte van een bitmap wijzigen bestand, de opvulling verandert. 1508 01:11:29,720 --> 01:11:31,970 Wanneer u de grootte van een te wijzigen bestand, de opvulling verandert. 1509 01:11:31,970 --> 01:11:34,310 Het zal nooit worden groter dan 3 - 1510 01:11:34,310 --> 01:11:36,510 het zal 0 tot en met 3, inclusief. 1511 01:11:36,510 --> 01:11:38,930 Maar als je de grootte van de te wijzigen iets, de opvulling verandert. 1512 01:11:38,930 --> 01:11:47,100 >> Als ik maar een pixel in die rij, ik moeten drie bytes van padding, omdat 1513 01:11:47,100 --> 01:11:51,190 elke rij veelvouden van vier te bytes lang in een bitmap-bestand. 1514 01:11:51,190 --> 01:11:56,120 Maar als ik verdubbel het, om van een pixel twee pixels, die elk, 1515 01:11:56,120 --> 01:11:59,510 laten we zeggen, is een byte, dan moet ik twee bytes van de vulling te maken 1516 01:11:59,510 --> 01:12:00,970 die gelijk is aan vier. 1517 01:12:00,970 --> 01:12:04,200 >> Dus toen ik de grootte van iets, Ik moet het bedrag wijzigen 1518 01:12:04,200 --> 01:12:06,551 padding ik heb. 1519 01:12:06,551 --> 01:12:08,100 Is dat zinvol voor iedereen? 1520 01:12:08,100 --> 01:12:12,020 1521 01:12:12,020 --> 01:12:18,720 Vervolgens herhalen we op elke rij, of door alle rijen. 1522 01:12:18,720 --> 01:12:21,400 En dan herhalen we door elke kolom in elke rij. 1523 01:12:21,400 --> 01:12:25,330 We behandelen dit als bitmap een rooster, zoals we hebben behandeld 1524 01:12:25,330 --> 01:12:26,490 het bestuur in 15. 1525 01:12:26,490 --> 01:12:29,200 >> Zoals we behandeld de stenen wanneer we gedrukt hen op het scherm. 1526 01:12:29,200 --> 01:12:31,350 Een raster van rijen en kolommen. 1527 01:12:31,350 --> 01:12:32,350 Dan - we zagen dit. 1528 01:12:32,350 --> 01:12:33,840 We eigenlijk dit gewoon gecodeerd. 1529 01:12:33,840 --> 01:12:35,780 We creëerden een aantal tijdelijke opslag. 1530 01:12:35,780 --> 01:12:38,710 We lezen daar, en dan schrijven we het uit. 1531 01:12:38,710 --> 01:12:42,680 Dit is precies wat we net gedaan. 1532 01:12:42,680 --> 01:12:46,760 >> Vervolgens, omdat ik zei elke lijn eindigt in sommige padding, we 1533 01:12:46,760 --> 01:12:48,260 overslaan die padding - 1534 01:12:48,260 --> 01:12:51,000 de oude vulling. 1535 01:12:51,000 --> 01:12:52,630 En dan voegen we het terug. 1536 01:12:52,630 --> 01:12:55,140 In dit geval, creëren we exact dezelfde file. 1537 01:12:55,140 --> 01:12:56,180 We zijn gewoon te kopiëren. 1538 01:12:56,180 --> 01:12:57,700 Dus deze lijn is een beetje dom. 1539 01:12:57,700 --> 01:12:59,660 We konden letterlijk net zet de vulling binnen 1540 01:12:59,660 --> 01:13:04,290 >> Maar als je de grootte van het bestand te veranderen, wil je nog deze lijn? 1541 01:13:04,290 --> 01:13:08,510 1542 01:13:08,510 --> 01:13:11,560 Dus als we de grootte van een bestand, doen we nog steeds wilt overslaan 1543 01:13:11,560 --> 01:13:12,810 over de oude vulling? 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: Dus we doen. 1547 01:13:17,090 --> 01:13:19,290 Omdat dit, nogmaals, deals met het bronbestand. 1548 01:13:19,290 --> 01:13:21,570 We geven niet om de opvulling uit het bronbestand. 1549 01:13:21,570 --> 01:13:23,410 We willen naar de volgende regel. 1550 01:13:23,410 --> 01:13:28,850 Maar we hebben niet alleen terug te zetten de oude hoeveelheid opvulling. 1551 01:13:28,850 --> 01:13:31,540 We moeten weer terug de nieuwe hoeveelheid opvulling. 1552 01:13:31,540 --> 01:13:35,810 >> Dus als we de grootte van een nu veranderen bestand, willen we nog steeds over te slaan 1553 01:13:35,810 --> 01:13:38,270 opvulling in het oude bestand - wat we lezen in uit. 1554 01:13:38,270 --> 01:13:40,370 Maar wat we schrijven naar, we gaan nodig hebben om terug wat anders zetten 1555 01:13:40,370 --> 01:13:41,890 aantal opvulling die we hebben vastgesteld. 1556 01:13:41,890 --> 01:13:42,780 Yeah. 1557 01:13:42,780 --> 01:13:44,550 >> STUDENT 75: De volgorde van deze twee lijnen maakt niet uit, toch? 1558 01:13:44,550 --> 01:13:46,160 Omdat je omgaan verschillende bestanden. 1559 01:13:46,160 --> 01:13:46,620 >> JASON HIRSCHHORN: Precies. 1560 01:13:46,620 --> 01:13:48,220 De volgorde van deze twee regels maakt niet uit. 1561 01:13:48,220 --> 01:13:49,790 We schrijven deze lijn. 1562 01:13:49,790 --> 01:13:51,430 Dit is hier voor het bestand we schrijven naar. 1563 01:13:51,430 --> 01:13:54,370 Dat is belangrijk, zodat we de juiste hoeveelheid vulling. 1564 01:13:54,370 --> 01:13:57,560 Dit heeft te maken met de in het bestand. 1565 01:13:57,560 --> 01:13:58,560 We willen juist overslaan over de vulling. 1566 01:13:58,560 --> 01:13:59,470 >> We willen niet te lezen - 1567 01:13:59,470 --> 01:14:01,500 als we het lezen van een byte in een tijd, we niet de zorg over die padding bytes. 1568 01:14:01,500 --> 01:14:04,070 We willen naar de volgende regel. 1569 01:14:04,070 --> 01:14:11,800 Eindelijk net als Lucy gaf voor ons, sluiten we de bestanden en terug 0. 1570 01:14:11,800 --> 01:14:13,890 Dus dit is copy.c. 1571 01:14:13,890 --> 01:14:17,850 En we eigenlijk schreven - we de meeste van sectie schrijven van dit wezen. 1572 01:14:17,850 --> 01:14:18,740 >> Heb jij dit gemaakt. 1573 01:14:18,740 --> 01:14:22,440 Dus hopelijk heb je een goed gevoel van wat er aan de hand hier. 1574 01:14:22,440 --> 01:14:25,890 Het grote verschil, eerlijk gezegd, is gewoon dit eerste deel dat zich bezighoudt met 1575 01:14:25,890 --> 01:14:29,970 eigenaardigheden van bitmap-bestanden. 1576 01:14:29,970 --> 01:14:33,570 Dus ik heb zo mijn volgende dia wat moeten we doen? 1577 01:14:33,570 --> 01:14:35,510 Nou, laten we nadenken over whodunit. 1578 01:14:35,510 --> 01:14:38,080 >> En voor iemand die door te lezen het probleem te stellen, wat doen we 1579 01:14:38,080 --> 01:14:41,410 moeten doen in whodunit? 1580 01:14:41,410 --> 01:14:42,080 Gewoon. 1581 01:14:42,080 --> 01:14:42,460 Aleja. 1582 01:14:42,460 --> 01:14:48,570 >> Aleja: Kun je uit het deel van elke pixel die rode geeft. 1583 01:14:48,570 --> 01:14:49,730 En dan - 1584 01:14:49,730 --> 01:14:50,730 soort? 1585 01:14:50,730 --> 01:14:51,860 >> JASON HIRSCHHORN: OK. 1586 01:14:51,860 --> 01:14:54,460 Dus neem het deel van elke pixel die rood geeft. 1587 01:14:54,460 --> 01:14:57,234 Dat is dichtbij, maar niet alles. 1588 01:14:57,234 --> 01:14:59,780 >> STUDENT 76: Nou, er is verschillende manieren om het te doen. 1589 01:14:59,780 --> 01:14:59,870 >> JASON HIRSCHHORN: OK. 1590 01:14:59,870 --> 01:15:03,070 Geef me een manier. 1591 01:15:03,070 --> 01:15:08,240 >> STUDENT 76: Haal alle rode en Vervolgens benadrukken het blauw en groen. 1592 01:15:08,240 --> 01:15:10,010 >> JASON HIRSCHHORN: OK. 1593 01:15:10,010 --> 01:15:11,830 Dus gezien deze beide manieren - 1594 01:15:11,830 --> 01:15:15,210 het klinkt alsof we geven het een pixel, het heeft een rode, blauwe en groene niveau. 1595 01:15:15,210 --> 01:15:19,350 We willen de relatieve niveaus van veranderen rood, blauw en groen, afhankelijk 1596 01:15:19,350 --> 01:15:20,740 op die pixel. 1597 01:15:20,740 --> 01:15:28,380 Waar in deze code moeten we veranderen de relatieve rood, blauw en groen 1598 01:15:28,380 --> 01:15:29,720 niveaus van een bepaalde pixel. 1599 01:15:29,720 --> 01:15:30,600 Nadat we het heb gelezen - 1600 01:15:30,600 --> 01:15:32,520 voordat we schrijven? 1601 01:15:32,520 --> 01:15:34,564 Geef me het lijnnummer. 1602 01:15:34,564 --> 01:15:35,950 >> MEERDERE STUDENTEN: 83. 1603 01:15:35,950 --> 01:15:37,320 >> JASON HIRSCHHORN: 83. 1604 01:15:37,320 --> 01:15:38,570 Dus hier. 1605 01:15:38,570 --> 01:15:40,830 1606 01:15:40,830 --> 01:15:45,710 Voor whodunit, de code die u nodig hebt om write moeten allemaal gaan daar. 1607 01:15:45,710 --> 01:15:47,640 En dat is de enige code je nodig hebt om te schrijven. 1608 01:15:47,640 --> 01:15:51,520 Want, zoals wij hoorden, alles wat je nodig hebt om doen is verandering deze relatieve blauw, 1609 01:15:51,520 --> 01:15:54,420 rode en groene niveaus van elke pixel. 1610 01:15:54,420 --> 01:15:58,250 >> Je hebt gelezen dat in, en nu ben je gaan om het uit te schrijven. 1611 01:15:58,250 --> 01:16:03,100 Hoe krijg ik - als ik dit ding genaamd triple, hier, en het is van 1612 01:16:03,100 --> 01:16:04,570 Typ RGBTRIPLE - 1613 01:16:04,570 --> 01:16:08,650 goed, als we keken in bmp.h, wat is RGBTRIPLE? 1614 01:16:08,650 --> 01:16:11,450 1615 01:16:11,450 --> 01:16:12,700 >> STUDENT 77: Het is een structuur. 1616 01:16:12,700 --> 01:16:17,440 1617 01:16:17,440 --> 01:16:18,900 >> JASON HIRSCHHORN: RGBTRIPLE is een structuur. 1618 01:16:18,900 --> 01:16:22,330 We zien dat hier recht naar beneden. 1619 01:16:22,330 --> 01:16:26,600 En dus als ik wilde toegang, bijvoorbeeld de rode niveau van de structuur, hoe kan ik 1620 01:16:26,600 --> 01:16:30,005 toegang tot de rode niveau van deze structuur? 1621 01:16:30,005 --> 01:16:37,280 >> [KLASSE mompelt] 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: Klopt dat? 1625 01:16:48,856 --> 01:16:53,040 >> STUDENT 79: Het moet triple worden dot, in plaats van RGBTRIPLE dot? 1626 01:16:53,040 --> 01:16:54,120 >> JASON HIRSCHHORN: Triple. 1627 01:16:54,120 --> 01:16:56,700 Triple is de lokale variabele, dus hier, is er geen aanwijzingen hier. 1628 01:16:56,700 --> 01:16:58,400 Dus gebruiken we gewoon de puntnotatie. 1629 01:16:58,400 --> 01:17:00,480 Dit zal me het niveau van rood geven. 1630 01:17:00,480 --> 01:17:06,180 Als ik wil om het te veranderen, ik stel gewoon dat gelijk is aan iets anders. 1631 01:17:06,180 --> 01:17:13,190 Dus nogmaals, deze lijn van code toegang deze variabele in deze structuur, en 1632 01:17:13,190 --> 01:17:15,070 kunnen we deze ingesteld op iets nieuws. 1633 01:17:15,070 --> 01:17:20,040 >> Dus voor whodunit, nogmaals, dit is, in wezen, wat we moeten doen. 1634 01:17:20,040 --> 01:17:21,170 Heel simpel. 1635 01:17:21,170 --> 01:17:25,020 Verander gewoon een aantal relatieve niveaus, en dit is waar die code gaat. 1636 01:17:25,020 --> 01:17:27,720 Resize, aan de andere kant, is een beetje lastiger. 1637 01:17:27,720 --> 01:17:30,900 In feite, resize is waarschijnlijk de lastigste deel van dit probleem te stellen. 1638 01:17:30,900 --> 01:17:32,720 We hebben drie minuten te gaan over. 1639 01:17:32,720 --> 01:17:34,910 >> Maar nogmaals, we hebben al geschreven de meeste van deze code, zodat we 1640 01:17:34,910 --> 01:17:36,500 moet redelijk bekend zijn. 1641 01:17:36,500 --> 01:17:40,750 Wat zijn sommige dingen die we willen doen in resize, als je hebt gelezen over de 1642 01:17:40,750 --> 01:17:43,470 probleem ingesteld? 1643 01:17:43,470 --> 01:17:45,290 Als je ze aan mij, we kan praten over hen. 1644 01:17:45,290 --> 01:17:47,340 Wat zijn sommige dingen die we willen doen? 1645 01:17:47,340 --> 01:17:47,970 >> STUDENT 80: Verticaal - 1646 01:17:47,970 --> 01:17:52,360 dus je moet horizontaal formaat wijzigen, maar verticaal resize het ook? 1647 01:17:52,360 --> 01:17:58,475 >> JASON HIRSCHHORN: Dus als we krijgen een pixel, en we willen het wijzigen door een 1648 01:17:58,475 --> 01:18:03,460 factor twee, het moet nu worden horizontaal verkleind en vergroot of verkleind 1649 01:18:03,460 --> 01:18:05,220 verticaal. 1650 01:18:05,220 --> 01:18:06,640 Is dat logisch? 1651 01:18:06,640 --> 01:18:07,060 Yeah. 1652 01:18:07,060 --> 01:18:09,300 Dus dat is waarschijnlijk de grootste uitdaging. 1653 01:18:09,300 --> 01:18:10,430 En we praten over dat in een sec. 1654 01:18:10,430 --> 01:18:11,065 Yeah. 1655 01:18:11,065 --> 01:18:15,270 >> STUDENT 81: De manier waarop ik dacht er werd u print het uit moest - 1656 01:18:15,270 --> 01:18:15,490 >> JASON HIRSCHHORN: Wacht. 1657 01:18:15,490 --> 01:18:17,580 Vertellen ons niet wat je gedaan hebt. 1658 01:18:17,580 --> 01:18:20,620 We gaan in de logica te praten. 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 Wat was de vraag? 1662 01:18:27,410 --> 01:18:28,892 >> JASON HIRSCHHORN: Je hebt net opgeheven hand. 1663 01:18:28,892 --> 01:18:31,600 Er was geen sprake. 1664 01:18:31,600 --> 01:18:32,520 Laat me presenteren. 1665 01:18:32,520 --> 01:18:34,560 Laat ik alleen dit bespreken kort. 1666 01:18:34,560 --> 01:18:38,400 Dus we hebben een pixel, we willen repliceren, zowel horizontaal als 1667 01:18:38,400 --> 01:18:39,360 verticaal. 1668 01:18:39,360 --> 01:18:48,920 Dus ideaal wat we hier doen is, we gelezen in onze pixel, we schrijven het 1669 01:18:48,920 --> 01:18:51,690 echter vele malen. 1670 01:18:51,690 --> 01:18:54,720 >> Maar dan hebben we onze truc hier, omdat dan willen we doorgaan naar de 1671 01:18:54,720 --> 01:18:57,660 volgende regel en schrijf het op de het begin van de volgende regel. 1672 01:18:57,660 --> 01:19:02,960 Dus als we willen beide repliceren horizontaal en verticaal, wat 1673 01:19:02,960 --> 01:19:05,050 een goede manier om dat te doen - 1674 01:19:05,050 --> 01:19:06,780 men wel goed om dat te doen? 1675 01:19:06,780 --> 01:19:11,950 Dus we hoeven niet voortdurend zoeken rond ons bestand om de dingen te plaatsen. 1676 01:19:11,950 --> 01:19:14,360 >> Die vraag misschien niet logisch, maar ik denk dat een 1677 01:19:14,360 --> 01:19:15,800 antwoord op het zal helpen. 1678 01:19:15,800 --> 01:19:17,210 >> STUDENT 82: Maak een array? 1679 01:19:17,210 --> 01:19:20,090 >> JASON HIRSCHHORN: Dus laten we denken van elk bestand als een rij. 1680 01:19:20,090 --> 01:19:22,550 Laten we denken in termen van rijen. 1681 01:19:22,550 --> 01:19:26,670 Als we onze eerste rij van onze kleine beeld kunnen we die rij maken 1682 01:19:26,670 --> 01:19:30,640 in een grote rij van een grote foto, en dan repliceren die rij echter 1683 01:19:30,640 --> 01:19:34,250 vele malen moet worden herhaald, plaats van te gaan pixel voor pixel, 1684 01:19:34,250 --> 01:19:37,260 die verwarrend wanneer krijgt omgaan met bestanden. 1685 01:19:37,260 --> 01:19:38,730 >> Want als we hadden - 1686 01:19:38,730 --> 01:19:41,260 Ik heb bijna geen ruimte. 1687 01:19:41,260 --> 01:19:46,490 Als dit ons bestand, en we hebben dat een pixel daar, en we willen om het te zetten 1688 01:19:46,490 --> 01:19:49,840 daar hebben we nog een aantal dingen die moeten daar als we gaan 1689 01:19:49,840 --> 01:19:51,450 schrijven en het creëren van onze nieuwe bestand - 1690 01:19:51,450 --> 01:19:53,250 ons bestand dat is twee keer zo groot. 1691 01:19:53,250 --> 01:19:56,820 >> Maar het is echt moeilijk met bestandsfuncties om rond te slaan om nieuwe lijnen 1692 01:19:56,820 --> 01:20:00,260 als dat, en ga dan terug hier en zet dingen in. 1693 01:20:00,260 --> 01:20:04,500 Het is bijna onmogelijk om iets te doen als dat, als dat zinvol is. 1694 01:20:04,500 --> 01:20:10,180 Dus als we denken in termen van rijen, kunnen we nemen onze rij, en dan zet het - 1695 01:20:10,180 --> 01:20:11,720 repliceren rijen verticaal. 1696 01:20:11,720 --> 01:20:15,860 >> En dat is hoe we omgaan met resizen verticaal in plaats van horizontaal. 1697 01:20:15,860 --> 01:20:18,810 Dat was een beetje snel, en een beetje verwarrend. 1698 01:20:18,810 --> 01:20:22,375 Helaas is onze tijd om is. 1699 01:20:22,375 --> 01:20:27,340 Ik zal buiten staan ​​voor die van u hier die vragen hebben over het hebben 1700 01:20:27,340 --> 01:20:30,500 probleem set, inclusief herstellen. 1701 01:20:30,500 --> 01:20:32,320 >> Dus laten we verdagen voor nu. 1702 01:20:32,320 --> 01:20:34,480 En nogmaals, als je vragen hebt, we kunnen buiten praten. 1703 01:20:34,480 --> 01:20:38,294