JASON HIRSCHHORN: Tervetuloa, kaikille, jotta Viikko 6. Olen iloinen nähdessäni teidät kaikki elossa ja hyvin jälkeen Quiz 0, koska tiedän, että oli vähän karkea. Mutta onneksi te kaikki teki uskomattoman hyvin. Ja niin se on hienoa. Jos olet minun jaksossa, olen antanut eniten teistä takaisin tietokilpailuja jo. Pari teistä, Tapaan tunnin jälkeen. Ja jos olet laajennus opiskelija-ja et ole saanut tietokilpailun takaisin vielä, oma TF on todennäköisesti käsittelemään sitä ja luokittelu se, ja saa sen takaisin sinulle pian. Joten minun laajennus opiskelijoita, jotka ovat katsot juuri nyt - toivottavasti elää - Pääsen tietokilpailuja pian samoin. Meidän päivän esityslistaa on seuraava. Ensin aiomme mennä yli joitakin resursseja CS50 tarjoaa sinulle. Aiomme mennä yli Quiz 0 seuraavalle, ja Minä vastata kaikkiin kysymyksiin ketään on noin erityisiä ongelmia. Ja sitten me menee yli tiedoston I / O ja ongelma asettaa 5. Nämä kaksi viimeksi mainittua aihetta ottaa muodostavat suurimman osan jaksossa tänään. Laitoin tämän luettelon ajan joka viikko muistutus teille kaikille, mutta ydin jakso, meillä on vain 90 minuuttia - me eivät pysty kattamaan kaikkea, mitä minä haluaisivat kattaa teitä. Mutta meillä on ton resursseja voit hyödyntää niin saat tietää materiaalin ja työn kautta ongelman asettaa. Muistutus siitä, että minulla on verkossa tekstin laatikko, perustettu voit täyttää, jos on palautetta minulle, sekä myönteisiä rakentavaa, noin osiosta. Että URL sijaitsee aivan täällä. Joten, hetki, jos sinulla on palautetta, onko aikana osiossa tai sen jälkeen, tai sen jälkeen katsot video verkossa, antaa minulle palautetta. Olen todella kiitollinen kaikesta siitä. Joten minulla on ollut pieniä keskusteluja kanssa paljon minun opiskelijat koko viikon - kuten Ojennan takaisin tietokilpailuja, puhumme Tietenkin nähdä, miten teet. Ja yksi teema on tullut esiin yhä yli puhuessaan - vuonna erityisesti - ongelma asettaa. Ja olen kapseloitu että teema taululle juuri nyt. Pääasiassa kysymys on eroa välillä kääntämällä jotain, joka on tehdään oikein ja jotain että on tehty hyvin. Useimmat ihmiset ovat tehneet fantastista kannalta oikeellisuutta - 5: n tai 4: n kaikissa psets. Useimmat ihmiset saavat nämä koko ajan. Kuitenkin vain siksi olet tehnyt jotain oikein ei tarkoita olet tehnyt jotain niin tyylikkäästi, tai tehokkaasti, tai siististi kuin voineet tehdä sen. Ja sitähän suunnittelu - ja vähemmässä määrin tyyli - akselit ovat. Olen siis työntää teitä kaikkia, ja muut TFs ajavat te, paitsi puolestaan asioita, jotka ovat oikein, mutta käännä in asioita, jotka on koodattu hyvin. Ei tee tarpeettomia silmukoita, ei laskematta muuttujia, jos sinun ei tarvitse. Esimerkiksi taaksensa Harjoitus 4 saattaessaan tiilet näyttö, joka rivillä - joka tiilestä annetaan rivillä on sama y-koordinaatti - samalla korkeudella koordinaatti. Niin, että y-koordinaatti ei tarvitse laskettava sisällä sisustus sisäkkäistä silmukkaa, että olet todennäköisesti käyttää laittaa ne tiilet ruudulla. Se vain on laskettava joka kerran kytketään rivin tai siirretään alas peräkkäin. Joten sanoa jos on 10 tiiliä rivi, jokainen tiili voi olla sama y-koordinaatti, ja että y-koordinaatti voi vain laskea kerran kaikille niille. Sen ei tarvitse laskea 10 kertaa, eikä tämän laskennan tarve tapahtua todellinen funktiokutsua - uusi gracked funktiokutsuna. Joten jos se oli hieman hämmentävää te, enemmän yleisesti, asioita, jotka ei tarvitse tapahtua joka kerta käytte läpi FOR silmukan ei pitäisi olla laittaa sisälle varten silmukka, ja ei pitäisi tapahtuu joka kerta kun lähdet kautta varten silmukka. Toinen hyvä suunnittelu esimerkki näimme viikolla 3 15, voit pitää kirjaa nolla. Joten kun alustaa Laivalla tallenna - in globaali muuttuja, ehkä - x-ja y-koordinaatti on nolla. Ja sitten kun - Your Move-toimintoa, kun soitat onnistuneeksi, päivität sijainnin nolla. Se säästää saamasta tehdä sisäkkäisiä silmukoita käydä läpi nousta aina teidän liikefunktio ja löytää nolla, tai löytää laatta, ja sitten tarkistaa, mitä on sen vieressä. Sen sijaan sinulla on sijainti nolla, voit vain katsoa yläpuolella, alapuolella, ja vasemmalla ja oikealla puolella, löytää laatta etsit. Joten kannalta ohjelmien olemme kirjallisesti, he eivät koskaan tarpeeksi suuri että jotkut näistä suunnittelun päätöksiä tulevat todella haitata ohjelmaa tai tehdä se ajaa hitaammin, tai ehkä jopa muisti loppuu. Mutta olemme yhä ajaa te kirjoittaa niin tyylikäs ja tehokasta koodia kuin mahdollista. Joten jos et päätyä kirjallisesti asioita että on huomattavasti suurempi soveltamisalaan, ne kirjoitetaan hyvä suunnitella sen lisäksi, että oikea. Niin monet teistä toi, että ulos. Se on jotain, jota etsimme - jotain aiomme jatkaa painostaa teitä kaverit. Jos sinulle tulee kysyttävää suunnittelu oman ohjelman, rohkeasti tavoittaa minua, ja olen onnellinen käydä läpi ohjelman kanssasi, ja esille joitakin suunnittelu päätöksiä olet tehnyt, ja antaa teille joitakin ehdotuksia siitä, miten tehdä vielä paremman suunnittelun päätöksiä. Joten aiomme siirtyä puhumme Quiz 0. Ennen kuin teemme, että ei kukaan on kysyttävää siitä, mitä Olen kattaa tähän mennessä? [Kahina NOISE] JASON HIRSCHHORN: Seitsemän sekuntia. OK. Puhutaanpa Quiz 0 vähän. Useimmat sinulla on Quiz 0 selkään. Jos et, toivottavasti muistat sen vähän. Mutta jos olet ottanut Quiz 0, niin pääsevät myös PDF verkossa näytteen ratkaisuja. Onko kellään mitään kysyttävää ennen hyppäämme viikon materiaalia erityisiä ongelmia Quiz 0 - miksi vastaus on, mitä se on? Onko kukaan hämmentynyt mitään? Vaikka sinulla ongelmia oikea, mutta vain haluaisi minun selittää sitä vähän enemmän, olen mielelläni nyt. Joten olen pyytänyt sinua kaverit valmistautumaan joidenkin ajatuksia Quiz 0. Joten, jotka haluaisivat saada meidät alkoi Kysymykseni tai kommentoida Quiz 0? [PAPER kahina] JASON HIRSCHHORN: Kaikki eivät teki täydellisesti. Tiedän siis [LAUGHS] siellä täytyy olla joitakin kysymyksiä noin Quiz 0. OK. Kyllä. Ompica. OMPICA: Numero 10. JASON HIRSCHHORN: Numero 10. Kumpi oli numero 10? OMPICA: - JASON HIRSCHHORN: I haven't - OMPICA: kuuluu - JASON HIRSCHHORN: Numero 10 oli kahdeksan i - kirjallisesti kahdeksan i? OMPICA: Joo. JASON HIRSCHHORN: OK. Joten toinen kysymys sinulla voisi olla kysyi oli minun kaukonäköisiä? Vastaus on kyllä. Kohdassa ennen tietokilpailu, kysyin te koodata sekä Sterling ja kahdeksasta i. Molemmat tapahtunut näkyvät tietokilpailu. Joten toivottavasti olet maksanut huomiota tähän. Ja jos olisit, niin olisit luultavasti tehty hyvin näihin kahteen. Mutta kahdeksasta i, emme oikeastaan ​​koodi se luokassa, mutta se oli jälleen kysyttiin tietokilpailu. Joten pari asiaa ottaa Huomaa kun koodaus kahdeksan i. Ensimmäinen asia, per kysymys, oli että sinun piti tarkistaa, jos merkkijono vastasi null. Pari ihmiset yrittivät tarkistaa myöhemmin Ohjelmaan jos s kiinnike olin - joten erityisluonnetta, että string - oli sama null. Mutta muista, että null on pohjimmiltaan - se on hyvä ajatella null kuin nolla osoitin - osoitin nollaan - jonnekin muistiin, jossa et voi koskaan käyttää. Joten jos jotain on yhtä suuri kuin nolla, olet tietää, että se ei ole alustettu, tai siellä ei ole mitään. Joten s on char tähden, S kiinnike i on char. Joten on järkevää verrata s nollaamaan, mutta ei s kiinnike i nollaksi. Mutta jälleen kerran - niin että oli ensimmäinen asia että sinun piti tehdä - varmista, että sinulla todella sai kunnon merkkijono. Seuraavaksi sinun halusi mennä läpi kunkin merkin merkkijono. Ja jotta olisi kuin s kiinnike Minä esimerkiksi, jos minulla on iterator. Ja ottaa sen merkin kohdalle ja saat sen todellista arvoa. Olet se tallennetaan char, mutta ASCII-arvo nolla - nolla merkki - ei itse asiassa ole kokonaisluku nolla. Se on joku muu luku, että voit etsiä ASCII taulukossa. Niin yksi tapa korjata, että - luultavasti paras tapa korjata että - on vähentävät sitä Merkki Arvo - nolla merkki. Joten miinus yksi tarjous, nolla, toinen yksi tarjous. Joka vie mitä numero olet kuten nieriä, ja saada se sama numero todellinen kokonaisluku. Ja se on hyvin samankaltainen lähestymistapa paljon ihmisiä otti Harjoitus 2, Caesar ja Viginere - nämä salaus, kun pyöri niitä. Joten kun olet sen numeron nollasta yhdeksään, sitten - riippuen jos se menee perimmäinen numero - sinun täytyy moninkertaistaa sen jonka teho 10. Jotkut ihmiset siirtyi takaisin edessä, ja kerrotaan yksittäisten numero teho 10. Jotkut ihmiset siirtyi edestä taakse - ja niin sai suurimpia Tilauksen numerot ensin - ja säästäisi kuin globaali laskinmuuttuja. Ja sen jälkeen aina kun läpi FOR silmukka, kerrotaan, että jättiläinen maailmanlaajuinen laskinmuuttuja 10, jotta tilaa seuraava merkki. Joten se oli hieman sekava ilman minulle kirjallisesti taululle. Mutta Näyteliuosta on käytössäsi. Mutta ne olivat suuria asioita etsimme. Myös Varmista vielä, että jokainen yksilöllinen luonne oli todellakin merkki nollan ja yhdeksän, eikä jokin muu merkki, kuten, esimerkiksi. Ne olivat asioita etsimme varten tähän kysymykseen. Vastaako tuo kysymykseesi? OMPICA: Joo. JASON HIRSCHHORN: OK. Onko muita kysymyksiä noin Quiz 0? Entä kokoamiseen? Kaikki koota oikea? Ei. Oli - [LAUGHS] Kysyttävää tietojenkeruuprosessiin? Vau. [PAPER kahina] JASON HIRSCHHORN: Kyllä. Michael. MICHAEL: Onko numero 7 - satunnainen? JASON HIRSCHHORN: Numero 7. Numero 7 oli saada satunnaisen kokonaisluvun. Erinomainen. Joten olet antanut kokonaisluku ja kokonaisluku b, ja haluat satunnainen kokonaisluku ja b. Voimme itse kirjoittaa tämä yksi aluksella, koska tämä oli yhtä riviä koodia - yksi tapa tehdä se. Joten meille annetaan drand kuin toiminto voisimme käyttää. Ja mitä drand - olettaen, että se on kylvetty - Mitä drand palaa? MICHAEL: float välillä 0,0 ja 1,0. JASON HIRSCHHORN: numero - joo. Numero välillä 0 ja 1. Ja niin olemme B ja. Ja sitten meillä on satunnaislukugeneraattorimme välillä 0 ja 1 antanut meille drand. Jotkut ihmiset yrittivät laittaa b tai b miinus tai jotain sisällä näitä suluissa. Se tarkoittaisi, että he ovat argumentteja tätä toimintoa. drand ei ota mitään perusteluja - kuten getString ei ei ota mitään perusteluja. Joten se on vain auki paren, lähellä PAREN - ja että itse on funktiokutsuna. Ja joka antaa sinulle useita 0 ja 1 välillä. Tietysti meillä on koko joukko että numerot voivat olla sisään Sano, jos b on 10 ja on 5, me todella haluavat numero alueella 5. Joten seuraava asia, meidän täytyy tehdä, on Kerro tämä alue b miinus. Niin oletetaan, että on kerrottu. Ja että annan meille numero tietyllä alueella. Ja että erityiset alueen ollessa ero b miinus. Ja lopuksi, että saat vain antaa sen - sanoa välillä b miinus on 5, joka tulee antaa meille numero 0-5. Mutta jos on itse asiassa 5, meidän täytyy lisätä Tällä alueella jopa missä se on oikeastaan ​​pitäisi olla, lisäämällä. Niin että saa logiikan oikealle. Ja sitten, olisitko toinen kysymys? MICHAEL: Ei Minusta tuntuu todella tyhmä juuri nyt. [LAUGHS] JASON HIRSCHHORN: Ei. Älä tuntuu todella tyhmä. Joukko ihmisiä kamppaillut tätä kysymystä. Ja sitten, toinen kysymys on, drand, sanoit, saat float - palauttaa float. Mutta tämä toiminto itse asiassa kysyi varten kokonaisluku palautetaan. Sinun ei tarvitse heittää tätä nimenomaisesti kokonaisluku, koska nämä toiminta pitää sitä kaikki float - kuten liukuluku. Kuten tämä tahto - vaikka tämä on kokonaisluku, tämä tulee kerrotaan oikein. Kaikki kertominen toimii. Sinun ei tarvitse heittää sitä täällä. Itse asiassa, sinun ei pitäisi heittää. Että olisi - jos voisitte heittää numero joka on välillä 0 ja 1 - satunnaisluku, liukuluku - niin se on joko ainoastaan ​​0 tai 1, niin menetät kaiken tuon tarkkuutta. Mutta lopussa, kun palaat, se saa automaattisesti toimitetaan mahdollisimman kokonaisluku. Joten sinun ei tarvitse tehdä että valu itse. Joten tämä oli vastaus että kysymys, numero 7. Muita kysymyksiä Quiz 0? Joo, Annie. Annie: Milloin käytämme rekursiivinen - Milloin käytämme iteratiivinen silmukoita? JASON HIRSCHHORN: Milloin käytät rekursiivinen - niin yleisemmin plussat ja miinukset rekursio vs. iteratiivinen lähestymistapa. Voiko joku tarjota ammattilainen tai con? Please? Ei voi kukaan. Kuka voi tarjota ammattilainen tai con? [PAPER kahina] Opiskelija 1: Recursive on vähemmän koodaus - vähemmän kirjoittamiseen? JASON HIRSCHHORN: Eli yleisesti, rekursio varsinkin, toiminto - tai algoritmi kuin sulautua sort - joka soveltuu to rekursiivinen lähestymistapa - olisi yksinkertaisempaa koodata rekursiivisesti. Ja vain järkevämpää tehdä se rekursiivisesti. Niin että olisi ammattilainen rekursion. Muut? Joo? Opiskelija 2: Con rekursio - Se käyttää enemmän muistia. JASON HIRSCHHORN: Niin aivan oikeassa. Rekursiivinen funktio on pitää lisätä pino kehyksiä pinoon. Joten jos olet toimivat paljon numeroita, ja täytyy soittaa tähän toimiakseen paljon, niin et varmasti vievät enemmän muistia, kun taas iteratiivinen lähestymistapa toimii vain laittaa yksi pino runko pinoon, koska kaikki tapahtuu yhden toiminnon. Muita hyviä ja huonoja puolia? Joo. OPISKELIJAN 3: plussat rekursion. Sinun ei tarvitse määritellä etukäteen, kuinka monta kertaa koodi täytynyt tehdä uudelleen. Voi olla ennalta määrätty määrä kertaa, että sinun täytyy kerrata sitten rekursio on parempi, koska se vie tätä tulosta. JASON HIRSCHHORN: Minusta se on totta. Mutta mielestäni molemmissa tapauksissa et koskaan - olet luultavasti saada joitakin käyttäjän syötettä. Tai tämä käyttötarkoitus olisi joitakin panos joka määrittää, kuinka monta kertaa se pitäisi ajaa. Joten yleensä, olisit ole vaikea koodi - vaikka iteratiivinen lähestymistapa - miten monta kertaa, että silmukka pitäisi hoitaa. Oliko sinulla toista olit ajatellut, Annie? OK. Joten ne ovat luultavasti kaksi - suurin pro ja suurin con rekursiivinen vs. iteratiivinen lähestymistapa. OK. Mitään muuta Tietovisa 0? Siirrytään. Tiedoston I / O. On ihana lyhyt tällä viikolla tiedoston I / O että toivottavasti olet katsellut useita kertaa, ja ihailtu. Paljon työtä meni tuohon, ja olen kuullut sen on mielettömän hyödyllistä. Olen myös linkki tämän dian, jos sinulla ei ole ollut mahdollisuuden katsella sitä 10 kertaa. Joten, aiomme lyhyesti mennä yli merkittäviä toimia avaamista ja työ tiedostoja, ja sitten aiomme sukeltaa koodaus ongelma ennen tarkastelemalla ongelmaa asetettu. Joten jälleen, aion laittaa tähän ylös näyttö, mutta aion puhua Hetkinen, mitä olemme täällä tekee tiedostojen I/O-- mitä se tarkoittaa? Tämä tarkoittaa, että voimme luoda meidän ohjelmat, ja sitten on meidän ohjelmia exit, eikä ollut mitään vaikutusta maailman ulkopuolella meidän ohjelman. Mutta kun alamme työskennellä tiedostot - sekä lukemisen niitä ja luoda niistä - voimme vaikuttaa jonkin verran maailman ulkopuolella meidän ohjelman. Aivan kuten jos Microsoft Word ei pystynyt tehdä Word-asiakirjoja, sitten kun Microsoft Word lopettaa, kaikki työ olisi mennyt, ja se olisi todella hyödytön. Emme lopulta haluamme pystyä kirjoittaa ohjelmia, jotka voivat vaikuttaa ympäröivän maailman, sekä ottamalla monimutkainen tuloa - kannalta tiedostojen ja kautta tiedostoja, ja myös luoda mielenkiintoisia ja pakottavia lähdöt - suhteen eri tiedostoja. Joten siksi alamme oppia käsittelemään tiedostoja. Tarkemmin sanottuna, mitä teemme on seuraava. Se on hyvin yksinkertaista. On vain pari askelta, ja ne on listattu täällä tämän koodin. Joten aiomme käydä läpi tämän koodin rivi riviltä. Ensin näet korostettuna - kun olet työskennellyt tiedosto, riippumatta tiedoston tyyppi on, sinun täytyy avata se. Ja se on kehotus fopen - täällä. Lisäät tiedoston nimi. Jos tiedosto ei ole teidän hakemistoon, tai kansio, johon tämän ohjelman elämää, niin sinun on myös sisällyttää polku, jossa kyseinen tiedosto on. Me aiomme olettaa, että tämä tiedosto nimeltä "text.txt" - yksinkertainen teksti asiakirja - on samaan kansioon kuin tämä ohjelma on. Niin se on toinen asia pitää mielessä - että jos haluat avata tiedoston jossain muualla, todella tarvitset sisällyttää sen sijainti. Toiseksi, voit siirtää argumentti fopen, ja se on mitä haluat tehdä tiedoston mukana. On olemassa kolme pääasialliset perustelut että aiot siirtyvän fopen. Kuka voi antaa minulle ne kolme? Kuka voi antaa minulle yksi heistä? Kyllä. OPISKELIJAN 4: tiedoston nimi? JASON HIRSCHHORN: Anteeksi. Kolme pääasialliset perustelut voit siirtää kuin toinen argumentti fopen. Olet oikeassa - tiedoston nimi on ensimmäinen argumentti. Mutta toinen argumentti fopen ovat yleensä kolme jouset, ja - kyllä. Aleja. Aleja: for append. JASON HIRSCHHORN:, jos haluat liittää tiedoston, joka on jo olemassa. OPISKELIJAN 5: R lukemista. JASON HIRSCHHORN: R, jos haluavat lukea tiedostosta. OPISKELIJAN 6: W kirjoittaa. JASON HIRSCHHORN: Ja w, jos halua kirjoittaa tiedostoon. Joten tässä tapauksessa, olemme kirjallisesti tiedostoon, joten meillä on w. Avaat sen, sinun on myös säästää jonnekin, ja se on kanssa koodin vasemmalla puolella sijoitusoperaattori - Olen luomassa osoitin tiedoston kutsutaan, tässä tapauksessa tiedosto. Emme aio huolehtia mitä tämä kaikki korkit FILE asia on. Riittää, kun sanon, se on pitkä stream nollia ja ykkösiä. Ja se miten aiomme käyttää sitä ja ymmärtää sitä. Seuraava asia meidän täytyy tehdä - ja Tämä on erittäin tärkeää - aina, kun avaat tiedoston - Itse asiassa, kun soitat malloc varten Esimerkiksi, ja saada jonkin verran muistia ja yrittää ja tallenna se osoitin, aina haluat varmista, että toiminto ei palannut null. Joten tässä tapauksessa, olemme Varmistamme varma, että me todellisuudessa avataan tiedostoa oikein, ja siellä oli ei virhettä ohjelmaamme. Seuraava, kun olemme tarkastetaan varmistaa että meillä on toimiva tiedoston, voimme kirjoittaa tai lukea, tai liittää tiedoston. Tässä tapauksessa olen yksinkertaisesti tulostus yksi rivi tähän tiedostoon. Miten tiedän, että? No, olen tämän toiminnon nimeltään fprintf. Kaikki toiminnot käytät kun kirjoitat, tai niiden lukeminen tai manipuloimalla tiedostot ovat samanlaisia toimintoja olet nähnyt ennen, mutta alkavat kirjaimella F, seisomaan tiedoston. Ja fprintf, toisin kuin meidän normaali tulosta app, ottaa yksi ylimääräinen argumentti, ja se on tiedosto, johon olet tulostaa tämän linjan. Minulla ei ole mitään oikeus Ohai. Minulla ei ole kolmas argumentti printf - tai toinen argumentti printf, kolmas argumentti fprintf, koska olen ei ole paikkamerkkejä täällä. En ole ollut muuttujia. Mutta jälleen kerran, fprintf ja kaikki nämä tiedosto toimintoja, jotka toimivat tiedostojen ovat yleensä menossa tiedosto johon ne toimivat. Lopuksi, viimeinen tärkeä asia tehdä, on sulkea tiedoston, aivan kuten kanssa - aina kun malloc jotain, haluamme vapauttaa jotain, ettemme on muistivuoto - haluamme sulkea tiedoston. Jos tämä ohjelma lähtenyt sulkematta tiedoston, kertoimet eivät ole mitään menisi väärä, varsinkin jos se oli pieni tiedosto. Mutta se on varmasti hyvä koodaus tyyli ja käytännössä aina sulkea tiedosto Kun olet valmis, käytä sitä. Niin, että on perustiedot tiedostojen I / O. Olet varmasti nähnyt, että ennen, tai Katselin sitä, että fantastinen lyhyt. Onko kellään mitään kysyttävää, ennen menemme joitakin käytännön koodaus ongelmia, tiedostojen I / O tai vaiheet Menin vain yli? [TYPING ÄÄNET] JASON HIRSCHHORN: Pidätkö on kysymys, Avi? AVI: Ei. JASON HIRSCHHORN: OK. Aion odottaa vielä seitsemän sekuntia. [LAUGHS] Se on todella hyvä vihje. Te vain pidä kyselemällä. Se on hyvä. OK. Joten meidän ensimmäinen käytännön ongelma on, me olemme menossa kopioida toiminta komentorivi työkalu, joka luultavasti käytetty ennen - copy - kopio työkalu. Jos kirjoitat cp ja sitten siirtää se kaksi väitteet omaan terminaaliin, voit kopioida tiedoston. Ja sitähän me aiomme kirjoittaa juuri nyt. Joten jälleen, lukemalla tämän dian, olisin voit kirjoittaa ohjelma, joka ottaa kaksi ja vain kaksi komentorivin perustelut - lähdetiedoston ja kohde tiedosto - ja kopioi sisällön lähde tiedosto kohdetiedostolle yksi tavu kerrallaan. Niin, että on paljon pyytää. Jälleen hyvä lähestymistapa tähän on ei mennä suoraan C-koodia, mutta murtaa se alas pari askelta. Ensinnäkin ajatella logiikka - aivan mitä pyydän sinua tekemään - ja ymmärtää kaikki vaiheet tähän ongelmaan. Ei C, vain joissakin pseudokoodit tai jopa henkinen malli mitä on tekeillä. Seuraava, kun olet pseudokoodina alas, selvittää, miten pseudokoodina karttoja työkaluja ja asioita olemme oppineet käyttämään C. Ja lopuksi, kun sinulla on kaikki, että yhdessä, voit koodin ongelma. Kestää 5-10 minuuttia työtä tämän ongelman. Laitan ohjeet takaisin ylös toiseen. Ja sitten me aiomme mennä yli pseudokoodina, ja koodi se elää ryhmänä. Jos sinulla on kysyttävää, kun olet työskennellyt tämän, rohkeasti nostaa kätesi, ja minä tulen ympäri ja vastata niihin. OPISKELIJAN 7: Voinko pyyhkäistä paperille? JASON HIRSCHHORN: Mitä kuuluu? [TYPING ÄÄNET] JASON HIRSCHHORN: OK. Mennään yli pseudokoodin ensin ja niin minä annan sinulle pari enemmän minuutteja koodausta. Kuka haluaisi aloittaa minut pois ensimmäisen linjan pseudokoodi tätä toimintoa? OPISKELIJAN 8: Varmista, että saitte kaksi tiedostoa. JASON HIRSCHHORN: OK. Ja jos emme ole? OPISKELIJAN 8: palaisin 0. JASON HIRSCHHORN: Pitäisikö meidän palata 0? OPISKELIJAN 8: Return - pimennyksen. Anteeksi. JASON HIRSCHHORN: Joo. Todennäköisesti ei 0. Koska 0 tarkoittaa, kaikki oli hyvää. OK. Niin, että ensimmäinen rivi of pseudokoodina. Kenellä on toisella rivillä pseudokoodina? OPISKELIJAN 9: Avaa molemmat tiedostot? JASON HIRSCHHORN: Avaa molemmat tiedostot. OK? OPISKELIJAN 10: Tarkista jos tiedosto on NULL? JASON HIRSCHHORN: Tarkista, Varmista kumpikaan ei ole NULL. Sivuhuomautuksena - slash 0 - on se, että NULL? OPISKELIJAN 11: Ei. JASON HIRSCHHORN: Tuo ei ole NULL. Tätä kutsutaan NULL terminaattori. Se on myös kirjoitettu vain yhdellä l. Joten tarkistaa jotain vastaan ​​- että on oikeastaan ​​merkki - joten tarkkailun jotain vastaan, joka on ei ole sama kuin tarkistaa, jos se on yhtä suuri kuin NULL. Ja jotkut ihmiset - heidän tietokilpailuja ja niiden ongelma sarjaa - ovat saaneet kaksi näistä sekava. Mutta kaksi näistä ovat itse asiassa eri. Yksi päättyy merkkijono - yksi on osoitin 0. OPISKELIJAN 12: Miksi et tarkista Varmista, että tiedostot eivät ole NULL ennen kuin avaat ne? JASON HIRSCHHORN: niin avoin säästää jotain kyseisessä tiedostossa. Ja jos menet takaisin - joten tämä linja - fopen - antaa sinulle osoitteen ja tallentaa että osoite tiedosto, jos se toimii. Jos se ei toimi, se tallentaa NULL - OPISKELIJAN 12: Oh. OK. Sain sinut. JASON HIRSCHHORN: In file. Joten et voi tarkistaa NULL ennen kuin olet avannut niitä. NULL tarkoittaa jotain ei toimi oikein. OK. Joten varmista, että kumpikaan ei ole? Vai? Mitä ajattelet? Menemme kanssa. OPISKELIJAN 13: Onko. JASON HIRSCHHORN: Onko? Kumpikaan on? OPISKELIJAN 13: Onko. JASON HIRSCHHORN: OK. Meillä näyttäisi olevan jonkinlainen yksimielisyys siitä. Kumpikaan ei ole NULL. OK, seuraava rivi pseudokoodina. Joka ei ole antanut minulle linja vielä? Me odottaa sinua. Joo. OPISKELIJAN 14: Sinun täytyy lukea ensimmäisestä tiedostosta? JASON HIRSCHHORN: OK. OPISKELIJAN 14: Tai käytämme fscanf tai jotain ensimmäisen tiedoston? JASON HIRSCHHORN: Eli haluamme luetaan ensimmäisen tiedoston ja - laitetaan että täällä. Lue lähdetiedostosta. Ja sitten, mitä me teemme, kun olemme lukea lähdetiedoston? Joku muu? OPISKELIJAN 15: Kirjoita osaksi määränpää tiedosto? JASON HIRSCHHORN: Kirjoitamme kohde tiedosto, ja - OK. Mitä muuta me puuttuu? Joku muu, joka ei ole antanut minulle koodiriviä vielä - ja pseudokoodina. Joo. OPISKELIJAN 16: Ehkä voit aina tarkistaa onko jotain luettavaa, kuten seuraavalle riville? Jotka ovat kuin seuraavalle riville katso jos se on olemassa. [Äänimerkin] JASON HIRSCHHORN: Oho. Se on minun kirjaaminen ohjelmisto. Joo? OPISKELIJAN 16: Joo. JASON HIRSCHHORN: Joten antaa se minulle vielä kerran. OPISKELIJAN 16: Tarkista, onko olemassa vielä ensi linjan lähdetiedosto lukea. JASON HIRSCHHORN: OK. Joten emme rivejä luettaessa - lukivat bytes täällä - mutta olet oikeassa. Haluamme lukea ja kirjoittaa, kunnes ei ole enää tavua. OK. Ja niin nämä pitäisi oikeastaan ​​olla sisennetty vähän, koska he ovat siellä alla. Oikea? Kunnes olemme poissa tavua, aiomme lukea lähdetiedoston ja kirjoittaa määränpäähän tiedoston. Ja sitten, mikä on viimeinen linja pseudokoodina? Joku, joka ei ole antanut minulle jotain vielä. OPISKELIJAN 17: Sulje tiedostot? JASON HIRSCHHORN: Aivan. Sulje tiedostot. Joten ei meidän pseudokoodina. Aion laittaa pseudokoodina osaksi gedit, ja pari minuuttia me koodaa tämän yhdessä. OK. Olkaamme päästä alkuun ryhmänä. Nishant, minulla on uusi tiedosto. Olen juuri avannut tähän asti. Untitled Document 1. Mikä on ensimmäinen asia, joka minun pitäisi tehdä? Nishant: Sisällytä kirjastot? JASON HIRSCHHORN: OK. Mitkä kirjastot? Nishant: stdio.h, stdlib.h, uskon? JASON HIRSCHHORN: OK. Mikä on stdlib varten? Nishant: Unohdin. JASON HIRSCHHORN: OK. Niin kuuluu vakiotulosteesi. Mitä pitäisi tehdä jo ennen Aloitan koodaus? Nishant: Kirjoita otsikko? JASON HIRSCHHORN: Miten saan sen värinen? [Interposing ÄÄNTÄ] Nishant: Miten saat sen värinen? JASON HIRSCHHORN: Miten voin värikoodit? Nishant: En tiedä. Oh. Tallenna. JASON HIRSCHHORN: Tallenna. Kyllä. Haluan tallentaa sen. C. Niin tallenna se työpöydälle cp.c. Makea. Ja jos haluan saada täyden tyyli pistettä, mitä minun pitäisi kuuluvat huipulla? Nishant: Voisit kirjoittaa nimesi, nimi Ohjelman ja tarkoitus Ohjelman samoin? JASON HIRSCHHORN: Näyttää hyvältä. Erinomainen. Joten olet aloittanut meidät täydellisesti. # Include - me myös kirjoittaa - OK. Joten Taidan kaikki tarkoitus mennä. Kuka on ensimmäinen rivi koodia minulle - tai ensimmäistä riviä koodia että se vie tyydyttää ensin kommentoida pseudokoodilla? You. OPISKELIJAN 18: Eikö sen pitäisi olla int argc, ja sitten char * argv? JASON HIRSCHHORN: Luulen olet oikeassa. Katsotaanpa vaihtaa sen int main, avoin paren, int argc, pilkku, char * argv? Pidätkö siitä? OPISKELIJAN 18: suluissa. JASON HIRSCHHORN: suluissa. Alkusulkumerkki, loppusulkumerkki, sulje vanhempi. Täydellinen. Nyt voin ottaa komentorivin argumentteja. OK. Varmistaa meille annetaan kaksi tiedostoa. Voit antaa minulle, että samoin. OPISKELIJAN 18: Jos argc - Tämä yksi ei ole sama 3. JASON HIRSCHHORN: Jos auki paren argc ei ole yhtä 3? OPISKELIJAN 18: Joo, palaat 1 tai mitään. JASON HIRSCHHORN: Anteeksi. OPISKELIJAN 18: Return 1 tai mitään. JASON HIRSCHHORN: Return 1. OK? Suuri. Avaa molemmat tiedostot. Kuka voi auttaa minua avaamaan molemmat tiedostot? Joka ei ole antanut minulle koodi vielä? Kurt? Kurt: Niin isot F-I-L-E tähden lähde. JASON HIRSCHHORN: Aion ottaa vokaaleja. Nämä ovat viileitä. Se on kuin Tumblr. OPISKELIJAN 18: Yhtä fopen - JASON HIRSCHHORN: Yhtä fopen? OPISKELIJAN 18: Open paren, argv, alkusulkumerkki. JASON HIRSCHHORN: Odota. Anteeksi. Open paren. OK. OPISKELIJAN 18: Joo. Argv sub 1. JASON HIRSCHHORN: Sub 1? OPISKELIJAN 18: Joo. Argv alkusulkumerkki 1 - Kyllä. Ja sitten pilkku ja sitten avoin kahden hengen lainaus, r, lainausmerkki, sulje kantatuote, puolipiste. JASON HIRSCHHORN: Makea. Entä toinen? OPISKELIJAN 18: Hyvin samankaltainen, mutta sen sijaan S-R-C, haluat kutsua sitä D-S-T. JASON HIRSCHHORN: Oo! Pidän siitä. OPISKELIJAN 18: Just D-S-T. Joo. Ja sitten ARGV, alkusulkumerkki, 2. Joo. Ja sitten w sijasta r. Joo. JASON HIRSCHHORN: Great. Seuraava pari riviä. Lisäksi, jos joku on asioita lisätä linjat, jotka olemme tehneet, rohkeasti lisätä ne samoin. Varmista kumpikaan ei ole NULL. Kuka voi antaa minulle koodin minun täytyy tyydyttää, että linja pseudokoodina? Archer. ARCHER: Jos src vastaa tasavertaisina NULL tai DST vastaa tasavertaisina NULL, sitten palaat - JASON HIRSCHHORN: Mitä? ARCHER: Return 2? JASON HIRSCHHORN: Return 2. Joten jos se on auki paren src vastaa vastaa NULL, tai - mitä se thing's - putki? Putki? Me kutsumme sitä putken. Putki, putki, dst vastaa tasavertaisina NULL, palaa 2. OK? Kunnes olemme ulkona tavua - me tavallaan ohitetaan tämän vaiheen pseudokoodina osa menossa täällä. Mutta ennen kuin olemme ulkona tavua - mitä se kuulostaa? Minkälaista C rakenne - mutta en käytä sanaa rakennetta, koska aiomme alkaa käyttää että muissa tapauksissa - mutta C työkalu Kuulostaako? OPISKELIJAN 19: silmukka. JASON HIRSCHHORN: silmukka. Kuulostaa silmukka. Eli kuka voi antaa minulle ensimmäinen rivi silmukan koodi täällä? Voit myös valita, millaisia loop haluat, jos annat minulle tämä rivi koodia. On kolmenlaisia. Saat valita. Ehdotan yksi niistä. Avi. Kumpaa haluat? AVI: FOR. JASON HIRSCHHORN: FOR. AVI: int i on nolla. JASON HIRSCHHORN: OK. AVI: Tämä osa En ole varma. Mutta i on pienempi kuin koko Star lähde? En ole varma siitä. JASON HIRSCHHORN: OK. AVI: Koska haluat kokoisia tiedostoja, eikö? JASON HIRSCHHORN: Eli tämä luultavasti ei antaa meille koko varsinaisen tiedoston tavuina. Joten mitä muuta voisimme tehdä? Mikä on toinen silmukka? Vai pitäisikö pitäydymme varten silmukka? OPISKELIJAN 20: Osaatko ääntää while-silmukka? Ja sitten, mitä haluat tehdä, on Olisit - koska meillä char * tiedosto. Joten jos me vain pitää monesko että kunnes olimme löytää NULL merkin loppu? Tai no, on se, että ei ole, miten tiedostot toimivat? JASON HIRSCHHORN: jotta voimme pitää monesko char * kunnes löydämme NULL - OPISKELIJAN 20: Pohjimmiltaan pitää käynnissä merkki kerrallaan, kunnes osuimme tiedoston loppuun. JASON HIRSCHHORN: Kyllä. Niin, että mitä haluamme tehdä. Haluamme pitää käsittelyssä, luonne merkiltä, ​​kunnes saamme tiedoston loppuun. OPISKELIJAN 20: Joo. Etsi - mikä on lopussa tai stop-merkin lopussa tekstitiedosto. JASON HIRSCHHORN: OK. Joten kun pääsemme tiedoston loppuun - Mistä tiedämme, olemme saavuttaneet loppuun tiedoston? Jos Soitan - joten katsotaanpa askel taaksepäin. Mikä on funktio? Mennään tätä linjaa täällä. Lue lähdetiedostosta. Kuka voi antaa minulle Koodirivin? OPISKELIJAN 21: fscanf? JASON HIRSCHHORN: fscanf. OK. Mitä jos haluan lukea, hyvin Erityisesti yksi tavu? OPISKELIJAN 21: En tiedä. JASON HIRSCHHORN: OK. Jopa helpompaa kuin fscanf - mikä on - Haluan lukea lähdetiedoston? Lukea lähdetiedoston. Mikä on toiminto - Joo. OPISKELIJAN 22: Se on fread? JASON HIRSCHHORN: Fread. Mielestäni Pysytään että yksi nyt. Millaisia ​​argumentteja ei fread kestää? OPISKELIJAN 22: Luultavasti tiedostotyyppi, ja sitten sijainti tiedoston? JASON HIRSCHHORN: Mitä voin kirjoittaa tähän selvittää, mitä tällaiset väitteet fread kestää? USEITA Opiskelijat: Man fread. JASON HIRSCHHORN: Man fread ja fwrite. Näyttää ne hengailla yhdessä. Joten fread vie kuinka monta argumenttia? OPISKELIJAN 23: Four. JASON HIRSCHHORN: Kestää neljä argumenttia. Se vie osoitin, koko, ja että asia, joka on outo, ja jotkut tiedosto. OK? Katsotaanpa lukea siitä täällä. "Toiminto fread lukee n memb elementtejä tietojen kunkin koon tavua pitkä, purosta osoitteen sivulle stream, tallentaa ne paikkaan antama osoitin. " Joten neljä argumenttia. Miksi en vain kopioida tämän, ja liitä se täällä. OK. Eli kuka voi aloittaa täyttämällä nämä väitteet minulle? Avi. AVI: Ota mitätön. Laita vain src. Ota osoitin ja tähti. Laita src. Sitten - JASON HIRSCHHORN: Joten aion lopettaa Oletko siellä, koska se on virheellinen. Olet oikeassa kanssa src, mutta jossa olisi src mennä? [Interposing ÄÄNTÄ] JASON HIRSCHHORN: sen pitäisi mene tänne. Se src - meidän src on tyyppiä. Katsotaanpa täällä. Tämä ei pyydä tyyppiä FILE *, me todella näkemään useimmiten niin. Joten tämä ei pyydä argumentti Tyyppi Tiedosto * nimeltään virta, joka on src. OK? Minkä kokoinen asioita tehdä haluamme lukea? Annoin teille tämän ongelman kuvaus. OPISKELIJAN 24: Yksi tavu kerrallaan. JASON HIRSCHHORN: Yksi tavu. Kuinka suuri on tavu? Sen koko on tavua, niin mitä voin laittaa tuolla? OPISKELIJAN 25: One. JASON HIRSCHHORN: One. Oikea. Sen koko on yksikkö tavu, joten 1 on 1 tavu. Kuinka monta haluan lukea kerrallaan. OPISKELIJAN 26: One? JASON HIRSCHHORN: Yksi asia. Haluan lukea yksi asia koosta 1, yksi purema kerrallaan. Ja jos laitan sen, kun olen lukenut sen? OPISKELIJAN 27: Kohde? JASON HIRSCHHORN: Joten en voi laittaa se suoraan määränpäähän. OPISKELIJAN 28: Aiotko laittaa se kolmas osoitin? OPISKELIJAN 27: määränpäähän. JASON HIRSCHHORN: OK. Joo. OPISKELIJAN 29: Voit ilmoittaa jotain toimia väliaikainen varastointi aikaisemmin. JASON HIRSCHHORN: OK. Anna se minulle. OPISKELIJAN 29: Toinen tiedosto osoitin, ehkä? JASON HIRSCHHORN: OK. Joten tämä on mitätön tähden - se on eräänlainen tyhjiö tähti, joten se ei tarvitse olla tiedoston osoitin. Ja jos luen yhden tavun, jossa olisi hyvä paikka tallentaa yhden tavun? OPISKELIJAN 29: array? JASON HIRSCHHORN: array. OK. Ja mitä muuta on jotain, joka on vain koko Yksi tavu? OPISKELIJAN 30: char *? OPISKELIJAN 29: Joo. JASON HIRSCHHORN: char * ei ole yksi tavu. OPISKELIJAN 29: char. JASON HIRSCHHORN: merkki on yksi tavu. Oikea? Joten kutsukaamme tämä puskuri on geneerinen nimi, jota käytetään näitä asioita tallentaa jotain väliaikaisesti. Joten en luoda puskuri. Oikea? Mutta se vie void *. Joten ehkä olet oikeassa, että se tulisi olla puskuria 0-koon. Joten se tallentaa yksi - oikealle. Koska tämä täällä - char puskuri on merkki, mutta tämä vie void * - osoitin. Niin voisin tehdä tätä ja nyt puskuri on osoitin. Mitä muuta voisin tehdä? OPISKELIJAN 31: Laita tähti vieressä char. JASON HIRSCHHORN: Voisin luoneet sen char *. OK. Mikä on toinen asia, voisin tehdä? Tai mennään tämän kanssa. Char * puskuri, niin mitä voin laittaa tänne? OPISKELIJAN 31: Buffer. JASON HIRSCHHORN: Buffer. Puskuri on osoitin char. Ja kyseisessä paikassa, me laitamme yksi tavu jotain olemme lukeneet. Joo. Avi. AVI: Vain nopea kysymys. Haluatko malloc puskuri? JASON HIRSCHHORN: Kuka voi vastata tähän kysymykseen? OPISKELIJAN 32: No, se ei oikeastaan valitse mitään juuri nyt, niin - JASON HIRSCHHORN: Mutta tee haluamme malloc sitä? OPISKELIJAN 32: Jos sinun pitäisi tehdä se, että Muuten, kai, joo, koska sinun tarvitse Joissakin paikka sille osoittamaan. JASON HIRSCHHORN: Onko meillä on malloc se? OPISKELIJAN 33: Jos aiot käyttää sitä ulkopuolella silmukka. JASON HIRSCHHORN: Olemmeko menossa käyttää sitä ulkopuolella silmukan? OPISKELIJAN 34: Kyllä. OPISKELIJAN 35: Odota. Haluammeko julistaa, että se vuonna silmukan jälkeen? JASON HIRSCHHORN: Niin kai meillä on pseudokristillisenä kun silmukka täällä, että olemme yrittää selvittää, että emme ole mennyt vielä. Meidän ei tarvitse malloc sitä. Olemme toimivat tärkein, se vain menee käytettävä sisälle silmukan. Se ei tarvitse olla ulkopuolella. Joten se voi olla paikallinen muuttuja. Sinulla on osoitin paikallinen muuttuja. OPISKELIJAN 36: Mutta se ei ole osoittaa mitään. JASON HIRSCHHORN: Ei, se ei ole alustetaan mitään. Mutta emme aio käyttää sitä myös. Aiomme laittaa jotain se ensimmäinen kerta käytämme sitä. Niin että tuntuu OK. Joten emme tarvitse malloc täällä. Ja mielestäni se on OK, koska on. OK. Meillä on fread linja. Tehdään seuraavalle riville. Jos haluamme kirjoittaa tiedoston, mitä on hyvä toiminto käyttää tehdä niin? OPISKELIJAN 37: fwrite? OPISKELIJAN 38: fprintf? JASON HIRSCHHORN: fprintf on yksi. Mikä on toinen? OPISKELIJAN 39: fwrite. JASON HIRSCHHORN: fwrite. Ja meidän tarkoituksiin, fwrite, jonka näimme täällä, on luultavasti parempi vaihtoehto. Se kestää neljä perusteluihin samoin. Nishant, voitko antaa minulle argumentteja? Nishant: Ensimmäinen menee olevan vain puskuri. JASON HIRSCHHORN: OK. Nishant: toinen on vain olemaan 1. Kolmas tulee olemaan 1. Ja neljäs tulee olemaan dst. JASON HIRSCHHORN: Onko kellään kysyttävää että linja? Se näyttää hyvältä. OK. Joten nyt se näyttää yksi asia olemme puuttuu - itse asiassa, nyt kirjoittaa tämä viimeinen rivi. Sulje tiedostot. Kuka voi lopettaa meidät kirjallisesti nämä kaksi viimeistä riviä? Kyllä. Anteeksi, mikä on nimesi? Lucy: Lucy. JASON HIRSCHHORN: Lucy. Lucy: FSulje src ja sitten fclose kohde. JASON HIRSCHHORN: FSulje, avoin paren, src, lähellä kantatuote, puolipiste. Ja fclose - joo? Lucy: Open suluissa, dst ja sitten puolipiste. JASON HIRSCHHORN: Great. Ja mitä minun pitäisi sisältyä lopussa? Lucy: Return 0. JASON HIRSCHHORN: Return 0. Täytyykö minun? Vain kysymys. Onko meillä sisällyttää return 0? USEITA Opiskelijat: Ei. JASON HIRSCHHORN: Ei. Tärkein tekee sen automaattisesti jos saat loppuun. Mutta mielestäni se on kiva sisällyttää se nimenomaisesti. Varsinkin kun olemme palaamassa muut asioita koko ohjelman ajan. OK. Tämä on mitä meiltä puuttuu - KUN mitä? Kuka voi ajatella noin - on jossain mielessä mitä asioita voisi mennä sinne? Vaikka se on vain joissakin pseudokoodina kuten kieli? Mitä me todella - mitä haluamme mennä saakka? Joo, Lucy. Lucy: tiedoston loppuun. JASON HIRSCHHORN: tiedoston loppuun. Niin mitä te tarkoitatte tiedoston loppuun? Lucy: Kun saavutat tiedoston loppuun, lopeta. JASON HIRSCHHORN: OK. Joten kun pääsemme tiedoston loppuun. Kuinka me tiedämme, milloin olemme saavuttaneet tiedoston loppuun? OPISKELIJAN 40: Luulen puskuri asetetaan NULL. OPISKELIJAN 41: Buffer julistetaan silmukan sisällä. JASON HIRSCHHORN: Luuletko puskuri asetetaan NULL. Miksi puskuri tyhjäämisen? OPISKELIJAN 40: Koska kun fread, yrität laittaa mitään puskuriin. JASON HIRSCHHORN: OK. Joten olet ajatellut fread - kun olemme lopussa tiedoston, mitä on fread aiot tehdä? Luulen, että kysymys meidän täytyy selvittää. Mitä fread tehdä? Se laittaa NULL puskurissa, tai se tehdä jotain muuta? Kuinka voimme selvittää, mitä se ei? OPISKELIJAN 42: Man. JASON HIRSCHHORN: Man. Joten katsotaanpa tänne. Return arvo. On menestys, fread ja fwrite palaa kappalemäärä lukea tai kirjoittaa. Tämä numero on sama kuin tavujen siirtää ainoastaan, jos koko on 1. Jos virhe tai loppuun tiedosto on saavutettu, paluuarvo on lyhyt osalaskumuodon tai 0. Joten meidän tarkoituksiin, jos fread saavuttaa tiedoston loppuun, ja lukee tiedoston loppuun, ei ole mitään jäljellä lukea, mitä se aio palata? OPISKELIJAN 43: Zero? JASON HIRSCHHORN: Mitä? OPISKELIJAN 43: Zero? JASON HIRSCHHORN: Zero. Se tulee palata nollaan. Joten tiedämme, että fread, kun olemme saavutti tiedoston loppuun, on menossa palata nollaan. Miten voimme käyttää sitä eduksemme? AVI: Voit ilmoittaa muuttujan ulkopuolella silmukan kutsutaan tarkistaa. Jos tarkastus vastaa - nyt - yksi. JASON HIRSCHHORN: OK. AVI: Ja sitten voit laittaa IF julkilausuman heti fread sanomalla, jos fread nolla - no. JASON HIRSCHHORN: Kuka voi auttaa Avi ulos? AVI: Mikä arvo palauttamat fread? JASON HIRSCHHORN: Me vain meni tuosta. AVI: Miten te edustatte sitä? JASON HIRSCHHORN: Niin se palaa - Katsotaanpa etsiä täällä - se palaa int, joka on olennaisesti kokonaisluku. Joten se palauttaa kokonaisluvun. Ja meidän tapauksessa se palata 1 tai 0 - 1 jos se lukea yksi asia - yhden tavun, ja 0, jos olemme lopussa. Joten jos fread - joo? OPISKELIJAN 45: Etkö voi vain laittaa täyden fread (puskuri, 1, 1, SRC) osaksi kun silmukka? JASON HIRSCHHORN: Eli ehdotat Näin otetaan siellä? [Interposing ÄÄNTÄ] JASON HIRSCHHORN: Pidä kiinni. Joten olemme kynsistä siitä. Eli olet ehdottaa laskemisesta fread osaksi siellä? Mitä meidän pitäisi myös siirtää jos haluat tehdä? OPISKELIJAN 45: puskuri ulkopuolella. JASON HIRSCHHORN: Meidän pitäisi myös siirtää tämän tänne. OPISKELIJAN 45: Mutta ei se jatkuvasti siirtää sitä eteenpäin? [Interposing ÄÄNTÄ] JASON HIRSCHHORN: OK. Joten tämä on mitä Okshar ehdotettu. Luomme puskuria. Me KUN fread, sitten me fwrite. Ajatuksia tästä? OPISKELIJAN 46: Ainoa kysymys on, olisi se todella suorittaa komennon fread? JASON HIRSCHHORN: Suuri kysymys. Kun olet laskemisesta funktiokutsuna sisällä kunnossa, tekee sen funktiokutsua suorittaa? Olemme nähneet esimerkkejä tästä ennen. Oikea? OPISKELIJAN 46: OK. Joo. Joten se ei suorita. JASON HIRSCHHORN: Olemme nähneet asioita tuollaisena, jossa meillä on toiminto soittaa sisällä kunnossa. Tarkoittaako tämä toiminto soittaa suorittaa? Kyllä. Joten vastaus on kyllä. Tämä toiminto soittaa tulee suorittaa. Mutta jälleen kerran, on se, mitä me haluamme? Mikä on yksi tapa, jolla voimme selvittää , jos se, mitä me haluamme? USEITA Opiskelijat: Run se? JASON HIRSCHHORN: Voisimme käyttää sitä. Mutta ennen kuin teemme sen, voisimme myös järkeillä tätä kautta. Jos - sanoa, että meidän on yhden tavun meidän tiedostoon, me saamme tänne, me saamme tämän koodin. Tämä ajaa. fread palaa yhden tavun ja säilytä se puskuriin. Ja tämä arvioi 1, oikeassa, kun hän palaa 1. Joten vaikka 1. Tarkoittaako se, että koodin sisällä while-silmukka tulee suorittaa? OPISKELIJAN 47: Joo. Se on totta. JASON HIRSCHHORN: Kyllä. 1 on totta. Se ei ole 0. Joten koodin sisällä täällä toteuttaa. Joten me kirjoittaa, että. Siirrämme takaisin tähän line jälleen. Nyt meillä on - Olemme lopussa meidän tiedoston. Luemme lopussa meidän tiedoston, koska meillä oli vain yksi tavu siihen. Fread palauttaa 0, varastoi jotain puskurissa. Rehellisesti sanottuna en tiedä mitä se tallentaa puskurissa. Voisimme ehkä etsiä nähdä, mitä se tekee. Että en todellakaan tiedä. Emme tiedä, kuka välittää mitä se tallentaa puskurissa? Mutta se palaa 0. Ja kun 0 toteuttaa? KUN 0 sitä ei voida suorittaa. Niin sitten jatkamme matkaa tänne. Joten päästä kättä, jos tämä on koodi meidän pitäisi ajaa, tai jos me pitäisi tehdä muutokset. Joten jos luulet - on äänestettävä. Jos luulet meidän pitäisi ajaa tätä koodia sellaisenaan, nostakaa käsi. OK. Siellä on yksi - sinulla on kysymys, huoli? Joo. OPISKELIJAN 48: Kun olemme siirtyneet puskuria ulkopuolella silmukka, me on malloc se? JASON HIRSCHHORN: Suuri kysymys. Kun olemme siirtyneet puskuri ulkopuolella silmukan, meidän pitää malloc se? Tämä on soveltamisala kysymykseen. Jos me alustaa puskuri ulkopuolella Tämän silmukan, se on olemassa lenkin sisältä? USEITA Opiskelijat: Kyllä. JASON HIRSCHHORN: Kyllä. Soveltamisalaan kuuluvat sisällä silmukan, ja todella, mitä alle sen sisälle Tämän koodin, mukaan lukien asioita sisällä täällä. Joten meidän ei tarvitse malloc sitä. Se on paikallinen muuttuja, ja sen soveltamisala sisältää edelleen silmukka. OPISKELIJAN 49: Tarvitsemmeko vapauttaa sitä? JASON HIRSCHHORN: Onko meillä täytyy vapaa puskuri? OPISKELIJAN 49: Joo, jos emme malloc. JASON HIRSCHHORN: Onko meillä täytyy vapaa puskuri? Meillä ei ole. Taas, se on paikallinen muuttuja, joten meidän ei tarvitse vapauttaa sitä. OK. Katsotaan, mitä tapahtuu. Joten se on alustamattomia. Se oli mitä jotain, Marcus ehdotti aiemmin. Meillä on siis, että virhe, muuttuva puskuri on Alustamattomia kun käytetään täällä. Miten voimme korjata tämän? OPISKELIJAN 50: malloc se? OPISKELIJAN 51: Yhtä NULL? OPISKELIJAN 52: Sano puskuri on yhtä kuin NULL. JASON HIRSCHHORN: OK. Näyttää hyvältä. Meillä on nyt. Luodaan jotain yritä kopioida. Joten meillä on tekstitiedosto. Miten voimme suorittaa tämän ohjelman? Joo. OPISKELIJAN 53: Voit tehdä piste slash cp, test.txt. Ja sitten voit nimetä toiseen tiedostoon jotka se tallentaa osaksi. JASON HIRSCHHORN: OK. Me kutsumme sitä out.txt. Cool? Seg vika. Ajatuksia seg vika? Tämä on suuri. Kuinka voimme selvittää, missä seg vika on? Mitä? OPISKELIJAN 54: Gdb. JASON HIRSCHHORN: Gdb. Otamme gdb kirjoittamalla gdb dot slash, nimi meidän ohjelman. Ei komentoriviargumentteja siellä. Aiomme perustaa katkeamispisteen tärkein. Jos haluan aloittaa gdb, mitä teen? OPISKELIJAN 55: R. JASON HIRSCHHORN: R. Ja mitä sitten? OPISKELIJAN 55: argumentteja? JASON HIRSCHHORN: Sitten komentorivin argumentteja. Katsotaanpa kulkea. N on vain vie minut rivi riviltä. Aion mennä kunnes Saan seg vika. Tuolla on seg vika. Se näyttää fread aiheuttanut minun seg vika. Tiedän fread aiheutti minun seg vika, koska se oli line me juuri suoritettua. Ja ainoa asia, joka oli tapahtuu, että linja - kaksi asiat tapahtuu. Fread oli menossa, ja sitten olimme tekee joitakin kun tarkkailun. Olen valmis lyömään vetoa, että KUN tarkkailun ei aiheuttaa minun seg vika. Todennäköisesti, fread oli aiheuttaa minun seg vika. Näen myös jotain, memcopy. Muisti kopio. Kuulostaa liikkuvat muisto yhdestä paikasta toiseen. Kuulostaa jotain että tapahtuisi vuonna fread, ehkä jonkin verran muistia siirtymässä täältä täältä. Mennään läpi tätä uudelleen. Miten voin aloittaa sen yli ja suorittaa sen uudelleen? Joo. OPISKELIJAN 56: Tarvitaanko laittaa et-merkki ennen puskuri? JASON HIRSCHHORN: Joten et-merkki ennen puskuri antaisi minulle osoitteen puskuri, joka on char *. Juostaan ​​läpi tämän vielä kerran. Miten luon läpi vielä kerran? OPISKELIJAN 57: Voitko vain kirjoita suoritetaan uudelleen? JASON HIRSCHHORN: Kirjoita vain juosta uudelleen. Joten emme aio toteuttaa tätä linjaa. Joten puskuri on nollaosoittimen. Korjaa? Se osoittaa - Katsotaanpa. Jos meillä on - piirtää nopeasti kuva tästä. Voivatko kaikki nähdä, jos Kirjoitan tänne? Niin pinon, meillä on paikallinen muuttuja ja sitä kutsutaan puskuria, ja se on osoitin char. Mikä osoite on tämän hiiltymän? OPISKELIJAN 58: 0x0. JASON HIRSCHHORN: Oikea. Sitähän tämä on. Täällä, sisällä puskuri on tallennettu 0x0. Sitähän meillä on - setup meillä on juuri nyt. Joten tämä linja, fread, laittaa jotain lähteestä missä? Tähän ruutuun tai tähän ruutuun? Mikä laatikko? Vasen laatikko tai oikealle laatikko? Tämä oikeus ruutuun. Tästä seuraa osoitin, ja laittaa sen tänne. Kun yritämme touch muistia Sijainti 0, mitä me saamme? Segmentointi vika. Se on virhe meillä on juuri nyt. Joo. OPISKELIJAN 59: Eikö sinulla ole laittaa tähti puskuri? Vai ei? For fread? JASON HIRSCHHORN: So fread vie osoitin. Joten se kulkee puskurissa. Ja niin se tulee de-viite någonstans fread. Mutta jälleen kerran, näimme, se vie osoitin. Meidän ei tarvitse välittää niitä tähti puskuria. Se olisi ohi se mitä on täällä. Ja se luultavasti antaa meille virheen Koska olemme de-löytymistä se. Oikea? Kun me de-viittaus tähän osoitin, kun yritämme pääsyn tähän paikkaan, Saamme virhe - meidän segmentointi vika. So - oho. Aiomme lopettaa pois GDB. Meidän linja - Meidän ongelma - on oikeassa täällä tällä linjalla. Ja se on ongelma, koska tämän linjan. Miten voimme luoda laatikko, joka on saatavilla fread. Oikea? Meidän on luotava laatikko, joka on yksi tavu suuri, koko char. Mutta me tarvitsemme laatikko saavutettavuuteen kun tämä toiminto suorittaa. Joten missä - joo. Onko ideoita? OPISKELIJAN 60: Just aseta se satunnaisia ​​luonnetta. Tehkää char puskuri tasavertaisina luonnetta. Ja sitten, kun olet puskuri siellä - JASON HIRSCHHORN: Odota. Char puskuri? Joten ei tähtiä? OPISKELIJAN 60: Joo. Ota tähti. Yhtä satunnainen luonne. JASON HIRSCHHORN: OK. Joten anna minulle yksi. OPISKELIJAN 60: Like tai jotain. Ja sitten kun olet puskuri siellä, käytät - OPISKELIJAN 61: Star? Voi ei, et-merkki. OPISKELIJAN 60: Käytä et-merkki. JASON HIRSCHHORN: OK. Entä vuonna fwrite? OPISKELIJAN 60: Käytä et-merkki uudelleen. JASON HIRSCHHORN: Selvä. Joten idea on, luomme nieriää ja laittaa jotain, ja sitten kirjoittaa, että merkkiä. OPISKELIJAN 60: Joo. JASON HIRSCHHORN: Mitä ihmiset ajattelevat? OPISKELIJAN 62: Se on sekava. JASON HIRSCHHORN: OK. Katsotaanpa vetää sen pois. Joten tällä kertaa, aion tehdä tämän punainen pinoon täällä, ja sitten me on - ooh! Anteeksi. Joten tällä kertaa meillä on jotain kutsutaan puskuri, ja se pinoon. Korjaa? Ja säästämme siinä, aluksi. Sitten meillä on kehotus fread. Mitä fread ei se vie tavun meidän ja sijoittaa sen jonnekin. Se laittaa sen missä tahansa asia on osoittaa. No, ennen kuin meillä oli tämä osoite - 0x0. Nyt mitä osoite meillä on? OPISKELIJAN 63: Whatever osoite puskuria. JASON HIRSCHHORN: Whatever osoite puskuria. Se on luultavasti olemaan jotain sellaista. Todennäköisesti aio aloittaa b ja f, ja sitten on kuusi muuta heksadesimaalilukua. Ei ole väliä. Jotkut osoite. Ja me ohimennen, että osoite sisään Ja aiomme laittaa meidän ainoa tavu asia kyseisessä osoitteessa. Joten aiomme laittaa meidän ainoa tavu juttu täällä sisällä. Ja sitten me aiomme kirjoittaa alkaen mitä ikinä täällä sisällä. Onko kellään mitään kysyttävää siitä? Joka ajattelee tämä koodi toimii? Käsi ylös, jos luulet Tämä koodi toimii. Sinun täytyy ottaa kantaa. Ja joka ajattelee tämä koodi ei toimi? Nosta kätesi. Kaikki muut pitäisi olla nostamalla kätensä. OK. Michael, jossa seisot? MICHAEL: En osaa päättää. Kind of keskellä. JASON HIRSCHHORN: Olet keskellä. Valitse yksi. MICHAEL: Otan usko ja sano se toimii. JASON HIRSCHHORN: OK. Sinulla on usko ja sanoa se toimii? Mitä tapahtui? [Interposing ÄÄNTÄ] JASON HIRSCHHORN: Ei seg vika. Kuinka voimme tarkistaa, onko kaksi asiaa ovat tasa-arvoisia? Kaksi tiedostoa ovat samat. OPISKELIJAN 64: Ero. JASON HIRSCHHORN: Ero. Ero tarkistaa erot kaksi tiedostoa, ja jos se palaa mitään, he ovat samanlaisia. Ja jos me avata, saamme tiedosto. Joten se oli oikea ratkaisu. Katsotaanpa muistella vielä kerran. Me itse asiassa ei edes täytyy alustaa sen. Olisi luultavasti näyttää vähän puhdistin, jos ei laita jotain random siellä. Kohta on, sinun piti luoda tilaa tallentaa jotain fread ja ottaa jotain pois fwrite. Ja että asia piti olla joko paikallinen muuttuja pinoon - sinua voinut malloc'd tilaa. Joten me oikeastaan ​​voisi olla kirjoitettu malloc täällä, ja että olisi toiminut. Ja sitten olisimme olleet tallentamiseen meidän asioita jonnekin kasaan. Mutta tämä on todella, todennäköisesti kaikkein tyylikäs ratkaisu. Vain luoda tilaa pinoon nämä asiat mennä. Minulla olisi kaksi muuta kommenttia. Jos ottaisi puolestaan ​​tässä, ja sitten saada pallon maaliin tämän, minun kommentit olisi seuraavanlainen. Nämä 1 on täällä, minulle, katso kuin taikaiskusta numeroita. Tämä 1, mitattuna fread, järkevää. Se on monia asioita lukea tai kirjoittaa. Mutta tämä yksi täällä pitäisi luultavasti jotain muuta. Joten mikä on yksi ratkaisu? OPISKELIJAN 65: Koko tavun. JASON HIRSCHHORN: Näinkö? OPISKELIJAN 65: Koko nieriää. JASON HIRSCHHORN: Koko nieriää. Joo, tavu ei ole tyyppiä. Joten koko char teoksia. Meillä voisi olla, yläreunassa meidän koodi, # määritelty, että. Nimeltään jotain BYTE ja se on todella char. Oikeastaan ​​vielä parempi lähestymistapa olisi ollut tätä - uint. Kukaan tiedä, mitä se on? Anteeksi. Minulla on sitä taaksepäin. Odota, ei. Mihin suuntaan se menee? Kukaan tiedä, mitä se on? Joo. OPISKELIJAN 67: tarkoitus auttaa yhtenäistää eri järjestelmistä asioita, jotka on - kuten unsigned kokonaislukuja että on 8 tavua? JASON HIRSCHHORN: Tuo Aivan oikein. Eri koneilla, koko char - ei yleensä merkkiä. Merkkiä ovat yleensä yhden tavun. Mutta koko muun datan tyypit ovat erikokoisia 32-bittinen kone vs. 64-bittinen kone. Uint8_t on aina 8 bittiä - aina yhden tavun. Ja minun täytyy sisällyttää että vakio int header-tiedosto. Joten nyt, tämä olisi todennäköisesti ollut Paras tapa kirjoittaa tämän koodin. Joten pääsen eroon taikanumeroita. Ja minulla on myös loogisempaa kirjoita puskurin. Kyse ei ole pelkästään nieriä, se on tavu, joka on mitä odotamme sen olevan. Ja tänne, olemme todella ollut hieman vankempi. Emme kutsuen sitä nieriä, joka - ehkä, kuka tietää - voisi olla erilainen koko eri koneilla. Olemme todella sanovat tämä on juuri yhden tavun, aina, ei väliä mitä. Ja jos katsomme täällä, teemme cp. Uh-oh. Mitä tapahtui? OPISKELIJAN 68: Voisi olla kytkettynä. JASON HIRSCHHORN: Mitä? OPISKELIJAN 69: Onko se? OPISKELIJAN 70: Et ole määrittelevät sen tyypin. OPISKELIJAN 71: Mutta se olisi määriteltävä standardin. OPISKELIJAN 72: Mitä on tekeillä? OPISKELIJAN 73: Pitäisikö määritellä olla isoilla kirjaimilla? JASON HIRSCHHORN: Joten se ei ole # define. Oikeastaan ​​tässä tapauksessa olen aio käyttää typedef. Koska käytämme sitä tyyppi yhdessä paikassa. Joten tässä tapauksessa, me todella haluamme typedef kuin olisimme tulostus uudenlainen tavu, ja se on pohjimmiltaan tämä. Se on vähän erilainen kuin # define. Ja nyt, meidän koodi toimii täydellisesti. Joten, jälleen, # define vie jotain, korvaa sitä kaikkialla kanssa toinen asia. Se on vain makro - pika päästä eroon taikanumeroita. Mutta tässä tapauksessa, koska olemme käyttää sitä tyyppiä - täällä - Jotta tämä toimisi, tarvitsemme to typedef mitä tavu on. Ja me määrittelemättä sitä täällä. Se ei ole struct, se on itse asiassa vain allekirjoittamaton kokonaisluku. Se on yhden tavun pituinen. Tämä koodi on käytettävissä verkossa, ja te kaikki pitäisi olla sitä juuri nyt. Joten meillä on - täydellinen - 13 minuuttia jäljellä mennä yli Harjoitus 5. Haluan kävellä läpi copy.c yhdessä, ja sitten me puhumme lyhyesti noin muut osat Ongelman asetettu. Joten anna minun vetää ylös copy.c. Ja cool juttu on, olemme todella jo kirjoittanut paljon tätä koodia. Koodi kirjoitimme kirjaimellisesti vain tuli ulos täältä, kun olin kirjoitan tätä itsekseni. Mutta tämä on copy.c, muodostaa perustan varten kaksi ensimmäistä osaa ongelma asetettu whodunit.c, joka sinun täytyy kirjoittaa, ja resize.c. Recover.c, joka on kolmas ja viimeinen osa ongelmaa asetettu, ei ole perustuu pois tämän tiedoston. Olet menossa tarvitse kirjoittaa tiedoston, annamme sinulle malli, joka tiedostoon, mutta sillä ei ole mitään tekemistä copy.c. Mutta koska copy.c on perusta kaksi ensimmäistä osaa, menemme kulkea sitä nyt, niin sinulla on hyvän tunteen, mitä se tekee. Ja kommentteja antaa joitakin sen pois. Olemme jo kirjoittanut joitakin tämän. Ensinnäkin olemme varmistaen saamme kolme väitettä. Seuraavaksi me muistaen tiedoston nimi. Joten me ohitetaan tämä vaihe, kun me koodattu meidän juttu - kun meidän cp. Mutta täällä, he tekeminen se hieman puhtaampaa. He Varmistamme Molemmat tiedostot ovat hyvä, lisäksi niiden avaamista. Kirjoitimme kaikki tämä koodi juuri nyt, joten olen aio paneutua tämän koodin. Seuraavaksi on joitakin juttuja, jotka on nimenomaan tiedostotyypit käytämme, joka ovat bittikarttatiedostoja. Bittikarttatiedostot on joitakin metatietoja niihin liittyviä. Joten pari ensimmäistä tavua kertoa tiedoston. Ne eivät ole värejä pikseli että kuva. He kertoa tiedoston. Ja jos luet ongelma asetettu, sinulla on paljon enemmän tietoa siitä, millaisia ​​metatietorakenteet mukana bittikarttoja. Mutta siksi meillä on tämä ensimmäinen joukko - tätä koodia täällä. Luemme metatiedot - kaksi kappaletta metatiedot - tiedosto header ja info otsikkoa. Ja olemme tarkkailun joitakin osia siitä varmista, että se on totta bittikarttatiedostoa ennen kuin jatkat. Ja vielä, nämä ovat vielä yksityiskohtia, ei tarvitse mennä nyt. Jos luet ongelma asetettu, ymmärrätte näitä. Pitkä tarina lyhyt, nämä ovat vain sanomalla, tämä on bittikarttatiedoston, ja vahvistetaan, että. Seuraavaksi olemme kirjoittamisen to pois tiedoston. Näemme, että täällä. Kirjoitamme ulos osoitin. Seuraavaksi olemme määritettäessä täyte. Joten jälleen, sillä on erityispiirre kanssa bittikarttatiedostoa, jotkut linjat ovat padding lopussa. Ja jos luet ongelma asetettu, opit lisää täyte. Tämä on kaava löytää täyte. Tärkeää muistaa - kun muutat kokoa bittikartan tiedosto, täyte muutokset. Kun muutat kokoa tiedosto, täyte muutokset. Se ei koskaan tule olemaan yli 3 - se tulee olla 0 kautta 3, osallistava. Mutta kun muutat kokoa jotain, täyte muutokset. Jos minulla on vain yksi pikseli tuolla rivillä, minä tarvitaan kolme tavua täyte, koska jokainen rivi on oltava neljän monikertoja tavua pitkä bittikarttatiedosto. Mutta jos minä tuplana, mennä yhdestä pikselin kahden pikselin, joista jokainen, sanokaamme, on tavu, silloin minun täytyy kaksi tavua padding tehdä että sama neljälle. Joten kun muutan kokoa jotain, Minun täytyy muuttaa määrää täyte minulla on. Onko järkeä kaikille? Seuraavaksi iteroidaan yli jokaisen rivin, tai kaikki rivit. Ja sitten me kerrata läpi jokaisen sarakkeen kunkin rivin. Olemme hoitoon tämän bittikartta kuten verkkoon, kuten olemme käsitelty aluksella 15. Kuten käsittelimme aluetta, kun me painettu ne näyttöön. Verkkoon rivejä ja sarakkeita. Sitten - näimme tämän. Me itse asiassa vain koodattu tätä. Loimme muutamia väliaikainen varastointi. Luemme siellä ja sitten kirjoitamme sen ulos. Tämä on juuri sitä, mitä me vain teimme. Seuraava, koska sanoin jokaisen rivin päättyy täytettä, me ohittaa että täyte - vanha täyte. Ja sitten lisäämme sen takaisin. Tässä tapauksessa olemme luomassa täsmälleen sama tiedosto. Me vain kopioimalla. Joten tämä linja on tavallaan typerä. Voisimme kirjaimellisesti vain laita täyte sisään Mutta jos muutat tiedoston kokoa, kaipaatte vielä tätä linjaa? Joten jos muutamme koko tiedoston, me silti halua ohittaa yli vanhan täyte? OPISKELIJAN 74: Kyllä. JASON HIRSCHHORN: Niin teemme. Koska tämä, jälleen, tarjouksia kanssa lähdetiedoston. Emme välitä pehmusteet lähdetiedostosta. Haluamme mennä seuraavalle riville. Mutta emme yksinkertaisesti laittaa takaisin vanha määrä täyte. Meidän täytyy laittaa takaisin uusi määrä täyte. Joten kun olemme muuttumassa koko tiedosto, haluamme kuitenkin ohittaa pehmuste vanhan tiedoston - mitä me luet sisään. Mutta mitä me kirjallisesti, olemme menossa tarvitse laittaa takaisin hieman eri määrä pehmuste, joka Olemme havainneet. Joo. OPISKELIJAN 75: Jotta näiden kahden linjat ei ole väliä, eikö? Koska olet käsittelyssä erilaisia ​​tiedostoja. JASON HIRSCHHORN: Aivan. Jotta nämä kaksi riviä ei ole väliä. Kirjoitamme tätä linjaa. Tämä on täällä tiedosto Kirjoitamme. Se on tärkeää, jotta saamme oikea määrä täyte. Tämä on käsitellä tiedoston. Haluamme hypätä suoraan pohjustuksen päälle. Emme halua lukea - jos luet tavu kerrallaan, me älä välitä niistä täyttötavut. Haluamme siirtyä seuraavalle riville. Lopuksi aivan kuten Lucy antoi meille, suljemme tiedostot ja palauttaa 0. Joten tämä on copy.c. Ja me itse asiassa kirjoitti - vietimme suurimman osan kohta kirjoitan tätä lähinnä. Te teitte tämän. Joten toivottavasti sinulla on hyvä tunne siitä, mitä täällä tapahtuu. Suuri ero, rehellisesti, on vain Tässä ensimmäisessä osassa, joka käsittelee erityispiirteet bittikarttatiedostoja. Joten minulla on kuin minun seuraavan dian, mitä meidän täytyy tehdä? No, ajattele dekkari. Ja joku, joka lukea läpi Harjoitus, mitä me täytyy tehdä dekkari? Yksinkertaisesti. Aleja. Aleja: Voitko ottaa osaa kunkin pikselin, joka tarkoittaa punaista. Ja sitten - sellainen? JASON HIRSCHHORN: OK. Joten ota pois osa kutakin pikselin, joka tarkoittaa punaista. Se on lähellä, mutta kaikki eivät sitä. OPISKELIJAN 76: No, on erilaisia ​​tapoja tehdä sitä. JASON HIRSCHHORN: OK. Anna minulle yksi tapa. OPISKELIJAN 76: Ota pois kaikki punaiset, ja Sitten korostavat sininen ja vihreä. JASON HIRSCHHORN: OK. Joten annetaan molemmat näistä tavoista - se kuulostaa annamme sille pikselin, se on punainen, sininen ja vihreä tasolla. Me haluamme muuttaa suhteelliset tasot punainen, sininen ja vihreä, riippuen siitä, että pikseli. Missä tämä koodi meidän pitäisi muuttaa suhteellinen punainen, sininen ja vihreä tasot tietyn pikselin. Sen jälkeen olemme lukeneet sitä - ennen kuin kirjoittaa sen? Anna minulle rivinumero. USEITA Opiskelijat: 83. JASON HIRSCHHORN: 83. Joten täällä. Sillä jännäri, koodi sinun täytyy kirjoittaa kaikkien pitäisi mennä tuolla. Ja se on ainoa koodi sinun täytyy kirjoittaa. Koska, kuten olemme kuulleet, kaikki mitä tarvitset tehdä, on muuttaa näitä suhteellista sininen, punainen ja vihreä tasoilla kunkin pikselin. Olet lukenut sen, ja nyt olet aikoo kirjoittaa sitä. Miten saan - jos minulla on tämä asia triple, täällä, ja se on kirjoita RGBTRIPLE - No, jos me katsoimme bmp.h, mikä on RGBTRIPLE? OPISKELIJAN 77: Se on struct. JASON HIRSCHHORN: RGBTRIPLE on struct. Näemme, että oikeus tänne. Joten jos halusin tutustua vaikkapa punainen taso struct, miten voin pääsyn punainen taso tämän struct? [LUOKKA sivuääniä] OPISKELIJAN 78: RGBTRIPLE.rgbtred? JASON HIRSCHHORN: Onko se oikein? OPISKELIJAN 79: On kolminkertainen dot, eikä RGBTRIPLE piste? JASON HIRSCHHORN: Triple. Triple on paikallinen muuttuja, joten täällä, ei ole viitteitä täällä. Joten me vain käyttää dot merkintä. Tämä antaa minulle tasolla punaista. Jos haluan vaihtaa sen, minä vain asettaa se equal jotain erilaista. Joten jälleen, tämä rivi koodia sisäänkäyntien tämä muuttuja sisälle struct, ja voimme asettaa sitä jotain uutta. Joten jännäri, jälleen kerran, tämä on, pohjimmiltaan, mitä meidän täytyy tehdä. Hyvin yksinkertainen. Vain muuttaa joitakin suhteellisia tasoja, ja tämä on silloin, että koodi menee. Kokoa, toisaalta, on vähän hankalampaa. Itse asiassa, Asua on luultavasti Vaikein osa tätä ongelmaa asetettu. Meillä on kolme minuuttia mennä sen yli. Mutta jälleen kerran, olemme jo kirjoitettu useimmat tämän koodin, joten pitäisi olla aika tuttu. Mitkä ovat asioita, haluamme tehdä kokoa, jos olet lukenut yli Harjoitus? Jos annat ne minulle, me voi puhua niistä. Mitkä ovat asioita, haluamme tehdä? OPISKELIJAN 80: pystysuunnassa - joten sinun täytyy vaakasuunnassa muuttaa sen kokoa, mutta pystysuunnassa muuttaa sen? JASON HIRSCHHORN: Joten jos meille annetaan pikseli, ja haluamme muuttaa sitä kertoimella kaksi, se nyt on kokoa vaakasuunnassa ja kokoa pystysuunnassa. Onko järkeä? Joo. Niin se on luultavasti Suurin haaste. Ja me puhumme, että sek. Joo. OPISKELIJAN 81: tapa ajattelin sitä on sinun piti tulostaa sen - JASON HIRSCHHORN: Odota. Älä kerro meille, mitä teit. Aiomme puhua logiikkaa. OPISKELIJAN 81: OK. Mikä oli kysymys? JASON HIRSCHHORN: Sinä vain nosti kätesi. Ei ollut kysymys. Haluan esittää se. Haluan vain keskustella asiasta lyhyesti. Joten olemme yksi pikseli, haluamme jäljitellä sitä, vaaka-ja pystysuunnassa. Joten mieluiten mitä teemme täällä on, me lue meidän pikselin, kirjoitamme sen kuitenkin monta kertaa. Mutta sitten meillä on temppu täällä, koska Sitten haluamme siirtyä seuraavalle riville ja kirjoita se alussa seuraavalle riville. Joten jos haluamme jäljitellä sekä vaaka-ja pystysuunnassa, mikä on yksi hyvä tapa tehdä se - yksi hyvä vaikka tehdä niin? Joten meidän ei tarvitse etsiä jatkuvasti ympärillä tiedosto sijoittaa asioita. Tämä kysymys ei ehkä ole oli järkeä, mutta mielestäni vastaus se auttaa. OPISKELIJAN 82: Luo array? JASON HIRSCHHORN: Joten ajatella Jokaisen tiedoston rivin. Ajatellaanpa kannalta riveihin. Jos meillä on ensimmäisen rivin meidän pieni kuvan, voimme tehdä, että rivi isoon rivin iso kuva, ja sitten jäljitellä rivin kuitenkin monta kertaa se on toistettu, sijaan menee pikseli kerrallaan, joka saa hämmentävää, kun käsittelevät tiedostoja. Koska jos meillä olisi - Olen loppumassa tila. Jos tämä on meidän tiedosto, ja meillä on, että yksi pikseli siellä, ja haluamme laittaa sen oikeassa, meillä on vielä joitakin asioita että tarve mennä sinne kun olemme kirjallisesti ja luoda uuden tiedoston - Meidän tiedosto, joka on kaksi kertaa niin suuri. Mutta se on todella vaikea tiedostojen toiminnot hypätä noin uusia linjoja niin, ja sitten takaisin tänne ja laittaa asioita siellä. On lähes mahdotonta tehdä jotain niin, jos se on järkevää. Jos siis ajatella riveihin, voimme otamme peräkkäin, ja sitten laittaa se - jäljitellä rivit pystysuunnassa. Ja se, miten suhtaudumme kokoa pystysuunnassa pikemminkin kuin vaakasuunnassa. Se oli aika nopea, ja hieman sekava. Valitettavasti aika on ohi. Minä seison ulkopuolella niille teistä täällä, joka on kysyttävää Harjoitus, myös takaisin. Joten lykätä nyt. Ja vielä, jos sinulla on kysyttävää, voimme keskustella ulkopuolella.