>> JASON Hirschhorn: Welcome, všetci, až 6. týždni.
Som rád, že vás všetkých vidieť živý a zdravý po Quiz 0, pretože viem, že
bol trochu hrubý.
Ale našťastie, vy všetci urobil neuveriteľne dobre.
A tak to je úžasné.
Ak ste v mojej časti, som k dispozícii väčšinu z vás späť už svoje kvízy.
>> Pár z vás, mám schôdzku po triede.
A ak ste študent a rozšírenie ste neobdržali kvíz späť
zatiaľ, vaša TF je asi na tom pracuje a triedenie, a dostane ju späť
pre vás v najbližšej dobe.
Takže moja rozšírenie študenti, ktorí sú sledovať práve teraz - dúfajme, že žije -
Budem mať vaše kvízy krátko tiež.
>> Náš program pre dnešok je nasledujúci.
Po prvé, budeme ísť cez niektoré zdroje, ktoré CS50 poskytuje na vás.
Chystáme sa ísť cez Quiz 0 ďalšie, a Budem zodpovie všetky otázky nikoho
má o konkrétnych problémoch.
A potom sme sa ísť cez súbor I / O a problém sada 5.
Tieto posledné dve témy bude trvať hore na veľkom oddielu dnes.
>> Každý týždeň dal som tento zoznam ako pripomienka k vám všetkým, ale jadro
časť, máme len 90 minút - sme nie sú schopní pokryť všetko, čo som
rád by som na pokrytie pre vás.
Ale máme veľa zdrojov pre môžete čerpať ako spoznať
materiál a práce prostredníctvom váš problém nastaví.
>> Pripomína, že mám on-line text box, nastaviť pre vás vyplniť, ak
žiadnu spätnú väzbu pre mňa, ako pozitívne, tak
konštruktívne, o úseku.
Že URL je tu umiestnená vpravo dole.
Takže, prosím, chvíľku, ak máte nejaké spätná väzba, či už v priebehu časti,
alebo po, alebo potom, čo sa budete pozerať na video, on-line, aby mi svoj názor.
Naozaj si toho vážim všetky z neho.
>> Tak som bol s malým konverzácie s množstvom mojich
Študenti po celom týždni - ako som ruku späť kvízy, hovorí o
Samozrejme, keď vidí, ako to robíte.
A jednu tému má prísť znovu a viac ako v roku hovorí o - v
najmä -
Problém sady.
A ja som zapuzdrené túto tému na palube práve teraz.
>> V podstate, tam je rozdiel medzi zapnutím do niečoho, čo je
správne a niečo urobiť , Ktorý je dobre.
Väčšina ľudí robia fantastické , Pokiaľ ide o správnosti -
5 alebo 4 je na všetkých psets.
Väčšina ľudí sa stále sú po celú dobu.
>> Avšak, práve preto, že ste urobili niečo právo neznamená, že ste
urobiť niečo tak elegantne, alebo efektívne, alebo čisto ako vy
mohol urobiť.
A to je to, čo dizajn -
a v menšej miere, štýl -
osi sú.
Tak som vás všetky tlačí, a ďalšie TFS tlačí vás ľudí, aby nielen poradí
vo veciach, ktoré sú v poriadku, ale obracajú vo veciach, ktoré sú kódované dobre.
>> Nerobím zbytočné PRE slučiek, Nie prepočte premenných ak je to
nemusíte sa.
Napríklad, pri pohľade späť do problému nastavenie 4, pri uvádzaní tehly na
obrazovka, každá rada - každá tehla v daný riadok má rovnakú y-ovú súradnicu -
koordinovať rovnakej výške.
>> Tak, že y-ová súradnice nepotreboval sa vypočíta v interiéri
vnorené FOR slučky, ktoré ste pravdepodobne použité aby tie tehly na obrazovke.
Chce to len sa musí vypočítať každý Doba prepnutia riadok, alebo
presťahovala o riadok nadol.
Takže povedať, či existuje 10 tehly v riadok, každá tehla môže mať rovnakú
y-ovú súradnicu, a že y-ová súradnica stačí vypočítať
raz pre všetky z nich.
>> Nie je potrebné, aby sa vypočíta 10 časy, ani sa, že výpočet je potrebné
sa stane v aktuálnej volanie funkcie -
Nová gracked volanie funkcie.
Takže ak to bolo trochu mätúce pre vy, viac všeobecne, veci, ktoré
Nemusíte sa stane zakaždým, prejsť FOR slučky by nemala byť
umiestniť vo vnútri slučky for, a nemali by stane zakaždým, keď idete
cez FOR slučky.
>> Ďalší dobrý dizajn príklad sme videli v týždni 3 pre 15, môžete udržať
dráha z nuly.
Takže pri inicializácii dosky, vás uložiť - v globálne premenné, snáď -
x a y-súradnicu nula.
A potom kedykoľvek -
v pohybe funkciu, keď urobíte úspešný krok, aktualizovať
Umiestnenie nuly.
>> To by ťa zachránil od nutnosti vykonať vnorené FOR slučky prezrieť
nastúpiť zakaždým v pohybe funkciu a nájsť nulu, alebo nájdite dlaždicu,
a potom skontrolovať, čo je vedľa nej.
Namiesto toho, máte umiestnenie nula, stačí sa pozrieť hore, dole,
a naľavo a napravo od neho, že si dlaždice ste hľadali.
>> Takže pokiaľ ide o programoch sme písanie, oni sú nikdy dosť veľký
že niektoré z týchto rozhodnutí dizajnu sú naozaj bude brániť vaše
programu, alebo aby to bežať pomalšie, alebo snáď dokonca k vyčerpaniu pamäte.
Ale my sme stále tlačí vás chlapci písať ako elegantný a
efektívna kód, ako je to možné.
>> Takže ak nechcete skončiť písať veci , Ktoré majú podstatne väčšiu
rozsah, budú písané s dobrým navrhnúť okrem toho, že správny.
Takže číslo máte priniesol, že von.
To je niečo, čo sme hľadali - niečo, čo budeme aj naďalej
tlačiť vás chlapci na.
>> Ak budete mať nejaké otázky týkajúce sa návrh programu, neváhajte
osloviť ma, a ja som rád, že prechádzať programu s vami,
a poukázať na niektoré z dizajnu rozhodnutie, ktoré ste vykonali, a dať vám niektoré
návrhy, ako urobiť ešte lepšie rozhodnutia designu.
>> Takže ideme ďalej hovoriť o Quiz 0.
Ako to urobíme, nemá niekto máte nejaké otázky o tom, čo
Zakryl som tak ďaleko?
>> [Šušťanie NOISE]
>> JASON Hirschhorn: Sedem sekúnd.
OK.
Poďme sa baviť o Quiz 0 na chvíľu.
Väčšina z vás má svoju kvíz 0 je späť.
Ak nie, snáď Pamätáte si to trochu.
Ale ak ste si vzal kvíz 0, potom majú tiež prístup k PDF on-line v
vzorové riešenia.
>> Má niekto nejaké otázky pred skočíme do materiálu na týždeň o
osobitný problém na kvíz 0 -
prečo odpoveď je to, čo to je?
Je niekto zmätený o niečom?
Dokonca aj keď máte problém pravdu, ale Len by som rád, aby som to vysvetlil trochu
viac, som rád, že tak urobiť teraz.
>> Tak som sa opýtal vás chlapci prísť pripravení s niektorými
myšlienky o Quiz 0.
Takže kto by chcel, aby nám dostať začal s otázkou alebo
komentár o Quiz 0?
>> [PAPER šušťanie]
>> JASON Hirschhorn: Nie každý urobil perfektne.
Takže viem [smiech]
tam musí byť niektoré otázky o Quiz 0.
OK.
Áno.
Ompica.
>> OMPICA: číslo 10.
>> JASON Hirschhorn: číslo 10.
Ktorý z nich bolo číslo 10?
>> OMPICA: -
>> JASON Hirschhorn: haven't I -
>> OMPICA: patrí -
>> JASON Hirschhorn: Číslo 10 bolo osem I - písanie osem na Aj?
>> OMPICA: Jo.
>> JASON Hirschhorn: OK.
Takže ďalšia otázka, ktorú môže mať spýtal sa mám predvídavý?
Odpoveď je áno.
V úseku pred kvíze, spýtal som sa vy na zakódovanie ako Sterling a
osem až i
Obaja z nich sa stalo sa objaví na kvíz.
Takže dúfajme, že ste zaplatili pozornosť na to.
>> A ak ste mali, potom by ste mali mať pravdepodobne dobre na tie dva.
Ale osem až i, my sme vlastne kód je v triede, ale bolo to opäť,
spýtal sa na kvíz.
Takže pár vecí, ktoré berú vedomia pri kódovaní osem až i
Prvá vec, na otázku, bolo že ste potrebovali zistiť, či reťazec
bol rovný null.
>> A pár ľudí sa snažila overiť neskôr v programe, ak je konzola som bol -
tak špecifický charakter v tom, že string - bol rovný null.
Ale pamätajte si, že null je v podstate - to je dobré myslieť na
null ako nulový ukazovateľ - ukazovateľ na nulu -
niekde v pamäti, kde môžete nikdy prístup.
>> Takže ak je niečo rovná null, môžete viem, že to nebola inicializovaná,
alebo tam nič nie je.
Tak to je char hviezda, S, s držiak aj je char.
Tak to dáva zmysel porovnávať s na hodnotu null, ale nie s držiak aj na hodnotu null.
Ale opäť - tak, aby bola prvá vec, že ste mali urobiť -
skontrolujte, či ste skutočne má skutočný reťazec.
>> Ďalej, čo ste chceli prejsť Každý znak v reťazci.
A tak by to bolo ako s držiakom i, napríklad, ak je aj vaša iterátor.
A vziať tú postavu, a získať jeho skutočnú hodnotu.
Môžete si ho uloží ako char, ale ASCII hodnota pre nulu -
nula ako znak -
v skutočnosti nie je celé číslo nula.
Je to iné číslo, ktoré môžete vyhľadať v tabuľke ASCII.
>> Takže jeden spôsob, ako korekciu, že - Asi najlepší spôsob, ako opraviť za
že - je odpočítať od nej hodnota znaku -
nulu ako znak.
Takže mínus jeden citát, nula, ďalší singel citát.
To bude trvať bez ohľadu na číslo, ktoré máte ako char, a dostať je rovná
číslo ako skutočné číslo.
>> A to je veľmi podobný prístupu Mnoho ľudí sa v
Problém sada 2, s Caesarom a Viginere -
tieto šifry, ak boli otáčania je.
Takže potom, čo ste ho ako číslo od nula až deväť, a potom - v závislosti na
kde to ide v konečné číslo - treba ju vynásobiť
o sile 10.
>> Niektorí ľudia sa sťahoval zo zadnej do predné a násobí jednotlivca
číslo o sile 10.
Niektorí ľudia sa sťahoval z spredu dozadu -
a tak sa najvyššie poradových čísel prvý -
a zachráni tých, globálna premenná counter.
A potom zakaždým cez FOR slučky, násobiť, že obrie globálne
proti premennú 10, aby priestor pre ďalšie char.
>> Takže to bolo trochu mätúce, bez toho, aby mi to písať na tabuľu.
Ale roztok vzorky je Vám k dispozícii.
Ale to boli veľké veci sme hľadali.
Tiež skontrolujte, uistite sa, že každý individuálny charakter bol skutočne
charakter od nuly do deväť, a nie niektoré ďalší znak, ako A,
napríklad.
>> To boli veci, ktoré sme hľadali v tejto otázke.
Znamená to, že odpoveď na vašu otázku?
>> OMPICA: Jo.
>> JASON Hirschhorn: OK.
Existujú nejaké ďalšie otázky o Quiz 0?
Čo kompiláciu?
Všetci zostavovanie pravdu?
Nie.
Tam bolo -
[Smiech]
Akékoľvek otázky týkajúce sa kompilácie proces?
Wow.
>> [PAPER šušťanie]
>> JASON Hirschhorn: Áno.
Michael.
>> MICHAEL: Je číslo 7 - náhodné?
>> JASON Hirschhorn: číslo 7.
Číslo 7 je získať náhodné celé číslo.
Výborný.
Takže ste dostali integer a číslo b, a chcete náhodné
celé číslo medzi a, b
Môžeme vlastne napísať tento jeden na doska, pretože toto
Bol jeden riadok kódu -
jeden spôsob, ako to urobiť.
>> Takže sme vzhľadom k drandí ako funkcie môžeme použiť.
A čo drandí -
za predpokladu, že to bol nasadený -
čo drandí vrátiť?
>> MICHAEL: float medzi 0,0 a 1,0.
>> JASON Hirschhorn: číslo - jo.
Číslo medzi 0 a 1..
A tak sme b a
A potom máme náhodné číslo medzi 0 a 1 ktorý nám bol daný drandí.
Niektorí ľudia sa snažili dať b, alebo b mínus , Alebo niečo v tých
zátvorky.
To by znamenalo, že sú argumenty k tejto funkcii.
>> drandí neberie žiadne argumenty - ako getString robí
Neužívajte žiadne argumenty.
Takže je to len otvorené zátvorka, v blízkosti paren - a to, že samo o sebe, je
volanie funkcie.
A to vám dáva číslo medzi 0 a 1..
Samozrejme, že máme celý rad že čísla môžu byť palcov
>> Povedzme, že ak b je 10, a je 5, naozaj Ak číslo s radom 5.
Takže ďalšia vec, ktorú musíme urobiť, je vynásobte to o rozsahu b mínus.
Takže za predpokladu, že sa násobí.
A že budeme mať celý rad v danom rozsahu.
A že konkrétny rozsah je Rozdiel medzi B mínus.
>> A konečne, že ho dám len od - hovoria, že rozsah medzi b mínus
je 5, že dám nám číslo od 0 do 5.
Avšak v prípade, že je v skutočnosti 5, je potrebné zvýšiť tento rozsah až tam, kde je to
vlastne má byť, tým, že pridá.
Tak, že dostane logický právo.
A potom, mali by ste mať ďalšia otázka?
>> MICHAEL: Nie
Cítim sa teraz naozaj hlúpy.
[Smiech]
>> JASON Hirschhorn: Nie
Nemajte pocit, že naozaj hlúpy.
Počet ľudí, ktorí bojovali s touto otázkou.
A potom, ďalšou otázkou je, drandí, ste povedal, vám dáva plavák -
vráti plavák.
Ale táto funkcia skutočne požiadal na číslo, ktoré majú byť vrátené.
>> Nemusíte obsadiť toto výslovne na celé číslo, pretože tieto
Operácia bude zaobchádzať ako všetko float - ako číslo s plávajúcou čiarkou.
Rovnako ako tento vôľu - aj keď to je celé číslo, bude
sa násobí správne.
Všetky násobenie bude fungovať.
Nemusíte ju obsadil tu.
V skutočnosti, nemali by ste ho obsadil.
>> To by -
ak by totiž vrhol číslo že je medzi 0 a 1 -
náhodné číslo, plávajúcou desatinnou čiarkou -
potom to bude buď iba 0 alebo 1, tak stratíte všetky uvedené presnosti.
Ale na konci, keď sa vrátite, automaticky sa dostane
poslal staré ako celé číslo.
Takže nemusíte robiť že obsadenie sami.
>> Tak toto bola odpoveď na že otázka, číslo 7.
Akékoľvek ďalšie otázky týkajúce sa Quiz 0?
Jo, Annie.
>> ANNIE: Keď budeme používať rekurzívny -
kedy používame iteračné slučky?
>> JASON Hirschhorn: Ak používate rekurzívne - tak všeobecnejšie,
klady a zápory rekurzia proti iteratívny prístup.
Môže niekto ponúknuť Pro alebo kon?
Prosím?
Nemožno nikoho.
Kto môže ponúknuť Pro alebo kon?
>> [PAPER šušťanie]
>> STUDENT 1: Rekurzívny je menej kódovanie - menej písať?
>> JASON Hirschhorn: Takže všeobecne, rekurzia najmä funkcie -
alebo algoritmus ako zlúčenie druh -, ktoré sa hodia
na rekurzívne prístup -
môže byť priamejšie na kód rekurzívne.
A práve väčší zmysel na to rekurzívne.
Tak to by bolo pre rekurziu.
Ostatné?
Jo?
>> Študent 2: Con rekurziu -
To používa viac pamäte.
>> JASON Hirschhorn: Tak presne to pravé.
Rekurzívne funkcie bude držať pridanie zásobník rámy na zásobníku.
Takže ak ste pracujúci na mnohých čísla, a musí sa volať to
fungovať veľa, potom ste iste zaberajú viac pamäte, zatiaľ čo
iteratívny prístup iba dať jednu stack frame na zásobníku, pretože
to všetko sa deje v rámci jednej funkcie.
>> Akékoľvek iné výhody a nevýhody?
Jo.
>> STUDENT 3: Pros na rekurzia.
Nemusíte určiť, dopredu koľkokrát
kód musela opakovať.
Tie môžu mať vopred stanovený počet časy, ktoré máte k iterácii, potom
rekurzia je lepšia, pretože to znamená, že výsledok.
>> JASON Hirschhorn: Myslím, že je to pravda.
Ale myslím, že v oboch prípadoch by ste nikdy -
by ste pravdepodobne získať niektoré vstup od užívateľa.
Alebo táto funkcia bude mať nejaký vstup že by sa zistiť, koľkokrát je
by mal bežať.
Takže všeobecne, by si ani tvrdú kódu - dokonca v iteratívny prístup - ako
mnohokrát, že slučka by mal byť spustený.
>> Vedeli ste, že si iný premýšľať o tom, Annie?
OK.
Takže to sú asi dva -
najväčšie pre a najväčšie kon na rekurzívne proti
iteratívny prístup.
OK.
Na Quiz 0 Ešte niečo?
>> Poďme ďalej.
File Aj / O. Tam je nádherný krátky Tento týždeň na súbor I / O, ktoré snáď
ste sledovali násobok krát, a obdivoval.
Veľa práce išla do toho, a ja som počul, že to je šialene užitočné.
Ja tiež odkaz na túto snímku, V prípade, že ste nemal
možnosť sledovať to 10 krát.
>> Takže sa budeme stručne prebrať významné kroky na otvorenie a prácu
sa súbory, a potom budeme ponoriť sa do problému kódovania pred
skúmanie problému sadu.
Takže znova, idem dať to hore na obrazovke, ale ja budem hovoriť za
len minútu na to, čo sme tu sa súborom I/O--
Čo to znamená?
>> To znamená, že môžeme vytvárať naše programy, a potom sa naše programy
exit, a nie robili žiadny vplyv na svet mimo nášho programu.
Ale keď sme začali pracovať so súbormi - ako ich čítať v a vytváranie
je - môžeme mať nejaký vplyv na svet mimo nášho programu.
>> Rovnako ako v prípade Microsoft Word nebol schopný aby všetky dokumenty programu Word, kliknite na
Raz Microsoft Word prestať, všetky svoje Práca bude preč, a to by
naozaj k ničomu.
My nakoniec chceme, aby bolo možné písať programy, ktoré môžu mať vplyv na
svet okolo nich, a to ako tým, že v komplexné vstupy - z hľadiska súborov a
pomocou súborov, a tiež vytvára zaujímavé a presvedčivé výstupy -
, Pokiaľ ide o rôzne typy súborov.
>> Takže to je dôvod, prečo sme sa začína naučiť sa pracovať so súbormi.
Konkrétnejšie, čo čo robíme, je takto.
Je to veľmi jednoduché.
Existuje len pár krokov, a sú tu uvedené o tomto kódexe.
Takže ideme prejsť Tento kód riadok po riadku.
>> Po prvé, môžete vidieť zdôraznil -
keď pracujete so súborom, bez ohľadu na typ súboru je to,
musíte ju otvoriť.
A to je s výzvou na fopen -
tu.
Tie zahŕňajú názov súboru.
Ak súbor nie je v adresári, alebo priečinok, kde tento program
život, potom je tiež nutné zahrnúť Cesta na miesto, kde tento súbor je.
>> Budeme predpokladať, že tento súbor s názvom "text.txt" -
jednoduchý textový dokument - je rovnakej zložke ako tohto programu je.
Takže to je ďalšia vec, ktorú by ste mali mať na myseľ - že ak chcete otvoriť súbor
niekde inde, čo skutočne potrebujete aby zahŕňala jeho umiestnenie.
>> Po druhé, môžete odovzdať argument fopen, a to je to, čo chcete robiť,
so súborom.
Existujú tri hlavné argumenty, že budete odovzdať fopen.
Kto mi môže dať tie tri?
Kto mi môže dať jeden z nich?
Áno.
>> STUDENT 4: názov súboru?
>> JASON Hirschhorn: Ospravedlňujem sa.
Tri hlavné argumenty môžete prejdú ako druhý argument fopen.
Máš pravdu - názov súboru je prvý argument.
Ale druhý argument fopen sú všeobecne tri reťazca, a - áno.
Aleja.
>> Aleja: pre append.
>> JASON Hirschhorn:, ak chcete pridať do súboru, ktorý už existuje.
>> STUDENT 5: R pre čítanie.
>> JASON Hirschhorn: R, ak chcete čítať zo súboru.
>> STUDENT 6: W pre zápis.
>> JASON Hirschhorn: A w, ak sa chcete napísať do súboru.
Takže v tomto prípade budeme písať do súboru, takže máme w.
Otvorte ho, musíte tiež uložiť súbor niekde, a to s
Kód na ľavej strane Operátor priradenia -
Ja som vytvoriť ukazovateľ do súboru volal, v tomto prípade, súbor.
>> Nebudeme sa báť toho, čo to všetky čiapky FILE to je.
Postačí, keď poviem, že je to dlhý prúd núl a jednotiek.
A to je to, ako sa budeme pracovať a pochopiť ju.
>> Ďalšia vec, ktorú musíme urobiť - a To je nesmierne dôležité -
pri každom otvorení súboru -
V skutočnosti, keď budete volať malloc, pre príklad, a trochu pamäti a skúste
a uložte ho na ukazovateľ, vždy chcete skontrolovať, aby sa ubezpečil, že
funkcie nevrátil null.
>> Takže v tomto prípade, sme kontrolu, aby sa Uistite sa, že sme vlastne otvorili
súbor správne, a tam bol v našom programe žiadna chyba.
Ďalej, akonáhle sme sa kontrolovať, aby sa ubezpečil, že máme pracovný súbor, môžeme
písať, alebo čítať z, alebo pripojiť k súboru.
V tomto prípade, som jednoducho tlače jeden riadok do tohto súboru.
>> Ako mám vedieť, že?
No, ja som s použitím tejto funkcie volal fprintf.
Všetky funkcie, ktoré budete používať pri písaní, alebo čítanie, alebo
práca so súbormi bude podobný funkcie, ktoré ste nevideli, ale
začínajú písmenom F, stojí na súbore.
A fprintf, na rozdiel od nášho bežného tlače app, trvá jeden ďalší argument,
a to je súbor, v ktorom ste ktorý chcete vytlačiť tento riadok.
>> Nemám nič právo Ohai.
Nemám na tretinu argument printf -
alebo druhý argument printf, Tretí argument fprintf, pretože som
nemajú žiadne zástupné symboly tu.
Nejsem vrátane všetkých premenných.
Ale opäť, fprintf a všetky z týchto súborov funkcie, ktoré pracujú so súbormi
sú zvyčajne bude potrebovať súbor na ktorom sú v prevádzke.
>> A konečne posledná dôležitá vec urobiť, je zavrieť súbor, rovnako ako
s - keď sme malloc niečo, chceme oslobodiť niečo, lesť my
majú pretečeniu pamäte - chceme zavrieť našu súbor.
Ak tento program vystúpil bez zapínania súbor, je pravdepodobné, nič by ísť
zle, najmä ak sa Bol malý súbor.
>> Ale je to určite dobrá kódovanie štýl a praxe vždy zavrite súbor
Až budete hotoví používať.
Takže to je základy súboru Aj / O. Pravdepodobne ste už videli, že pred, alebo
Sledoval ju v tejto fantastickej skratu.
Má niekto nejaké otázky, pred ideme do nejakej praxe kódovania
problémy, o súboru I / O alebo kroky som prešiel?
>> [Písanie SOUNDS]
>> JASON Hirschhorn: Myslíte si, mám otázku, Avi?
>> AVI: Nie
>> JASON Hirschhorn: OK.
Budem čakať ďalšie sedem sekúnd.
[Smiech]
To je naozaj dobrý tip.
Vy proste nepáči klásť otázky.
To je v poriadku.
OK.
Takže náš problém prvé prax je, že sme bude duplikovať funkciu
nástroj príkazového riadka, ktorý pravdepodobne použiť pred - kópia -
Nástroj kópie.
Ak zadáte cp a potom ju preniesť dva Argumenty do terminálu, môžete
skopírujte súbor.
A to je to, čo sa deje písať teraz.
>> Takže znovu, odčítanie z tohto snímku, by som môžete napísať program, ktorý trvá
dve a iba dve príkazového riadku argumenty -
zdrojový súbor a cieľový súbor -
a skopíruje obsah zdroja súbor do cieľového súboru
jeden bajt naraz.
Tak to je veľa požiadať.
>> Opäť platí, že dobrý spôsob, ako to je ísť rovno do C kódu, ale
rozdeliť do niekoľkých krokov.
Po prvé, premýšľať o logike - presne na čo sa pýtam vás robiť -
a pochopiť všetky kroky k tomuto problému.
Nie je v C, len v niektorých pseudokódu, alebo dokonca duševné model
čo sa deje.
>> Ďalej, až budete mať pseudokódu dole, prísť na to, ako v pseudokódu
mapy na náradie a vecí, ktoré sme naučili používať v C.
>> A nakoniec, až budete mať všetko, čo spoločne, môžete kódovať problém.
Trvať 5 až 10 minút práce na tento problém.
Dám inštrukcie späť do sekundy.
A potom sme ísť cez pseudokódu, a kód
to žiť ako skupina.
>> Ak máte nejaké otázky, keď ste pracuje na tom, neváhajte zvýšiť
tvoja ruka, a ja prišiel okolo a odpovedať na ne.
>> STUDENT 7: Môžem prejdite kus papiera?
>> JASON Hirschhorn: Čo sa deje?
>> [Písanie SOUNDS]
>> JASON Hirschhorn: OK.
Poďme sa nad pseudokódu prvý, a potom Dám vám pár viac
minút na dokončenie kódovanie.
>> Kto by chcel, aby mi začať s prvom riadku
pseudokódu pre túto funkciu?
>> STUDENT 8: Skontrolujte, či ste dostali dva súbory.
>> JASON Hirschhorn: OK.
A ak nie sme?
>> STUDENT 8: Chcel by som sa vrátiť 0..
>> JASON Hirschhorn: Mali by sme sa vrátiť 0?
>> STUDENT 8: Návrat -
zaslepenie.
Prepáčte.
>> JASON Hirschhorn: Jo.
Pravdepodobne nie 0.
Vzhľadom k tomu, 0 znamená, že všetko, čo bolo dobré.
OK.
Takže to je prvý riadok z pseudokódu.
Kto má druhý riadok pseudokódu?
>> STUDENT 9: Open obidva súbory?
>> JASON Hirschhorn: Otvorte oba súbory.
OK?
>> STUDENT 10: Pozrite sa, v prípade, že súbor je NULL?
>> JASON Hirschhorn: Skontrolujte, , Že ani nie sú NULL.
Ako stranou -
lomítko 0 -
je NULL?
>> STUDENT 11: Nie.
>> JASON Hirschhorn: To nie je NULL.
Tomu sa hovorí NULL zakončenie.
Je to vlastne píše iba s jedným litrov.
Takže kontrola niečo proti tomu - to je vlastne postava -
tak niečo proti kontrole, ktorá je nie je to isté ako kontrola, či je
rovná NULL.
>> A niektorí ľudia -
na ich kvízy a ich problémy súpravy - dostali
dve z nich zamieňať.
Ale dvaja z nich sú v skutočnosti iného.
Jeden končí reťazec -
jeden je ukazovateľ na 0.
>> STUDENT 12: Prečo by ste skontrolovať, Uistite sa, že súbory nie sú NULL
pred otvorením?
>> JASON Hirschhorn: Tak otvorené šetrí niečo, čo v tomto súbore.
A ak pôjdete tu -
takže tento riadok - fopen -
vám adresu a obchod že adresa v súbore, či to funguje.
Ak to nefunguje, je to bude ukladať NULL -
>> STUDENT 12: Oh.
OK.
Mám ťa.
>> JASON Hirschhorn: V súbore.
Takže nemôžete skontrolovať NULL predtým, než ste ich otvoril.
NULL znamená, že niečo nie pracovať správne.
OK.
Takže skontrolujte, či ani jest?
Alebo sú?
Čo si myslíme?
Pôjdeme s tým.
>> STUDENT 13: Je.
>> JASON Hirschhorn: Je?
Ani je?
>> STUDENT 13: Je.
>> JASON Hirschhorn: OK.
Zdá sa, že sa niektoré zhoda na tom.
Ani je NULL.
OK, ďalší riadok pseudokódu.
Kto mi nedal ešte čiaru?
Budeme na teba čakať.
Jo.
>> STUDENT 14: Musíš čítať od prvého súboru?
>> JASON Hirschhorn: OK.
>> STUDENT 14: Alebo môžeme použiť fscanf alebo niečo ako, že prvý súbor?
>> JASON Hirschhorn: Takže chceme čítať od prvého súboru a -
nechajme to tu.
Čítanie zo zdrojového súboru.
A potom, čo budeme robiť, keď sme čítať zo zdrojového súboru?
Niekto iný?
>> STUDENT 15: Napíšte do cieľový súbor?
>> JASON Hirschhorn: Píšeme cieľový súbor, a -
OK.
Čo ešte nám chýba?
Niekto, kto mi nedal riadok kódu ešte - v pseudokódu.
Jo.
>> STUDENT 16: Možno, že sa môžete vždy skontrolovať či je tu niečo na čítanie pre,
ako ďalší riadok?
To je rovnako ako ďalší riadok, uvidíme, či to existuje.
>> [ELECTRONIC BEEP]
>> JASON Hirschhorn: Oops.
To je môj denníka softvér.
Jo?
>> STUDENT 16: Jo.
>> JASON Hirschhorn: Tak mi mi to ešte raz.
>> STUDENT 16: Skontrolujte, či je ešte ďalší riadok z
zdrojový súbor čítať.
>> JASON Hirschhorn: OK.
Takže nie sme čítanie riadkov - boli tu čítania bajtov -
ale máte pravdu.
Chceme, čítať a písať, kým nie sú žiadne ďalšie bajtov.
OK.
A tak by mali byť naozaj členité bit, pretože sú pod ním.
Je to tak?
Kým sme z bytov, budeme čítať zo zdrojového súboru a zapisovať
do cieľového súboru.
>> A potom, čo je posledný rad pseudokódu?
Niekto, kto nie je uvedený ma ešte niečo.
>> STUDENT 17: Zatvorte súbory?
>> JASON Hirschhorn: Presne tak.
Zatvorte súbory.
Takže je tu náš pseudokódu.
Chystám sa dať pseudokódu do gedit, a za pár minút sme
bude kód dohromady.
>> OK.
Poďme začať ako skupina.
Nishant, mám nový súbor.
Práve som otvoril to.
Untitled Document 1.
Čo je prvá vec, ktorú by som mal urobiť?
>> Nishant: Zahrnúť knižnice?
>> JASON Hirschhorn: OK.
Aké knižnice?
>> Nishant: stdio.h, stdlib.h, verím, že?
>> JASON Hirschhorn: OK.
Čo je stdlib pre?
>> Nishant: Zabudol som.
>> JASON Hirschhorn: OK.
Tak sú štádiách.
Čo by som mal urobiť ešte predtým, než Začnem kódovanie?
>> Nishant: Napíšte hlavičky?
>> JASON Hirschhorn: Ako môžem si to farebné?
>> [Vložením VOICES]
>> Nishant: Ako sa vám to farebné?
>> JASON Hirschhorn: Ako si farbu som kódovanie?
>> Nishant: Ja neviem.
Oh.
Uložiť.
>> JASON Hirschhorn: Save.
Áno.
Mal som ju uložiť ako. C..
Tak ju uložiť na plochu ako cp.c.
Sladké.
A keď chcem získať plný štýl body, čo by som mal
sú na vrchole?
>> Nishant: Dalo by sa napísať svoje meno, názov programu, a účel
programu rovnako?
>> JASON Hirschhorn: Vyzerá to dobre.
Výborný.
Takže ste sa k nám nastupuje dokonale.
# Include -
budeme tiež písať -
OK.
Takže myslím, že som všetko, aby mohli vyraziť.
Kto má prvý riadok kódu pre mňa - alebo prvé riadky kódu, ktoré
to bude trvať uspokojiť naše prvé komentár v pseudokódu?
Vy.
>> STUDENT 18: Mala by to byť int argc, a potom char * argv?
>> JASON Hirschhorn: Myslím, že máš pravdu.
Zmeňme to int main, otvorené zátvorka, int argc, čiarka, char * argv?
Rovnako ako, že?
>> STUDENT 18: Zátvorky.
>> JASON Hirschhorn: konzoly.
Otvorte držiak, pravá zátvorka, zavrieť rodič.
Perfect.
Teraz môžem vziať argumenty príkazového riadku.
OK.
Uistite sa, my sme vzhľadom dva súbory.
Môžete mi dať, že rovnako.
>> STUDENT 18: Ak argc -
Tento človek nemusí rovnať 3.
>> JASON Hirschhorn: Ak je otvorené zátvorka argc nie je rovné 3?
>> STUDENT 18: Jo, vrátite 1 alebo tak niečo.
>> JASON Hirschhorn: Ospravedlňujem sa.
>> STUDENT 18: Návrat 1 alebo tak niečo.
>> JASON Hirschhorn: return 1.
OK?
Skvelé.
Otvorte oba súbory.
Kto mi môže pomôcť otvoriť oba súbory?
Kto mi nedal kód ešte?
Kurt?
>> KURT: Takže všetky čiapky F-I-L-E hviezdy zdroj.
>> JASON Hirschhorn: Idem aby sa na samohlásky.
Tí, ktorí sú v pohode.
Je to ako Tumblr.
>> STUDENT 18: Rovná fopen -
>> JASON Hirschhorn: Rovná fopen?
>> STUDENT 18: Otvorené zátvorka, argv, otvorený držiak.
>> JASON Hirschhorn: Počkajte.
Prepáčte.
Otvoriť zátvorka.
OK.
>> STUDENT 18: Jo.
Argv sub 1.
>> JASON Hirschhorn: Sub 1?
>> STUDENT 18: Jo.
Argv otvorený držiak 1 -
Áno.
A potom sa čiarka, a potom otvorte dvojitým citácie, r, úvodzovky,
zatvoriť zátvorka, bodkočiarka.
>> JASON Hirschhorn: Sladký.
A čo tá druhá?
>> STUDENT 18: Veľmi podobná, ale namiesto toho S-R-C, mali by ste hovoriť D-S-T.
>> JASON Hirschhorn: Oo!
To sa mi páči.
>> STUDENT 18: Just D-S-T. Jo.
A potom argv, otvorený držiak, 2.
Jo.
A potom w namiesto r.
Jo.
>> JASON Hirschhorn: Skvelé.
Ďalší pár riadkov.
Tiež, ak niekto má čo pridať do linky, ktoré sme urobili, neváhajte
pridať tie, ktoré sú tiež.
Skontrolujte, či žiadny z nich nie je NULL.
Kto mi môže dať kód, ktorý som potrebné uspokojenie, že rad pseudokódu?
Archer.
>> ARCHER: Ak src rovná rovná NULL alebo dst rovná rovná
NULL, potom sa vrátiť -
>> JASON Hirschhorn: Čo?
>> ARCHER: Vráťte 2?
>> JASON Hirschhorn: Vráťte 2.
Takže ak je otvorené zátvorka src rovná rovná NULL, alebo -
čo to thing 's - potrubie?
Pipe?
Nazveme ho potrubia.
Potrubia, rúrky, dst rovná rovná NULL, vráti 2.
OK?
Kým sme z bytov -
sme sa nejako preskočil tomto kroku pseudokódu časť, ktorá bude tu.
>> Ale kým sme z bytov - Čo to robí zvuk ako?
Aký typ konštrukcie C -
ale ja ho nepoužívam štruktúru slovo, pretože budeme chcete začať používať
že v ostatných prípadoch -
ale nástroj C Znie to ako?
>> STUDENT 19: slučka.
>> JASON Hirschhorn: slučka.
Znie to ako slučka.
Takže, kto mi môže dať prvý riadok zo slučky kódu tu?
Môžete si tiež vybrať, aký druh slučka chceš, keď mi dáš
Tento riadok kódu.
Existujú tri druhy.
Môžete si vybrať.
Navrhoval by som jednu z nich.
Avi.
Ktorý z nich chceš?
>> AVI: PRO.
>> JASON Hirschhorn: PRO.
>> AVI: int i rovná nule.
>> JASON Hirschhorn: OK.
>> AVI: Táto časť si nie som istý.
Ale aj menšia než veľkosť z hviezdy zdroja?
Nie som si istý.
>> JASON Hirschhorn: OK.
>> AVI: Vzhľadom k tomu, že chcete veľkosť súboru, nie?
>> JASON Hirschhorn: Takže to asi nebude nám veľkosť skutočnej
súboru v bajtoch.
Takže čo iného sme mohli robiť?
Čo je iný typ slučky?
Alebo by sme mali držať FOR slučky?
>> STUDENT 20: Mohol by si urobiť WHILE slučky?
A potom, čo by ste urobiť, je Bol by ste -
pretože máme char * pre súbor.
Takže ak budeme len držať zvyšovanie že až by sme nájsť NULL znak na
Koniec to?
Alebo nie, je to, že nie je ako súbory prácu?
>> JASON Hirschhorn: Takže môžeme udržať zvyšovanie char *
kým nenájdeme NULL -
>> STUDENT 20: v podstate ďalej znak po znaku, kým sme narazili
koniec súboru.
>> JASON Hirschhorn: Áno.
Takže to je to, čo chceme robiť.
Chceme, aby sa čítanie, znak znakom, kým sa nedostaneme do
koniec súboru.
>> STUDENT 20: Jo.
Nájsť -
čo je koniec, alebo stopka na konci textového súboru.
>> JASON Hirschhorn: OK.
Takže, keď sa dostaneme na koniec súboru - Ako vieme, že sme dosiahli
koniec súboru?
Ak volám -
tak sa poďme krok späť.
Čo je to funkcia?
Poďme sa na tomto riadku tady.
Čítanie zo zdrojového súboru.
Kto mi môže dať, že riadok kódu?
>> STUDENT 21: fscanf?
>> JASON Hirschhorn: fscanf.
OK.
Čo keď chcem čítať, veľmi konkrétne, jeden byte?
>> STUDENT 21: Ja neviem.
>> JASON Hirschhorn: OK.
Ešte jednoduchšie než fscanf - to, čo je -
Chcem čítať zo zdrojového súboru?
Čítanie zo zdrojového súboru.
Čo je to funkcia - jo.
>> STUDENT 22: Je to fread?
>> JASON Hirschhorn: fread.
Myslím si, poďme zostať u že jeden teraz.
Aký druh argumentov sa fread vziať?
>> STUDENT 22: Pravdepodobne typ súboru, a potom umiestnenie v súbore?
>> JASON Hirschhorn: Čo môžem písať tu prísť na to, aký typ argumentov
fread trvá?
>> VIAC ŠTUDENTI: Man fread.
>> JASON Hirschhorn: Muž fread a fwrite.
Vyzerá to, že vyvesíme spoločne.
Tak fread sa, ako veľa argumentov?
>> STUDENT 23: Štyri.
>> JASON Hirschhorn: Trvá štyri argumenty.
Trvá to ukazovateľ, veľkosť, a že vec, ktorá je divné, a niektoré súbor.
OK?
Poďme si o tom prečítať tu.
"Funkcia fread číta n memb prvky dát, každá veľkosť bajtov
dlhý, z potoka, na ktorý ukazuje prenášať, ukladať ich na mieste
daný ukazovateľ. "
>> Tak štyri argumenty.
Prečo som len kopírovať to, a vložte ho tu.
OK.
Takže, kto môže začať vyplňovaní Tieto argumenty pre mňa?
Avi.
>> AVI: Vyberte prázdnotu.
Dajte len src.
Vyberte ukazovateľ a hviezdu.
Dajte src.
Potom -
>> JASON Hirschhorn: Tak ja idem k zastaveniu tam, pretože to je nesprávne.
Máš pravdu s src, ale kde by src ísť?
>> [Vložením VOICES]
>> JASON Hirschhorn: Malo by ísť sem.
To je src - naša src je typ.
Poďme sa pozrieť tu.
To sa pýta na typ FILE *, sme v skutočnosti zvyčajne vidieť takto.
Tak to je žiadať o tvrdenie Typ súboru * zvaný prúd, ktorý je src.
OK?
>> Aká veľkosť veci robiť chceme čítať?
Vám to dal som popis problému.
>> STUDENT 24: Jeden bajt naraz.
>> JASON Hirschhorn: Jeden bajt.
Aký veľký je byte?
Jeho veľkosť je v bytoch, tak čo môžem dať tam?
>> STUDENT 25: One.
>> JASON Hirschhorn: One.
Správne.
Jeho veľkosť je v jednotke byte, takže 1 je 1 byte.
Koľko si chcem prečítať naraz.
>> STUDENT 26: One?
>> JASON Hirschhorn: Jedna vec.
Chcem čítať jednu vec veľkosti 1, jedno uhryznutie naraz.
A kam mám dať, keď som čítal, že?
>> STUDENT 27: Cieľ?
>> JASON Hirschhorn: Takže nemôžem dať to rovno do cieľa.
>> STUDENT 28: Budeš put sa do tretej ukazovateľ?
>> STUDENT 27: K určeniu.
>> JASON Hirschhorn: OK.
Jo.
>> STUDENT 29: Môžete deklarovať niečo slúžiť ako dočasné úložisko skôr.
>> JASON Hirschhorn: OK.
Daj mi to.
>> STUDENT 29: Ďalší súbor ukazovateľ, možná?
>> JASON Hirschhorn: OK.
Tak toto je neplatná hviezda -
je to typ void hviezda, takže to nie je musí byť ukazovateľ súboru.
A keď som čítal jeden bajt, kde by bolo dobré miesto
uložiť jeden bajt?
>> STUDENT 29: array?
>> JASON Hirschhorn: array.
OK.
A čo je ešte niečo, čo je iba veľkosť jeden byte?
>> STUDENT 30: char *?
>> STUDENT 29: Jo.
>> JASON Hirschhorn: char * nie je jeden bajt.
>> STUDENT 29: char.
>> JASON Hirschhorn: char je jeden byte.
Je to tak?
Takže hovorme tejto vyrovnávacej pamäte je všeobecný meno používa pre tieto veci pre ukladanie
niečo dočasne.
Tak som sa vytvoriť vyrovnávacia pamäť.
Je to tak?
Ale to trvať void *.
Možno máte pravdu, že je to by mala byť vyrovnávacia pamäť o veľkosti 0.
Tak to ukladá jeden -
pravdu.
>> Pretože to tu - char vyrovnávacia pamäť je charakter, ale
to trvá void * -
ukazovateľ.
Takže som mohol urobiť, a teraz vyrovnávacia pamäť je ukazovateľ.
Čo iné som mohla robiť?
>> STUDENT 31: Dajte si hviezda vedľa char.
>> JASON Hirschhorn: Mohol by som Vytvorili je char *.
OK.
Čo je ďalšia vec, ktorú som mohol urobiť?
Alebo poďme s týmto.
Char * buffer, takže to, čo môžem dať sem v?
>> STUDENT 31: Buffer.
>> JASON Hirschhorn: Buffer.
Buffer je ukazovateľ na char.
A v tomto mieste, dávame jeden byte z niečoho, čo som čítal.
Jo.
Avi.
>> AVI: Len rýchla otázka.
Chcete malloc vyrovnávacia pamäť?
>> JASON Hirschhorn: Kto môže odpoveď na túto otázku?
>> STUDENT 32: No, to nie je naozaj prejdite na čokoľvek práve teraz, takže -
>> JASON Hirschhorn: Ale robiť Chceme, aby to malloc?
>> STUDENT 32: Ak sa na to, že spôsobom, myslím, že jo, pretože by ste museli
nejaké miesto na to, aby ukazoval na.
>> JASON Hirschhorn: Máme musieť malloc?
>> STUDENT 33: Ak sa chystáte na použitie mimo slučku.
>> JASON Hirschhorn: Budeme používať mimo slučky?
>> STUDENT 34: Áno.
>> STUDENT 35: Počkajte.
Chceme, aby vyhlásiť ju v slučke na onen svet?
>> JASON Hirschhorn: Tak myslím, že máme niektorí pseudo WHILE slučky tu, že sme
sa snaží prísť na to, že sme sa dostali do ešte.
Nepotrebujeme, aby to malloc.
Sme pracujúci v hlavnom, je to len ide , Ktoré majú byť použité v tejto slučky.
Nie je potrebné, aby existovali mimo to.
>> Takže to môže byť lokálna premenná.
Máte ukazovateľ na lokálna premenná.
>> STUDENT 36: Ale to nie je smerujúce k ničomu.
>> JASON Hirschhorn: Nie, to nie je inicializované na čokoľvek.
Ale my nebudeme používať tiež.
Chystáme sa dať niečo do je to prvýkrát, čo sme ju používať.
Tak to vyzerá v poriadku.
Takže nepotrebujeme tú malloc.
A ja si myslím, že je to v poriadku, ako je.
OK.
Máme fread linku.
Poďme urobiť ďalší riadok.
>> Ak chceme zapisovať do súboru, čo je dobrú funkciu použiť k tomu, že?
>> STUDENT 37: fwrite?
>> STUDENT 38: fprintf?
>> JASON Hirschhorn: fprintf je jeden.
Čo je ďalší?
>> STUDENT 39: fwrite.
>> JASON Hirschhorn: fwrite.
A pre naše účely, fwrite, ktoré sme tu videli, je
pravdepodobne lepšou voľbou.
To trvá štyri argumenty rovnako.
Nishant, môžete dať me argumenty?
>> Nishant: Prvý z nich sa deje byť len vyrovnávacej pamäti.
>> JASON Hirschhorn: OK.
>> Nishant: druhý je len bude 1.
Tretí to bude 1.
A štvrtá bude dst.
>> JASON Hirschhorn: Má niekto akékoľvek otázky týkajúce sa tohto riadku?
To vyzerá dobre.
OK.
Takže teraz to vyzerá, že na jednu vec, že ​​sme chýba - vlastne, poďme napísať
tento posledný riadok.
Zatvorte súbory.
Kto nám môže skončiť písanie Tieto dva posledné riadky?
Áno.
Je nám ľúto, Ako sa voláte?
>> LUCY: Lucy.
>> JASON Hirschhorn: Lucy.
>> LUCY: fclose src a potom fclose cieľ.
>> JASON Hirschhorn: fclose, otvorené zátvorka, src, zatvoriť zátvorka, bodkočiarka.
A fclose -
jo?
>> LUCY: Open zátvorky, dst a potom bodkočiarkou.
>> JASON Hirschhorn: Skvelé.
A čo by som mal obsahovať na konci?
>> LUCY: Návrat 0.
>> JASON Hirschhorn: Návrat 0.
Musím?
Len otázka.
Ešte musíme zahrnúť výnos 0?
>> VIAC ŠTUDENTI: Nie
>> JASON Hirschhorn: Nie
Hlavné automaticky robí ak sa dostanete do konca.
Ale myslím, že to je pekné sú explicitne.
Zvlášť, keď sa vraciate iné veci v celom programe.
OK.
To je to, čo nám chýba -
PRI čo?
Kto môže myslieť na niektoré z nich -
má nejaký zmysel, čo všetko mohol ísť tam?
Aj keď je to len v niektorých pseudokódu ako jazyka?
>> Čo sme vlastne - čo chceme ísť do?
Jo, Lucy.
>> LUCY: koniec súboru.
>> JASON Hirschhorn: koniec súboru.
Tak čo myslíš tým koniec súboru?
>> LUCY: Akonáhle sa dostanete koniec súboru, zastaviť.
>> JASON Hirschhorn: OK.
Takže akonáhle sa dostanete na koniec súboru.
Ako vieme, že keď sme dosiahli koniec súboru?
>> STUDENT 40: Myslím, že vyrovnávacia pamäť bude nastavená na hodnotu NULL.
>> STUDENT 41: Buffer je deklarovaná vnútri slučky.
>> JASON Hirschhorn: Takže si myslíte, že vyrovnávacej pamäte bude nastavená na hodnotu NULL.
Prečo by vyrovnávacej pamäte je nastavená na NULL?
>> STUDENT 40: Vzhľadom k tomu, keď ste fread, snažíte sa dať
nič do vyrovnávacej pamäti.
>> JASON Hirschhorn: OK.
Takže si myslíš fread -
keď sme došli na koniec súbor, čo je fread robiť?
Myslím, že je to otázka musíme zistiť.
Čo fread robiť?
Znamená to dať NULL do vyrovnávacej pamäte, alebo to robí niečo iné?
Ako môžeme zistiť, čo je to?
>> STUDENT 42: Man.
>> JASON Hirschhorn: Man.
Takže poďme sa pozrieť sem.
Návratová hodnota.
Na úspechu, fread a fwrite vrátiť Počet položiek čítať alebo zapisovať.
Toto číslo sa rovná počtu bajtov prevedené iba vtedy, keď veľkosť je 1.
Ak sa vyskytne chyba, alebo koniec je dosiahnuté súbor, návratová hodnota je
krátka počet položku alebo 0.
>> Takže pre naše účely, ak fread dosiahne koniec súboru, a číta
koniec súboru, tam je nič čítať, čo to ide vrátiť?
>> STUDENT 43: Zero?
>> JASON Hirschhorn: Čo?
>> STUDENT 43: Zero?
>> JASON Hirschhorn: Zero.
Bude to vráti nulu.
Takže vieme, že fread, keď sme došli na koniec súboru, bude
vrátiť sa na nulu.
Ako môžeme využiť k svojmu prospechu?
>> AVI: Môžete deklarovať premennú mimo slučky zvané kontrola.
Ak kontrola rovná -
teraz - jeden.
>> JASON Hirschhorn: OK.
>> AVI: A potom si môžete dať IF výkaz ihneď po fread hovorí, ak
fread sa rovná nule -
no.
>> JASON Hirschhorn: Kto môže pomôcť Avi von?
>> AVI: Čo je to hodnota vrátené fread?
>> JASON Hirschhorn: Jednoducho sme šiel cez to.
>> AVI: Ako si to predstavuje?
>> JASON Hirschhorn: Tak to sa vracia - poďme pozrite sa sem - vracia
size_t, čo je v podstate celé číslo.
Tak to vráti celé číslo.
A v našom prípade to bude návrat 1 alebo 0 -
1. ak to čítať jednu vec - jeden bajt, a 0, ak sme došli na koniec.
Takže ak fread -
jo?
>> STUDENT 45: Nemôžete jednoducho dať plný fread (buffer, 1, 1, src) do
while?
>> JASON Hirschhorn: Takže navrhujete Tým sa tam?
>> [Vložením VOICES]
>> JASON Hirschhorn: Vydrž.
Takže sme zbaviť toho.
Takže navrhnúť uvedenie fread do tam?
Čo by sme mali tiež pohybovať ak chcete robiť, že?
>> STUDENT 45: vyrovnávací vonku.
>> JASON Hirschhorn: Mali by sme tiež presunúť to tu.
>> STUDENT 45: Ale robí, že stále posunúť dopredu?
>> [Vložením VOICES]
>> JASON Hirschhorn: OK.
Tak toto je to, čo navrhol Okshar.
Vytvárame našu vyrovnávacej pamäti.
My WHILE fread, potom sme fwrite.
Myšlienky na to?
>> STUDENT 46: Moja jediná otázka je, by to vlastne spustiť príkaz fread?
>> JASON Hirschhorn: Veľká otázka.
Keď budete dávať volanie funkcie vnútri stave, robí
volanie funkcie vykonávať?
Už sme videli príklady tohto.
Je to tak?
>> STUDENT 46: OK.
Jo.
Takže to robí spustiť.
>> JASON Hirschhorn: Videli sme veci ako to predtým, kedy máme
volanie funkcie vnútri podmienky.
Znamená to, že volanie funkcie vykonávať?
Áno.
Takže odpoveď je áno.
Toto volanie funkcie bude vykonávať.
Ale opäť, je to, čo chceme?
>> Čo je jeden spôsob, ako by sme mohli prísť , Či je to to, čo chceme?
>> VIAC ŠTUDENTI: Spustite ju?
>> JASON Hirschhorn: Môžeme to spustiť.
Ale skôr, než to urobíme, mohli by sme aj rozum z toho.
Ak -
že máme jeden bajt v našej súbor, dostaneme sa sem,
dostaneme sa k tomuto kódu.
Tým sa spustí.
fread vráti jeden bajt a uložiť ich do pamäte.
A to vyhodnotí na 1, hneď potom, čo sa vráti jedna.
>> Takže zatiaľ čo 1.
Znamená to, že kód vnútri WHILE slučky bude vykonávať?
>> STUDENT 47: Jo.
To je pravda.
>> JASON Hirschhorn: Áno.
1. je pravda.
Nie je to 0.
Takže kód vnútri tu bude vykonávať.
Takže budeme písať, že.
Budeme sa vrátiť k tomu linka znova.
Teraz máme -
sme na konci nášho súboru.
Čítame z konca nášho súboru, pretože sme mali len jeden byte v ňom.
>> Fread vracia 0, obchody niečo v pufri.
Úprimne povedané, neviem, čo ukladá do vyrovnávacej pamäte.
Mohli by sme vyhľadať aby videli, čo to robí.
To ja naozaj neviem.
Nevieme, koho to zaujíma, čo ukladá do vyrovnávacej pamäte?
Ale to vráti 0.
A bude Kým 0 spustiť?
>> PRI 0 sa nevykoná.
Takže sa budeme pohybovať sem.
Takže poďme sa zdvihnutím ruky, ak to je kód by sme mali spustiť, alebo ak sa
by mal urobiť ako prvé zmeny.
Takže ak si myslíte, že - budete musieť voliť.
Ak si myslíte, že by sme mali spustiť tento kód tak, ako je, prosím, zdvihnite ruku.
>> OK.
Je tu ešte jedna -
máte dotaz, obavy?
Jo.
>> STUDENT 48: Potom, čo sme sa presunúť vyrovnávacej pamäti mimo slučky, my
musieť malloc?
>> JASON Hirschhorn: Veľká otázka.
Potom, čo sme sa presunúť bufferu mimo slučky, musíme to malloc?
To je rozsah otázka.
Ak budeme inicializovať vyrovnávacia mimo tejto slučky, bude existovať
vnútri slučky?
>> VIAC ŠTUDENTI: Áno.
>> JASON Hirschhorn: Áno.
Jeho pôsobnosť sa vzťahuje na vnútri slučky, a, naozaj, niečo nižšie je vnútri
tohto kódexu, vrátane veci vnútri tu.
Takže nepotrebujeme ju malloc.
Je to lokálne premenné, a jej rozsah stále obsahuje slučky.
>> STUDENT 49: Potrebujeme ho oslobodiť?
>> JASON Hirschhorn: Máme treba voľnej pamäte?
>> STUDENT 49: Jo, keď to neurobíme malloc.
>> JASON Hirschhorn: Máme treba voľnej pamäte?
My nie.
Opäť platí, že sa jedná o lokálnu premennú, takže sa nie je potrebné ju uvoľniť.
OK.
Pozrime sa, čo sa stane.
Tak to je inicializovaná.
To bolo to, čo niečo, Marcus navrhnuté skôr.
Takže sme si, že chyby, variabilný vyrovnávacej pamäti je inicializovaná pri tu použitý.
>> Ako môžeme tento problém vyriešiť?
>> STUDENT 50: malloc to?
>> STUDENT 51: rovná NULL?
>> STUDENT 52: Povedzme, že vyrovnávacie rovná NULL.
>> JASON Hirschhorn: OK.
Vyzerá to dobre.
Máme to teraz.
Poďme vytvoriť niečo vyskúšať kopírovanie.
Takže máme textový súbor.
Ako môžeme spustiť tento program?
Jo.
>> STUDENT 53: Môžete to urobiť bodku lomítko cp, test.txt.
A potom môžete pomenovať ďalší súbor ktoré sa bude ukladať.
>> JASON Hirschhorn: OK.
Nazveme ju out.txt.
V pohode?
Seg chyba.
Myšlienky na poruchy seg?
To je skvelé.
Ako môžeme zistiť, kde chyba seg je?
Čo je?
>> STUDENT 54: GDB.
>> JASON Hirschhorn: GDB.
Prevádzkujeme gdb písomne ​​gdb bodka lomítko, Názov nášho programu.
Žiadne argumenty príkazového riadku tam.
Budeme nastaviť zarážku na hlavnej.
Ak chcem spustiť gdb, čo mám robiť?
>> STUDENT 55: R.
>> JASON Hirschhorn: R. A čo potom?
>> STUDENT 55: Argumenty?
>> JASON Hirschhorn: A argumenty príkazového riadku.
Poďme sa prejsť.
N sa mi práve pri riadok po riadku.
Chystám sa ísť až do Mám moja chyba seg.
Tu je moja chyba seg.
Vyzerá to, že fread spôsobené moja chyba seg.
Viem, že fread spôsobila moja chyba seg, , Pretože to bol
linka sa práve spustený.
>> A jediná vec, ktorá bola deje v tomto riadku -
dve veci diali.
Fread sa deje, a potom sme boli robiť nejaké kontroly WHILE.
Som ochotný sa staviť, že WHILE kontrola nebola príčinou moja chyba seg.
S najväčšou pravdepodobnosťou, fread bol spôsobuje moja chyba seg.
Tiež vidím niečo, čo tu, memcopy.
>> Kópia pamäti.
Znie to ako pohybujúce sa pamäť od jedno miesto na ďalšie.
Znie to ako niečo, čo by sa stalo v fread, možno niektoré pamäti
pohybujúce sa odtiaľto sem.
Poďme si prejsť to znova.
Ako mám začať, že cez a spustite ho znova?
Jo.
>> STUDENT 56: Myslíte si, je potrebné, aby ampersand pred vyrovnávacej pamäti?
>> JASON Hirschhorn: Tak ampersand pred vyrovnávacej pamäti by mi dať adresu
vyrovnávacia pamäť, ktorá je char *.
Poďme si prejsť týmto ešte raz.
Ako môžem spustiť cez to ešte raz?
>> STUDENT 57: Môže si len typ spustiť znova?
>> JASON Hirschhorn: Stačí zadať znova spustiť.
Takže my nebudeme vykonať tento riadok.
Takže pufor je ukazovateľ NULL.
Opravte?
To ukazuje na - pozrime sa.
Ak máme naše -
nakresliť rýchlo vyfotiť.
Každý môže vidieť, ak Píšem tu?
>> Takže v zásobníku, máme miestnej variabilný a je to tzv vyrovnávacej pamäti, a
Je to ukazovateľ na char.
Čo adresa je tento znak v?
>> STUDENT 58: 0x0.
>> JASON Hirschhorn: Správne.
To je to, čo to je.
Tu, v pufri, je uložený 0x0.
To je to, čo máme - setup máme teraz.
Takže tento riadok, fread, dá niečo od zdroja, kde?
Do tohto poľa, alebo tento box?
Ktorý box?
Ľavé okno alebo pravé okno?
Toto právo box.
>> Z toho vyplýva, ukazovateľ, a vloží ho sem.
Keď sa budeme snažiť a dotyk pamäte na polohy 0, čo dostaneme?
Segmentation fault.
To je chyba teraz máme.
Jo.
>> STUDENT 59: Ešte nemáte dať hviezdy vyrovnávacia pamäť?
Alebo nie?
Pre fread?
>> JASON Hirschhorn: Tak fread má ukazovateľ.
Takže to prejde v pufri.
A potom to bude de-referencie že niekde vnútri fread.
Ale opäť, videli sme, že sa ukazovateľ.
Nepotrebujeme ju odovzdať hviezdy vyrovnávacej pamäti.
To by bolo okolo to, čo je tu.
A to by asi nám chybu preto, že sme de-odkazovanie.
>> Je to tak?
Keď sme sa de-referencie tohto ukazovateľa, ak snažíme sa o prístup k tomuto umiestneniu,
dostávame chybu - naša chyba segmentácia.
Takže -
Oops.
Chystáme sa odísť z gdb.
Naša linka -
náš problém - má pravdu tu na tejto linke.
A to je problém, pretože z tejto línie.
>> Ako môžeme vytvoriť pole, ktoré je k dispozícii vo fread.
Je to tak?
Musíme vytvoriť pole, ktoré je jedným byte veľké, veľkosť char.
Ale my potrebujeme, že box bude prístupný ak táto funkcia vykonáva.
Takže tam, kde -
jo.
Nejaké nápady?
>> STUDENT 60: Stačí len nastaviť ako akýkoľvek náhodný charakter.
Len to char buffera sa rovná charakter.
A potom, keď ste pufra tam -
>> JASON Hirschhorn: Počkajte.
Char vyrovnávacia pamäť?
Takže žiadna hviezda?
>> STUDENT 60: Jo.
Vyberte hviezdu.
Rovná náhodný charakter.
>> JASON Hirschhorn: OK.
Tak mi daj jeden.
>> STUDENT 60: Like, alebo tak niečo.
A potom, keď máte vyrovnávacej pamäti tam, môžete použiť -
>> STUDENT 61: hviezda?
Ale nie, ampersand.
>> STUDENT 60: Používajte ampersand.
>> JASON Hirschhorn: OK.
A čo v fwrite?
>> STUDENT 60: Používajte ampersand znova.
>> JASON Hirschhorn: Dobre.
Takže vaša predstava je, že sme sa vytvoriť znak a dať niečo v ňom, a potom
napísať k tomuto char.
>> STUDENT 60: Jo.
>> JASON Hirschhorn: Čo si ľudia myslia?
>> STUDENT 62: Je to spletitý.
>> JASON Hirschhorn: OK.
Poďme vytiahnite ju.
Takže tentoraz budem kresliť to v červená na zásobníku tu, a potom sme
bude mať -
ooh!
Prepáčte.
Takže tentoraz máme niečo, čo nazýva vyrovnávacej pamäti, a to je na stacku.
Opravte?
A my uloženie v ňom je, spočiatku.
>> Potom máme výzvu na fread.
Čo fread to je, že trvá byte z náš súbor a dá to niekde.
Kladie to v akomkoľvek čo to ukazuje.
No, predtým, než sme mali túto adresu -
0x0.
A teraz, čo Adresa máme?
>> STUDENT 63: niečo Adresa vyrovnávacej pamäte je.
>> JASON Hirschhorn: niečo Adresa vyrovnávacej pamäte je.
Je to asi bude niečo také.
Pravdepodobne začnú s b a f, a potom ďalších šesť
hexadecimálnych číslic.
Nezáleží na tom.
Niektoré adresu.
A my sme okolo tejto adresy palcov
>> A ideme dať náš jeden byte, čo na tejto adrese.
Takže ideme dať náš jeden byte, čo tu vo vnútri.
A potom budeme písať z čo je vôbec tu vnútri.
Má niekto nejaké otázky, o tom?
Kto si myslí, že tento kód bude fungovať?
>> Zdvihnite ruku, ak si myslíte, Tento kód bude fungovať.
Musíte zaujať stanovisko.
A kto si myslí, že tento kód nebude fungovať?
Zdvihnite ruku.
Všetci ostatní by mali byť zdvihnutím ruky.
OK.
Michael, kde stojíte?
>> MICHAEL: Nemôžem sa rozhodnúť.
Druh v stredu.
>> JASON Hirschhorn: Vy ste v stredu.
Vyberte si jednu.
>> MICHAEL: Ja budem mať vieru a hovoria, že to bude fungovať.
>> JASON Hirschhorn: OK.
Budete mať vieru, a hovoria, že to funguje?
Čo sa stalo?
>> [Vložením VOICES]
>> JASON Hirschhorn: Žiadna chyba seg.
Ako môžeme skontrolovať, či dve veci sú rovnaké?
Dva súbory sú rovnaké.
>> STUDENT 64: Diff.
>> JASON Hirschhorn: Diff.
Rozdiel kontroly na rozdiely medzi dva súbory, a ak sa vráti
nič, sú totožné.
A keď sme sa otvoriť, dostaneme našu súbor.
Tak, že je správne riešenie.
Pozrime sa na to ešte raz.
My vlastne ani nemal je treba ju inicializovať.
>> Bolo by asi vyzerať trochu čistejšie, ak ste si ho nedali
niečo náhodne tam.
Bod je, čo ste potrebovali vytvoriť nejaký priestor pre uloženie niečo z
fread a vziať niečo z fwrite.
A to, čo musel byť buď miestne premennej na zásobníku - máte
Mohol som malloc'd nejaký priestor.
>> Takže sme vlastne mohli mať napísal malloc tu, a
že by to fungovalo.
A potom by sme boli skladovanie naše veci niekde na halde.
Ale to je v skutočnosti, pravdepodobne, najelegantnejšie riešenie.
Stačí vytvoriť nejaký priestor na zásobníku pre tieto veci ísť.
>> Chcel by som mať dve ďalšie pripomienky.
Ak by ste mali vziať obrat v tomto, a potom sa dal na to, moje poznámky
by takto.
Tieto 1 je tu, so mnou, pozrite sa ako magických čísel.
Toto 1, pokiaľ ide o fread, dáva zmysel.
To je počet vecí čítať alebo písať.
>> Ale toto tu by asi niečo iné.
Takže to, čo je riešenie?
>> STUDENT 65: Veľkosť bytu.
>> JASON Hirschhorn: Ako, že?
>> STUDENT 65: Veľkosť char.
>> JASON Hirschhorn: Veľkosť char.
Jo, byte nie je typ.
Takže veľkosť char prác.
Mohli by sme sa, v hornej časti náš kód, # definovaná tak, že.
Volal niečo BYTE a je to naozaj char.
Vlastne, ešte lepší prístup mohlo byť toto -
uint.
Vie niekto, čo to je?
>> Prepáčte.
Mám ju dozadu.
Počkajte, no.
Kadiaľ to ide?
Vie niekto, čo to je?
Jo.
>> STUDENT 67: má pomôcť zjednotiť cez systémy veci, ktoré
majú - rovnako ako celé čísla bez znamienka ktoré majú 8 bajtov?
>> JASON Hirschhorn: To je Presne tak.
Na rôznych strojoch, veľkosť char -
zvyčajne char.
Znaky sú zvyčajne jeden bajt.
Ale veľkosť iných dátových typov sú rôzne veľkosti na 32-bitovom počítači
verzus 64-bitové stroje.
Uint8_t je vždy 8 bitov -
vždy jeden bajt.
>> A ja potrebujem, aby zahŕňal štandardný súbor int hlavičky.
Takže teraz, to by boli pravdepodobne Najlepší spôsob, ako napísať tento kód.
Tak som sa zbaviť magických čísel.
A mám tiež logickejšie typ buffera.
To nie je len char, to je byte, čo je to, čo očakávame, že bude.
>> A tu, máme vlastne Bol trochu robustnejšie.
Nie sme volať to char, ktorý -
Možno, kto vie - môže byť odlišný veľkosť na rôznych strojoch.
Sme vlastne, že toto je presne to, jeden bajt, vždy, bez ohľadu na to, čo.
A ak sa pozrieme tu, robíme cp.
Uh-oh.
Čo sa stalo?
>> STUDENT 68: To by mohlo byť zapnutý.
>> JASON Hirschhorn: Čo?
>> STUDENT 69: Je to tak?
>> STUDENT 70: To snáď nie definovať ako typ.
>> STUDENT 71: Ale to by byť definované v norme.
>> STUDENT 72: Čo sa deje?
>> STUDENT 73: Mala by definovať byť všetky kryty?
>> JASON Hirschhorn: Takže to nie je # define.
V skutočnosti, v tomto prípade, som bude používať typedef.
Pretože sme ju využívajú ako Typ na jednom mieste.
Takže v tomto prípade vlastne chceme, aby typedef, ako by sme tlačíte nový typ
byte, a to je, v podstate, to.
Je to trochu iné ako # define.
>> A teraz, náš kód funguje perfektne.
Takže, ešte raz, # define sa niečo, nahradí ho všade
sa na iné veci.
Je to len makro -
skratka, ako sa zbaviť magických čísel.
Ale v tomto prípade, pretože sme používať to ako typ -
tu -
aby za to pracovať, musíme na typedef, čo bajt.
>> A my sme ju definuje tu.
Nie je to struct, je to v skutočnosti iba celé číslo bez znamienka.
Je to jeden byte dlhý.
Tento kód bude k dispozícii on-line, a všetci ho mali mať hneď.
>> Takže máme -
perfektné -
13 minút odišiel ísť nad problémom sada 5.
Chcem sa prejsť copy.c spoločne, a potom sa budeme krátko prehovoriť
o ostatných častiach problému nastavenie.
Takže dovoľte mi, aby som vytiahnuť copy.c.
A super vec je, že máme vlastne už napísané veľa tohto kódu.
>> Kód písali sme doslova vyšiel odtiaľ, keď som bol
písať to na vlastnú päsť.
Ale to je copy.c, tvorí základ pre prvú a druhú časťou
Problém sada pre whodunit.c, ktoré budete musieť napísať, a resize.c.
Recover.c, čo je tretia a posledná Časť problému nastavenie, nie je
vychádza z tohto súboru.
>> Budeš musieť napísať, že súbor, my vám šablónu pre ktoré
súboru, ale to nemá nič spoločné čo do činenia s copy.c.
Ale pretože copy.c je základom pre Prvé dve časti, ideme
ísť cez neho, takže máte dobrý pocit z toho, čo to robí.
>> A pripomienky, aby niektoré z nich preč.
Sme už napísal niečo z toho.
Po prvé, robíme, že dostaneme tri argumenty.
Ďalej sme si spomenula na názov súboru.
Tak sme preskočili tento krok, ak sme kódované naša vec -
keď naše cp.
Ale tu, oni to robiť je to trochu čistejšie.
>> Sú kontroly, aby sa uistil obidva súbory sú dobré, v
Okrem ich otvorení.
Napísali sme všetko tento kód práve teraz, takže som nebude bývať na tomto kóde.
Ďalej je niektoré veci, ktoré je špecifické pre typy súborov, sme pomocou, ktorý
sú bitmapové súbory.
Bitmapové súbory majú nejaký metadáta sú s nimi spojené.
>> Takže prvých pár bajtov ti o súbore.
Sú to farby pixel v tomto snímku.
Povedia vám o súbore.
A ak budete čítať cez problému nastavenie, budete mať oveľa viac informácií
Na aké typy štruktúr metadát sú zahrnuté s bitmapami.
>> Ale to je dôvod, prečo máme tento prvý sada - tohto kódu priamo tu.
Sme čítanie metadáta -
dva kusy metadát - súbor hlavičky a informácie hlavičky.
A my sme kontrolu niektoré časti to, aby uistite sa, že je pravda, bitmapový súbor
pred pokračovaním.
>> A opäť, to sú detaily sme Nemusíte chodiť do teraz.
Ak budete čítať cez problému nastavenie, budete rozumieť nich.
Dlhý príbeh krátky, to sú len hovorím, to je súbor rastrového obrázka, a
potvrdzuje, že.
>> Ďalej budeme písať tie do súboru von.
Vidíme, že tu.
Píšeme na von ukazovateľ.
Ďalej sme určovanie polstrovanie.
Takže znovu, ako je zvláštnosť s Rastrový obrázok, niektoré linky sú
polstrovanie na konci.
A ak budete čítať cez problému nastavenie, budete sa dozvedieť viac o polstrovaním.
To je vzorec nájsť polstrovanie.
>> Dôležité mať na pamäti -
keď zmeníte veľkosť bitmapy súbor, polstrovanie zmeny.
Keď zmeníte veľkosť súbor, polstrovanie zmeny.
Je to nikdy nebude väčší ako 3 -
to bude 0 až 3, vrátane.
Ale keď zmeníte veľkosť niečo, polstrovanie zmeny.
>> Mám ak je iba jeden pixel v tejto rade, som Potrebujeme tri bajty polstrovaním, pretože
každý riadok musí byť deliteľné štyrmi bajtov dlhé do rastrového súboru.
Ale keď som sa zdvojnásobí to, ísť od jedného pixelu na dva pixel, z ktorých každá,
povedzme, je bajt, potom musím dva bajty polstrovaním, ako zarobiť
, Ktoré sa rovná štyri.
>> Takže keď som sa zmeniť veľkosť niečoho, Potrebujem zmeniť výšku
vypchávky mám.
Znamená to, že zmysel pre každého?
Ďalej sme iterácii každom riadku, alebo cez všetky riadky.
A potom iterovat každý stĺpec v každom riadku.
Sme liečbu tohto bitmapu ako mriežky, ako sme liečiť
Stravovanie v 15..
>> Rovnako ako sme sa správali tehly, kedy sme vytlačili na obrazovke.
Mriežky riadkov a stĺpcov.
Potom - videli sme to.
Vlastne sme len kódované to.
Vytvorili sme nejaké dočasné uskladnenie.
Čítame tam, a potom píšeme ho.
To je presne to, čo práve urobil.
>> Ďalej, pretože som povedal, každý riadok končí v niektorých polstrovanie, sme
preskočiť tomto polstrovanie -
starý polstrovanie.
A potom pridáme späť.
V tomto prípade budeme vytvárať rovnaký presný súbor.
Sme jednoducho skopírovaním.
Takže tento riadok je trochu hlúpe.
Mohli sme doslova dal výplň palcov
>> Ale ak zmeníte veľkosť súboru, vy napriek tomu chcete tento riadok?
Takže ak zmeníme veľkosť súboru, máme ešte chcete preskočiť
cez staré čalúnenie?
>> STUDENT 74: Áno.
>> JASON Hirschhorn: Tak my.
Pretože toto, zase, ponuka so zdrojovým súborom.
Nechceme starostlivosť o čalúnenie zo zdrojového súboru.
Chceme ísť na ďalší riadok.
Ale my jednoducho dať späť Starý množstvo polstrovanie.
Musíme sa vrátiť Nová výška polstrovaním.
>> Takže keď meníme veľkosť súbor, napriek tomu chceme preskočiť
polstrovanie v starom súboru - čo budeme čítať od.
Ale to, čo píšete, aby, ideme musieť vrátiť niektoré odlišné
počet polstrovanie, ktoré sme dospeli k záveru.
Jo.
>> STUDENT 75: Poradie týchto dvoch linky nezáleží, nie?
Vzhľadom k tomu, že ste manipuláciu rôzne súbory.
>> JASON Hirschhorn: Presne tak.
Poradie týchto dvoch liniek nezáleží.
Píšeme tento riadok.
To je tu pre súbor sme písomne.
To je dôležité, aby sme si správne množstvo čalúnenie.
To sa musí vysporiadať so súborom.
Chceme preskočiť rovno cez výplň.
>> Nechceme, aby čítanie -
ak budeme čítať byte v čase, sme Nestarám sa o tieto doplnkové bajty.
Chceme sa presunúť na ďalší riadok.
Nakoniec rovnako ako Lucy dal za nás, zavrieme súbory a vráti 0.
Tak toto je copy.c.
A my vlastne napísal - sme strávili väčšinu časť písania tohto, v podstate.
>> Urobil si to.
Takže dúfajme, že budete mať dobrý pocit o tom, čo sa deje tu.
Veľký rozdiel, úprimne povedané, je len Táto prvá časť, ktorá sa zaoberá
zvláštnosti bitmapové súbory.
Tak som si ako môj ďalší záber, Čo musíme urobiť?
Dobre, poďme premýšľať o tom, detektívka.
>> A pre niekoho, kto si cez problém nastaviť to, čo máme
je potrebné urobiť, detektívka?
Jednoducho.
Aleja.
>> Aleja: Môžeš si vziať tú časť každého pixelu, ktorá označuje red.
A potom -
druh?
>> JASON Hirschhorn: OK.
Tak sa tu časť každého pixel, ktorý označuje červená.
Je to blízko, ale nie všetky z nich.
>> STUDENT 76: No, je tu rôzne spôsoby, ako to urobiť.
>> JASON Hirschhorn: OK.
Daj mi jednu cestu.
>> STUDENT 76: Vyberte všetky červené a potom zdôraznil, modrej a zelenej.
>> JASON Hirschhorn: OK.
Takže vzhľadom oba tieto spôsoby -
to znie, ako by sme dať pixel, to má červenú, modrú a zelenú hladinu.
Chceme zmeniť relatívnej úrovne červenej, modrej a zelenej, v závislosti
na tomto pixelu.
Keď je v tomto kóde mali by sme zmeniť relatívna červená, modrá, zelená
hladiny daného pixelu.
Potom, čo sme si to -
predtým, než sme to napísať?
Daj mi číslo riadku.
>> VIAC ŠTUDENTI: 83.
>> JASON Hirschhorn: 83.
Tak tu.
Pre detektívka, kód, ktorý je potrebné zápisnica by mal ísť všetci tu.
A to je iba kód musíte napísať.
Vzhľadom k tomu, ako sme počuli, všetko, čo potrebujete urobiť, je zmeniť tieto relatívna modrá,
červenej a zelenej úrovne z každého pixelu.
>> Čítal ste ju, a teraz ste bude písať to.
Ako sa dostanem - keď mám túto vec tzv triple, tu, a to je
typ RGBTRIPLE -
dobre, ak sme sa pozreli na bmp.h, čo je RGBTRIPLE?
>> STUDENT 77: Je to struct.
>> JASON Hirschhorn: RGBTRIPLE je struct.
Vidíme, že tu dole.
A tak keď som chcel, aby prístup, povedzme, červená úroveň struct, ako to mám
prístup červenú úroveň tohto struct?
>> [CLASS šelesty]
>> STUDENT 78: RGBTRIPLE.rgbtred?
>> JASON Hirschhorn: Je to pravda?
>> STUDENT 79: Malo by byť trojitý bodka, miesto RGBTRIPLE bodky?
>> JASON Hirschhorn: Triple.
Triple je lokálna premenná, tak tu, je tu žiadne ukazovatele tu.
Takže sme jednoducho použiť bodka notáciu.
To mi dá úrovne červenej.
Ak chcem to zmeniť, som nastaviť to rovnať na niečo iné.
Takže znovu, tento riadok kódu prístupov táto premenná vnútri tohto struct, a
môžeme nastaviť tak, aby niečo nové.
>> Takže pre detektívka, opäť, je to, v podstate to, čo musíme urobiť.
Veľmi jednoduché.
Stačí zmeniť niektoré relatívnej úrovne, a to je miesto, kde že kód pokračuje.
Zmena veľkosti, na druhej strane, je to trochu zložitejšie.
V skutočnosti, pre zmenu veľkosti je pravdepodobne najzložitejšia časť tohto problému nastavenie.
Máme tri minúty ísť cez neho.
>> Ale zase sme už písali väčšina tohto kódu, a tak sme
by mala byť celkom povedome.
Aké sú niektoré veci, ktoré chceme robiť v zmeniť veľkosť, ak ste si prečítali na
problém nastaviť?
Dáte Ak mi je, sme možno hovoriť o nich.
Aké sú niektoré veci, ktoré sme chceli urobiť?
>> STUDENT 80: Vertikálne -
takže budete musieť horizontálne zmeniť jeho veľkosť, ale vertikálne zmeniť jeho veľkosť, rovnako?
>> JASON Hirschhorn: Takže ak máme daný pixel, a ak chceme zmeniť veľkosť ho
faktor dva, teraz musí byť zmeniť veľkosť vodorovne a zmene veľkosti
vertikálne.
Má to zmysel?
Jo.
Tak to je asi Najväčšou výzvou.
A budeme o tom hovoriť v sek.
Jo.
>> STUDENT 81: ako som o tom premýšľal bol ste potrebovali vytlačiť -
>> JASON Hirschhorn: Počkajte.
Nikdy nám nepovedal, čo si urobil.
Budeme hovoriť v logike.
>> STUDENT 81: OK.
Aká bola otázka?
>> JASON Hirschhorn: Len zdvihol ruku.
Nebolo pochýb.
Dovoľte mi, aby som to predstaviť.
Dovoľte mi, aby som diskutovať o tejto krátko.
Takže sme jeden pixel, chceme replikovať, a to ako horizontálne, tak
vertikálne.
Takže v ideálnom prípade to, čo robíme tu, je, sme prečítať v našom pixelu, môžeme napísať, že
však mnoho časov.
>> Ale potom máme trik tu, pretože potom chceme preskočiť k
ďalší riadok a napísať, že na začiatok ďalšieho riadku.
Takže ak chceme replikovať aj horizontálne aj vertikálne, čo je
jeden dobrý spôsob, ako to urobiť -
jeden dobrý aj keď na to?
Takže nepotrebujeme neustále hľadať okolo nášho súboru umiestniť veci.
>> Táto otázka nemusí mať Dávalo to zmysel, ale myslím, že
odpoveď na to pomôže.
>> STUDENT 82: Vytvorenie poľa?
>> JASON Hirschhorn: Tak poďme myslieť každého súboru ako radu.
Poďme si, že pokiaľ ide o radoch.
Ak máme prvý riadok z našej malej obrázok, môžeme túto sériu
do veľkej radu z veľkého obrazu, a potom sa replikovať tento riadok však
koľkokrát je potrebné replikovať, skôr než ísť pixel po pixeli,
ktorá sa dostane mätúce, keď zaoberajúca sa súbory.
>> Pretože keby sme mali -
Bežím z vesmíru.
Ak je to náš súbor, a máme, že tam jeden pixel, a chceme, aby to
tu, máme stále nejaké veci že treba ísť tam, keď sme
písanie a vytváranie nášho nového súboru -
náš súbor, ktorý je dvakrát tak veľký.
>> Ale je to naozaj ťažké s funkciami súborov preskočiť okolo nových liniek
takto, a potom sa vráťte sem a dať veci tam.
Je takmer nemožné, aby niečo rovnako ako to, že v prípade, že má zmysel.
Takže, ak si myslíme, že ide o radoch, môžeme sa naše rady, a potom ju -
kopírovať riadky zvisle.
>> A to je, ako sa vysporiadať s veľkosťou vertikálne, nie horizontálne.
To bolo celkom rýchle, a trochu mätúce.
Bohužiaľ náš čas vypršal.
Budem stáť vonku pre tých z vás, Tu, ktorí majú otázky týkajúce sa
Problém set, vrátane obnoviť.
>> Takže poďme odročiť teraz.
A opäť, ak máte nejaké otázky, môžeme rozprávať vonku.