>> JASON HIRSCHHORN: Velkommen, alle, til Uge 6.
Jeg er glad for at se jer alle i live og godt efter Quiz 0, fordi jeg ved, at
var en smule ru.
Men heldigvis, jer alle gjorde utroligt godt.
Og sГҘ er vidunderligt.
Hvis du er i min afdeling, jeg har givet de fleste af du sikkerhedskopiere dine quizzer allerede.
>> Et par af jer, jeg mГёde efter klasse.
Og hvis du er en udvidelse studerende og du ikke har modtaget din quiz tilbage
endnu, er din TF sandsynligvis arbejder pГҘ det og klassificering det, og vil fГҘ det tilbage
til dig snarest.
SГҘ min forlГҰngerledninger studerende, der er ser lige nu - forhГҘbentlig leve -
Jeg vil fГҘ dine quizzer kort sГҘ godt.
>> Vores dagsorden for i dag er som fГёlger.
FГёrst, vi kommer til at gГҘ over nogle ressourcer, CS50 leverer til dig.
Vi kommer til at gГҘ over Quiz 0 nГҰste, og Jeg vil besvare eventuelle spГёrgsmГҘl nogen
har omkring sГҰrlige problemer.
Og sГҘ vil vi vГҰre at gГҘ over fil I / O og problemet sГҰt 5.
Disse sidste to emner vil tage hovedparten af вҖӢвҖӢafsnittet i dag.
>> Jeg sГҰtter denne liste op hver uge som en pГҘmindelse til jer alle, men af вҖӢвҖӢkerne
sektion, har vi kun 90 minutter - vi er ikke i stand til at dГҰkke alt, hvad jeg
ville elske at dГҰkke for jer.
Men vi har et vГҰld af ressourcer til du at trГҰkke pГҘ, som du kommer til at kende
materiale og arbejde gennem dit problem sГҰtter.
>> En pГҘmindelse om, at jeg har online en tekst kasse, sat op for dig at udfylde, hvis du
har feedback til mig, bГҘde positive og
konstruktiv, om sektion.
Denne URL ligger lige hernede.
SГҘ venligst, tage et Гёjeblik, hvis du har nogen feedback, uanset under afsnittet
eller efter, eller efter at du se videoen online, til at give mig din feedback.
Jeg virkelig sГҰtter pris pГҘ enhver og alle af det.
>> SГҘ jeg har haft smГҘ samtaler med en masse af min
studerende i hele ugen - som jeg hГҘnd back quizzer, taler om
selvfГёlgelig, at se, hvordan du gГёr.
Og Г©t tema er kommet op igen og ovre i at tale om - i
sГҰrdeleshed -
problem sГҰt.
Og jeg har indkapslet dette tema pГҘ brГҰttet lige nu.
>> VГҰsentlige, der er en forskel mellem drejning i noget, der er
udfГёrt korrekt og noget der er gjort godt.
De fleste mennesker har gjort fantastisk i form af korrekthed -
5 s eller 4 s pГҘ alle psets.
De fleste mennesker bliver dem hele tiden.
>> Men bare fordi du har gjort noget rigtigt betyder ikke, du har
gjort noget sГҘ elegant, eller effektivt, eller sГҘ rent som du
kunne have gjort det.
Og det er, hvad design -
og i mindre grad, stil -
akser er til for.
SГҘ jeg presser dig alt, og andre TFs presser jer, ikke kun drejning
i ting, der er korrekt, men slГҘ i de ting, der er kodet godt.
>> Ikke at gГёre unГёdvendig efter slГёjfer, ikke genberegne variabler hvis
du behГёver ikke at.
For eksempel, ser tilbage til problem sГҰt 4, nГҘr du placerer mursten pГҘ
skГҰrmen, hver rГҰkke - hver mursten i en given rГҰkke har samme y-koordinat -
samme hГёjde koordinat.
>> SГҘledes at y-koordinat ikke behГёver at beregnes i det indre
indlejret FOR lГёkke, som du sandsynligvis brugt at sГҰtte disse klodser pГҘ skГҰrmen.
Det skal kun beregnes hvert gang, du tГҰndte en rГҰkke, eller
flyttet ned trГҰk.
SГҘ sige, hvis der er 10 klodser i en trГҰk, kan hver sten har samme
y-koordinat, og at y-koordinat kan bare blive beregnet
Г©n gang for alle af disse.
>> Det behГёver ikke at beregne 10 tider, og heller ikke denne beregning behov
ske i den faktiske funktion opkald -
det nye gracked funktion opkald.
SГҘ hvis der var lidt forvirrende for dig, mere generisk, ting, der
behГёver ikke at ske hver eneste gang du gГҘr gennem en for-lГёkke, bГёr ikke vГҰre
sГҰtte inde for-lГёkken, og bГёr ikke ske, hver gang du gГҘr
gennem for-lГёkken.
>> Et andet godt design eksempel oplevede vi i uge 3 for 15, kan du holde
styr pГҘ nul.
SГҘ nГҘr du initialiserer bord, du spare - i en global variabel, mГҘske -
x-og y-koordinat af nul.
Og sГҘ nГҘr du -
i dit trГҰk-funktion, nГҘr du foretager en vellykket trГҰk, du opdaterer
placering af nul.
>> Det ville spare dig fra at skulle gГёre indlejret efter slГёjfer til at se gennem
bord hver gang i din flytte funktionen og finde nul, eller finde fliser,
og derefter kontrollere, hvad der er ved siden af.
I stedet har du placeringen af nul, kan du bare kigge over, under,
og til venstre og hГёjre for den, for at finde den flise, du sГёgte efter.
>> SГҘ med hensyn til de programmer, vi er skrive, de er aldrig store nok
at nogle af disse design beslutninger er virkelig kommer til at hГҰmme din
program, eller gГёre det kГёre langsommere, eller mГҘske endda lГёbe tГёr for hukommelse.
Men vi er stadig skubber jer at skrive sГҘ elegant og
effektiv kode som muligt.
>> SГҘ hvis du ender med at skrive tingene der har en vГҰsentlig stГёrre
anvendelsesomrГҘdet, vil de blive skrevet med god designe ud over at vГҰre korrekt.
SГҘ en rГҰkke af jer har bragt ud af det.
Det er noget, vi leder efter - noget vi kommer til at fortsГҰtte med at
skubbe dig fyre pГҘ.
>> Hvis du nogensinde har spГёrgsmГҘl om den design af dit program, er du velkommen
at nГҘ ud til mig, og jeg er glad for at gГҘ gennem dit program med dig,
og pege pГҘ nogle af udformningen beslutninger, du har foretaget, og giver dig nogle
forslag til, hvordan man kan gГёre selv bedre design beslutninger.
>> SГҘ vi kommer til at bevГҰge sig pГҘ til at tale om Quiz 0.
FГёr vi gГёr det, gГёr nogen har spГёrgsmГҘl om, hvad
Jeg har dГҰkket hidtil?
>> [Raslende lyd]
>> JASON HIRSCHHORN: Syv sekunder.
OK.
Lad os tale om Quiz 0 for lidt.
De fleste af jer har din Quiz 0 ryg.
Hvis du ikke gГёr det, forhГҘbentlig du husker det en smule.
Men hvis du har taget Quiz 0, sГҘ du ogsГҘ have adgang til PDF-online
testoplГёsningen.
>> Er der nogen har nogen spГёrgsmГҘl, fГёr vi springer ind i ugens materiale om
et sГҰrligt problem pГҘ Quiz 0 -
hvorfor svaret er, hvad det er?
Er der nogen forvirret over noget?
Selv hvis du fik problemet ret, men bare gerne vil have mig til at forklare det lidt
mere, jeg er glad for at gГёre det nu.
>> SГҘ jeg har bedt jer til komme forberedt med nogle
tanker om Quiz 0.
SГҘ hvem vil gerne fГҘ os begyndte med et spГёrgsmГҘl eller
kommentar om Quiz 0?
>> [PAPER knitrende]
>> JASON HIRSCHHORN: Ikke alle gjorde perfekt.
SГҘ jeg ved, [griner]
der vГҰre nogle spГёrgsmГҘl om Quiz 0.
OK.
Ja.
Ompica.
>> OMPICA: Number 10.
>> JASON HIRSCHHORN: Number 10.
Hvilken en var nummer 10?
>> OMPICA: The -
>> JASON HIRSCHHORN: I haven't -
>> OMPICA: Den omfatter -
>> JASON HIRSCHHORN: Number 10 var otte til i - at skrive otte til i?
>> OMPICA: Ja.
>> JASON HIRSCHHORN: OK.
SГҘ et andet spГёrgsmГҘl du kunne have spurgte var jeg forudseende?
Svaret er ja.
I afsnit fГёr quizzen, spurgte jeg jer at kode bГҘde Sterling og
otte til jeg.
BГҘde af dem skete for vises pГҘ quizzen.
SГҘ forhГҘbentlig, du har betalt opmГҰrksom pГҘ det.
>> Og hvis du havde, sГҘ ville du have sandsynligvis gjort godt pГҘ de to.
Men otte til jeg gjorde vi faktisk ikke kode det i klassen, men det var igen,
spurgte pГҘ quizzen.
SГҘ et par ting at tage BemГҰrk nГҘr kodning otte til jeg.
Den fГёrste ting, pr spГёrgsmГҘlet, var at du havde brug for at kontrollere, om strengen
var lig med nul.
>> Et par personer forsГёgt at kontrollere senere i programmet, hvis s beslag jeg var -
sГҘ et bestemt tegn pГҘ, at snor - var lig med nul.
Men husk, at null er vГҰsentlige - det er godt at tГҰnke pГҘ
null som en nul-pointer - en pointer til nul -
et sted i hukommelsen, hvor du kan aldrig fГҘ adgang til.
>> SГҘ hvis noget er lig med nul, du ved, at det ikke er blevet initialiseret,
eller der er ikke noget der.
SГҘ s er en char stjerne, s beslag i er en char.
SГҘ det giver mening at sammenligne s til null, men ikke s beslag jeg til null.
Men igen - sГҘ det var det fГёrste, at du skulle gГёre -
skal du kontrollere, at du rent faktisk fik en reel streng.
>> NГҰste, du Гёnskede at gГҘ igennem hvert tegn i strengen.
Og sГҘ det ville vГҰre som en s beslag Jeg, for eksempel, hvis jeg er din iterator.
Og tage denne karakter, og fГҘ dens faktiske vГҰrdi.
Du har det gemt som en char, men ASCII-vГҰrdien for nul -
nul som et tegn -
er faktisk det hele tal nul.
Det er nogle andre tal, som du kan kigge op i ASCII-tabellen.
>> SГҘ en mГҘde at korrigere for det - nok den bedste mГҘde at korrigere for
der - er trГҰkke fra det tegnet vГҰrdi -
nul som et tegn.
SГҘ minus enkelt citat, nul, anden enkelt citat.
Det vil tage, hvad nummer du har som en char, og fГҘ det svarer til
nummeret som et virkeligt heltal.
>> Og der er meget lig med den fremgangsmГҘde, en masse mennesker tog i
Problemet sГҰt 2, med CГҰsar og Viginere -
disse ciphers, nГҘr du blev dreje dem.
SГҘ efter at du har det som et nummer fra nul til ni, sГҘ - efter
hvor det gГҘr i den ultimative nummer - du nГёdt til at formere den
ved en effekt pГҘ 10.
>> Nogle folk flyttede fra bagsiden til fronten, og multipliceres den enkelte
tal med en effekt pГҘ 10.
Nogle mennesker flyttede fra den front til bag -
og sГҘ tog de hГёjeste lГёbenumrene fГёrst -
og ville spare dem i en global counter variabel.
Og sГҘ hver gang gennem FOR loop, formere sig, at kГҰmpe global
imГёdegГҘ variabel ved 10, for at gГёre plads til den nГҰste char.
>> SГҘ det var en smule forvirrende uden mig skrive det pГҘ tavlen.
Men prГёveoplГёsningen er tilgГҰngelig for dig.
Men det var de store ting vi ledte efter.
OgsГҘ en kontrol for at sikre, at hver individuel karakter var faktisk en
karakter mellem nul og ni, og ikke en anden karakter, som en A,
for eksempel.
>> Det var de ting, vi ledte i det spГёrgsmГҘl.
Besvarer det dit spГёrgsmГҘl?
>> OMPICA: Ja.
>> JASON HIRSCHHORN: OK.
Er der andre spГёrgsmГҘl om Quiz 0?
Hvad med at samle?
Everybody kompilering ret?
Nej.
Der var en -
[Griner]
Eventuelle spГёrgsmГҘl om kompilering proces?
Wow.
>> [PAPER knitrende]
>> JASON HIRSCHHORN: Ja.
Michael.
>> MICHAEL: Er nummer 7 - tilfГҰldigt?
>> JASON HIRSCHHORN: Number 7.
Nummer 7, var at fГҘ et tilfГҰldigt heltal.
Excellent.
SГҘ du fГҘr et heltal a og en heltal b og du vil have en tilfГҰldig
heltal mellem a og b.
Vi kan faktisk skrive denne ene pГҘ bestyrelsen, fordi denne ene
var Г©n linje kode -
Г©n mГҘde at gГёre det.
>> SГҘ vi givet drand som en funktion, vi kunne bruge.
Og hvad betyder drand -
forudsat det er blevet seedet -
hvad betyder drand vende tilbage?
>> MICHAEL: En flyder mellem 0,0 og 1,0.
>> JASON HIRSCHHORN: Et tal - ja.
Et tal mellem 0 og 1.
Og sГҘ vi har B og A.
Og sГҘ har vi vores tilfГҰldige tal mellem 0 og 1 givet til os af drand.
Nogle mennesker forsГёgte at sГҰtte b, eller b minus en, eller noget inde dem
parenteser.
Det ville betyde, at de er argumenter denne funktion.
>> drand ikke tager nogen argumenter - Ligesom getString gГёr
ikke tage nogen argumenter.
SГҘ det er bare ГҘbne paren tГҰt paren - og det i sig selv er
funktionen opkald.
Og det giver dig en rГҰkke mellem 0 og 1..
SelvfГёlgelig har vi en hel rГҰkke at tal kan vГҰre i.
>> Sige, hvis b er 10 og en er 5, vi virkelig Гёnsker et nummer med en rГҰkke af 5..
SГҘ den nГҰste ting, vi skal gГёre, er multipliceres med den rГҰkke B minus en.
SГҘ under forudsГҰtning af, der er mangedoblet.
Og det vil give os en rГҰkke inden for et givet interval.
Og dette specifikke omrГҘde er den Forskellen mellem B minus en.
>> Og endelig, der vil kun give det fra - sige omrГҘdet mellem b minus en
er 5, vil det give os et tal fra 0 til 5.
Men hvis en er faktisk 5, er vi nГёdt til at Гёge dette omrГҘde op til, hvor det er
faktisk formodes at vГҰre, ved at tilfГёje en.
SГҘ fГҘr logikken hГёjre.
Og sГҘ ville du have et andet spГёrgsmГҘl?
>> MICHAEL: Nej.
Jeg bare fГёler virkelig dum lige nu.
[Griner]
>> JASON HIRSCHHORN: Nej.
MГҘ ikke fГёler virkelig dum.
Et antal mennesker kГҰmpet med dette spГёrgsmГҘl.
Og sГҘ det andet spГёrgsmГҘl er, drand, du sagde, giver dig en float -
returnerer en float.
Men denne funktion faktisk bedt til et helt tal, der skal returneres.
>> Du behГёver ikke at kaste dette udtrykkeligt til et heltal, fordi disse
operationerne vil behandle det som alle en flyde - som et decimaltal.
Som dette vil - ogsГҘ selvom det er et helt tal, vil dette
multipliceres korrekt.
Alle multiplikation vil arbejde.
Du behГёver ikke at kaste det her.
Faktisk bГёr du ikke kaste den.
>> Det ville -
hvis du vil kaste en rГҰkke der er mellem 0 og 1 -
et tilfГҰldigt tal, en floating point -
sГҘ vil det enten kun vГҰre 0 eller 1, sГҘ mister du alt dette prГҰcision.
Men i slutningen, nГҘr du vender tilbage, det automatisk fГҘr
sendes tilbage som et heltal.
SГҘ du behГёver ikke at gГёre at stГёbe selv.
>> SГҘ dette var svaret pГҘ dette spГёrgsmГҘl, nummer 7.
Alle andre spГёrgsmГҘl om Quiz 0?
Ja, Annie.
>> ANNIE: NГҘr vi bruger rekursive -
nГҘr vi bruger iterative loops?
>> JASON HIRSCHHORN: NГҘr bruger du rekursive - sГҘ mere generelt
fordele og ulemper ved rekursion versus en iterativ fremgangsmГҘde.
Kan nogen give en pro eller en con?
Venligst?
Ikke kan nogen.
Hvem kan tilbyde en pro eller en con?
>> [PAPER knitrende]
>> STUDENT 1: Rekursiv er mindre kodning - mindre skrive?
>> JASON HIRSCHHORN: SГҘ generelt, rekursion isГҰr en funktion -
eller en algoritme som merge sortere - som egner sig
til en rekursiv metode -
kunne vГҰre mere ligetil at kode rekursivt.
Og bare give mere mening at gГёre det rekursivt.
SГҘ det ville vГҰre en pro til rekursion.
Andre?
Ja?
>> STUDENT 2: Con til rekursion -
Det bruger mere hukommelse.
>> JASON HIRSCHHORN: SГҘ prГҰcis hГёjre.
En rekursiv funktion vil holde tilfГёje stakrammer til stakken.
SГҘ hvis du opererer pГҘ en masse tal, og er nГёdt til at kalde dette
fungere en masse, sГҘ vil du helt sikkert fylder mere hukommelse, mens
en iterativ tilgang vil kun sГҰtte Г©t stakrammen pГҘ stakken, fordi
det hele sker inden for en funktion.
>> Alle andre fordele og ulemper?
Ja.
>> STUDENT 3: Fordele for rekursion.
Du behГёver ikke at bestemme i forhГҘnd, hvor mange gange
kode mГҘtte gentages.
Du kan have et forudbestemt antal gange, at du er nГёdt til at gentage, sГҘ
rekursion er bedre, fordi det tager dette resultat.
>> JASON HIRSCHHORN: Jeg tror, вҖӢвҖӢdet er rigtigt.
Men jeg tror i begge tilfГҰlde du ville aldrig -
ville du sikkert fГҘ nogle input fra brugeren.
Eller denne funktion ville have nogle input der ville bestemme, hvor mange gange det
skal kГёre.
SГҘ generelt, ikke ville du hГҘrdt kode - selv i en iterativ tilgang - hvordan
mange gange, at lГёkken skal kГёres.
>> Har du har en anden, du var tГҰnker, Annie?
OK.
SГҘ det er nok de to -
den stГёrste pro og den stГёrste con til en rekursiv versus
en iterativ fremgangsmГҘde.
OK.
Noget andet pГҘ Quiz 0?
>> Lad os komme videre.
File I / O. Der er en vidunderlig kort denne uge pГҘ fil I / O, som forhГҘbentlig
du har set flere tidspunkter, og beundret.
En masse arbejde gik ind i det, og jeg har hГёrte det er sindssygt nyttigt.
Jeg har ogsГҘ inkluderet linket pГҘ dette dias, hvis du ikke har haft en
chance for at se det 10 gange.
>> SГҘ vi kommer til kort gГҘ over vigtige skridt til at ГҘbne og arbejde
med filer og derefter vil vi dykke ned i en kodning problem fГёr
undersГёge problemet sГҰt.
SГҘ igen, vil jeg sГҰtte det op pГҘ skГҰrmen, men jeg har tГҰnkt mig at tale om
blot et minut om, hvad vi gГёr her med fil I/O--
hvad betyder det?
>> Det betyder, at vi kan skabe vores programmer, og sГҘ har vores programmer
exit, og ikke har gjort nogen indvirkning pГҘ verden uden for vores program.
Men nГҘr vi begynder at arbejde med filer - bГҘde lГҰse dem i og skabe
dem - vi kan have en vis effekt pГҘ verden uden for vores program.
>> Ligesom hvis Microsoft Word ikke var i stand at foretage Word-dokumenter, sГҘ
nГҘr Microsoft Word op, alle dine arbejde ville vГҰre vГҰk, og det ville
virkelig vГҰre ubrugelig.
Vi har i sidste ende vil vГҰre i stand til skrive programmer, der kan pГҘvirke
verden omkring dem, bГҘde ved at tage i komplekse indgange - i form af filer og
via filer, og ogsГҘ skaber interessant og overbevisende udgange -
i form af forskellige typer af filer.
>> SГҘ det er derfor, vi er begyndt at lГҰre at arbejde med filer.
Mere konkret, hvilke vi gГёr, er som fГёlger.
Det er meget simpelt.
Der er kun et par skridt, og de er opfГёrt her pГҘ denne kode.
SГҘ vi kommer til at gГҘ igennem denne kode linje for linje.
>> FГёrst skal du se fremhГҰvet -
nГҘr du arbejder med en fil, uanset hvilken type fil det er,
du nГёdt til at ГҘbne den.
Og det er med en opfordring til fopen -
lige her.
Du medtage navnet pГҘ filen.
Hvis filen ikke er i telefonbogen, eller den mappe, hvor dette program
liv, sГҘ er du ogsГҘ nГёdt til at omfatte en sti til hvor filen er.
>> Vi kommer til at antage, at dette fil kaldet "text.txt" -
en simpel tekst dokument - er i samme mappe som dette program er.
SГҘ det er en anden ting at huske pГҘ Гёje - at hvis du Гёnsker at ГҘbne en fil
et andet sted, du faktisk har brug at medtage dens placering.
>> For det andet, kan du overfГёre et argument for fopen, og det er, hvad du Гёnsker at gГёre
med filen.
Der er tre vigtigste argumenter, du kommer til at passere til fopen.
Hvem kan give mig de tre?
Hvem kan give mig en af вҖӢвҖӢdem?
Ja.
>> STUDENT 4: Filen navn?
>> JASON HIRSCHHORN: Undskyld.
Tre vГҰsentligste argumenter du kan passere som det andet argument til fopen.
Du har ret - filnavnet er det fГёrste argument.
Men det andet argument til fopen er generelt tre strygere, og - ja.
Aleja.
>> Aleja: A for append.
>> JASON HIRSCHHORN: A, hvis du vil vedlГҰgge en fil, der allerede eksisterer.
>> STUDENT 5: R for at lГҰse.
>> JASON HIRSCHHORN: R hvis du Гёnsker at lГҰse fra en fil.
>> STUDENT 6: W for write.
>> JASON HIRSCHHORN: Og w hvis du Гёnsker at skrive til en fil.
SГҘ i dette tilfГҰlde, vi skriver til filen, sГҘ vi har w.
Du ГҘbner den, du ogsГҘ nГёdt til at gemme fil et eller andet sted, og det er med
kode til den venstre side af opgaven operatГёr -
Jeg skaber en pointer til en fil kaldes, i dette tilfГҰlde, fil.
>> Vi kommer ikke til at bekymre dig, hvad denne alle hГҰtter FIL ting er.
Det er tilstrГҰkkeligt at sige, det er en lang strГёm af nuller og ettaller.
Og det er, hvordan vi kommer til at betjene det og forstГҘ det.
>> Den nГҰste ting, vi skal gГёre - og dette er utroligt vigtigt -
hver gang du ГҘbner en fil -
i virkeligheden, nГҘr du kalder malloc for eksempel, og fГҘ nogle hukommelse, og prГёv
og gemme det i en pegepind, du altid Гёnsker at tjekke for at sikre, at der
funktion returnerede ikke nul.
>> SГҘ i dette tilfГҰlde, er vi kontrol for at sikker pГҘ, at vi faktisk ГҘbnet
fil korrekt, og der var ingen fejl i vores program.
NГҰste gang vi har tjekket for at sikre, at vi har en fungerende fil, kan vi
skrive til eller lГҰse fra, eller fГёje til filen.
I dette tilfГҰlde er jeg simpelthen udskrive en linje til denne fil.
>> Hvordan kan jeg vide det?
NГҘ, jeg bruger denne funktion kaldet fprintf.
Alle de funktioner, du vil bruge nГҘr du skriver til eller lГҰsning fra eller
manipulere filer vil vГҰre magen til funktioner, du har set fГёr, men
starter med bogstavet F, stГҘende i filen.
Og fprintf, i modsГҰtning til vores normale print app, tager et yderligere argument,
og det er den fil, hvor du Гёnsker at udskrive denne linie til.
>> Jeg har ikke noget at ret ohai.
Jeg har ikke den tredje argument til printf -
eller det andet argument til printf, den tredje argument til fprintf, fordi jeg
ikke har nogen pladsholdere her.
Jeg er ikke inklusive eventuelle variabler.
Men igen, fprintf og alle disse fil funktioner, der opererer med filer
generelt vil fГҘ brug for filen som de er i drift.
>> Endelig er den sidste vigtige ting at gГёre, er at lukke filen, ligesom
med - nГҘr vi allokere noget, vi Гёnsker at frigГёre noget, at vi ikke
har en hukommelsesfejl - vi vil at lukke vores fil.
Hvis programmet forladt uden lukning filen, odds er intet ville gГҘ
forkert, isГҰr hvis det var en lille fil.
>> Men det er bestemt god kodning stil og praksis altid at lukke din fil
nГҘr du er fГҰrdig med at bruge det.
SГҘ det er det grundlГҰggende i fil I / O. Du har sikkert set det fГёr, eller
sГҘ det i denne fantastiske kort.
Er der nogen har nogen spГёrgsmГҘl, fГёr vi gГҘr ind i nogle praksis kodning
problemer, omkring fil I / O eller skridt, jeg gik bare forbi?
>> [TYPING SOUNDS]
>> JASON HIRSCHHORN: Kan du har et spГёrgsmГҘl, Avi?
>> AVI: Nej.
>> JASON HIRSCHHORN: OK.
Jeg har tГҰnkt mig at vente en anden syv sekunder.
[Griner]
Det er et rigtig godt tip.
Du fyre kan bare ikke lide stille spГёrgsmГҘl.
Det er fint.
OK.
SГҘ vores fГёrste praksis problem er, at vi er kommer til at overlappe funktionen af
en kommandolinje vГҰrktГёj, som du sandsynligvis brugt fГёr - copy -
kopien vГҰrktГёjet.
Hvis du skriver cp, og derefter sende det to argumenter i din terminal, kan du
kopiere en fil.
Og det er det, vi gГҘr til at skrive lige nu.
>> SГҘ igen, lГҰse ud af dette dias, jeg havde dig til at skrive et program, der tager
to og kun to kommando-linje argumenter -
en kildefil og en destination fil -
og kopierer indholdet af kilden filen til destinationen fil
en byte ad gangen.
SГҘ det er meget at bede om.
>> Igen, en god tilgang til dette er at ikke gГҘ direkte til C-kode, men
bryde det ned i et par trin.
FГёrst tГҰnke logikken - prГҰcis hvad jeg beder dig om at gГёre -
og forstГҘ alle de trin til dette problem.
Ikke i C, bare i nogle pseudokode, eller endda en mental model
hvad der foregГҘr.
>> NГҰste gang du har pseudokoden ned, regne ud, hvordan pseudokoden
kort pГҘ vГҰrktГёjer og ting, vi har lГҰrt at bruge i C.
>> Og endelig, nГҘr du har alt, sammen, kan du kode problemet.
Tage 5 til 10 minutter for at arbejde pГҘ dette problem.
Jeg vil sГҰtte instruktionerne tilbage op i et sekund.
Og sГҘ vil vi gГҘ over pseudokode og kode
det lever som en gruppe.
>> Hvis du har spГёrgsmГҘl, mens du er arbejder pГҘ dette, er du velkommen til at hГҰve
din hГҘnd, og jeg vil komme rundt og besvare dem.
>> STUDENT 7: Kan jeg knalde et stykke papir?
>> JASON HIRSCHHORN: Hvad sker der?
>> [TYPING SOUNDS]
>> JASON HIRSCHHORN: OK.
Lad os gГҘ over pseudokoden fГёrst, og sГҘ vil jeg give dig et par mere
minutter at afslutte kodning.
>> Hvem vil gerne starte mig med den fГёrste linje i
pseudokode til denne funktion?
>> STUDENT 8: Kontroller, at du fik to filer.
>> JASON HIRSCHHORN: OK.
Og hvis vi ikke?
>> STUDENT 8: Jeg ville vende tilbage 0.
>> JASON HIRSCHHORN: Skal vi vende tilbage 0?
>> STUDENT 8: Return a -
afblГҰnding.
Undskyld.
>> JASON HIRSCHHORN: Ja.
Sandsynligvis ikke 0.
Fordi 0 betyder alt var godt.
OK.
SГҘ det er den fГёrste linje af pseudokode.
Hvem har den anden linje i pseudokode?
>> STUDENT 9: Г…ben begge filer?
>> JASON HIRSCHHORN: Г…bn begge filer.
OK?
>> STUDENT 10: Kontroller hvis filen er NULL?
>> JASON HIRSCHHORN: Kontroller, at at hverken er NULL.
Som en sidebemГҰrkning -
skrГҘstreg 0 -
er, at NUL?
>> STUDENT 11: Nej.
>> JASON HIRSCHHORN: Det er ikke NULL.
Det kaldes NULL terminator.
Det er faktisk staves med kun Г©n liter.
SГҘ kontrollerer noget imod det - der er faktisk et tegn -
sГҘ kontrol noget imod, der er ikke det samme som kontrol for at se, om det
lig NULL.
>> Og nogle mennesker -
pГҘ deres quizzer og deres problem sГҰt - har fГҘet
to af dem forvirret.
Men de to af dem er i virkeligheden forskellige.
Man slutter en streng -
den ene er en pointer til 0.
>> STUDENT 12: Hvorfor ville du ikke kontrollere SГёrg for, at filerne ikke er NULL
fГёr du ГҘbner dem?
>> JASON HIRSCHHORN: So ГҘben sparer noget i denne fil.
Og hvis du gГҘr tilbage her -
sГҘ denne linje - fopen -
vil give dig en adresse og butik at adressen i filen, hvis det virker.
Hvis det ikke virker, er det gemmer NULL -
>> STUDENT 12: Oh.
OK.
Fik dig.
>> JASON HIRSCHHORN: I fil.
SГҘ du kan ikke tjekke for NULL fГёr du har ГҘbnet dem.
NULL betyder noget ikke gjorde fungere korrekt.
OK.
SГҘ tjek for at sikre hverken sige?
Eller er?
Hvad mener vi?
Vi vil gГҘ med det.
>> STUDENT 13: Er.
>> JASON HIRSCHHORN: Er?
Hverken er?
>> STUDENT 13: Er.
>> JASON HIRSCHHORN: OK.
Vi synes at have nogle enighed om det.
Hverken NULL.
OK, nГҰste linje i pseudokode.
Hvem har ikke givet mig en linje endnu?
Vi vil vente pГҘ dig.
Ja.
>> STUDENT 14: Du er nГёdt til at lГҰse fra den fГёrste fil?
>> JASON HIRSCHHORN: OK.
>> STUDENT 14: Eller vi bruger fscanf eller noget som den fГёrste fil?
>> JASON HIRSCHHORN: SГҘ vi Гёnsker at lГҰses fra den fГёrste fil, og -
lad os sГҰtte det lige her.
LГҰs fra kildefilen.
Og sГҘ, hvad gГёr vi, nГҘr vi lГҰses fra kildefilen?
En anden?
>> STUDENT 15: Skriv ind destinationsfilen?
>> JASON HIRSCHHORN: Vi skriver til destinationsfilen, og -
OK.
Hvad mangler vi?
Nogen andre, der ikke har givet mig en linje kode endnu - af pseudokode.
Ja.
>> STUDENT 16: MГҘske kan du altid tjekke hvorvidt der er noget at lГҰse for,
som den nГҰste linje?
Det er ligesom den nГҰste linje, se, hvis den findes.
>> [ELEKTRONISK BEEP]
>> JASON HIRSCHHORN: Ups.
Det er min journal software.
Ja?
>> STUDENT 16: Ja.
>> JASON HIRSCHHORN: SГҘ giv det til mig en gang mere.
>> STUDENT 16: Kontroller, om der er stadig en nГҰste linje fra
kildefil at lГҰse.
>> JASON HIRSCHHORN: OK.
SГҘ vi ikke lГҰser linier - lГҰste bytes her -
men du er korrekte.
Vi Гёnsker at lГҰse og skrive, indtil der ikke er flere bytes.
OK.
Og sГҘ disse bГёr virkelig vГҰre indrykket lidt, fordi de er under der.
Right?
Indtil vi er ude af bytes, vi kommer til lГҰses fra kildefilen og skrive
til destinationen fil.
>> Og sГҘ, hvad der er den sidste linje pseudokode?
Nogen, der er ikke givet mig endnu noget.
>> STUDENT 17: Luk filerne?
>> JASON HIRSCHHORN: PrГҰcis.
Luk filerne.
SГҘ der er vores pseudokode.
Jeg har tГҰnkt mig at sГҰtte pseudokoden ind gedit, og i et par minutter, vi
vil kode det sammen.
>> OK.
Lad os komme i gang som en gruppe.
Nishant, jeg har min nye fil.
Jeg har lige ГҘbnet det op.
Untitled document 1.
Hvad er det fГёrste, jeg skal gГёre?
>> Nishant: Medtag bibliotekerne?
>> JASON HIRSCHHORN: OK.
Hvilke biblioteker?
>> Nishant: stdio.h, stdlib.h, tror jeg?
>> JASON HIRSCHHORN: OK.
Hvad er stdlib efter?
>> Nishant: Jeg har glemt.
>> JASON HIRSCHHORN: OK.
SГҘ indeholde stdio.
Hvad skal jeg gГёre, selv fГёr Jeg starte kodning?
>> Nishant: Skriv en overskrift?
>> JASON HIRSCHHORN: Hvordan fГҘr jeg det farvet?
>> [indskyde STEMMER]
>> Nishant: Hvordan fГҘr du det farvet?
>> JASON HIRSCHHORN: Hvordan skal jeg Farvekodning?
>> Nishant: Jeg ved det ikke.
Oh.
Gem.
>> JASON HIRSCHHORN: Gem.
Ja.
Jeg skulle gemme det som en. Ca.
SГҘ gem det pГҘ skrivebordet som cp.c.
SГёd.
Og hvis jeg Гёnsker at fГҘ fuld stil punkter, hvad skal jeg
omfatte foroven?
>> Nishant: Du kan skrive dit navn, navnet af programmet, og formГҘlet
af programmet sГҘ godt?
>> JASON HIRSCHHORN: Ser godt ud.
Excellent.
SГҘ du har startede os perfekt.
# Include -
vi vil ogsГҘ skrive -
OK.
SГҘ jeg tror, вҖӢвҖӢjeg alle indstillet til at gГҘ.
Hvem har den fГёrste linje kode for mig - eller de fГёrste linjer kode, der
det vil tage at tilfredsstille vores fГёrste kommentere i pseudokode?
Dig.
>> STUDENT 18: BГёr det ikke vГҰre int argc og derefter char * argv?
>> JASON HIRSCHHORN: Jeg tror du har ret.
Lad os ГҰndre det til int main, ГҘbne parentes, int argc, komma, char * argv?
Ligesom det?
>> STUDENT 18: Beslag.
>> JASON HIRSCHHORN: Beslag.
Г…bneparentes tГҰt beslag, tГҰt forГҰlder.
Perfect.
Nu kan jeg tage kommandolinje-argumenter.
OK.
Sikre, at vi fik to filer.
Du kan give mig, at sГҘ godt.
>> STUDENT 18: Hvis argc -
det man ikke lig 3.
>> JASON HIRSCHHORN: Hvis ГҘbne paren argc ikke lig med 3?
>> STUDENT 18: Ja, du vender tilbage 1 eller noget.
>> JASON HIRSCHHORN: Undskyld.
>> STUDENT 18: Return 1 eller noget.
>> JASON HIRSCHHORN: Tilbage 1.
OK?
Store.
Г…bn begge filer.
Hvem kan hjГҰlpe mig at ГҘbne begge filer?
Hvem har ikke givet mig koden endnu?
Kurt?
>> KURT: SГҘ alle caps F-I-L-E stjerne kilde.
>> JASON HIRSCHHORN: Jeg har tГҰnkt mig at tage ud vokaler.
Det er cool.
Det er ligesom Tumblr.
>> STUDENT 18: Lig fopen -
>> JASON HIRSCHHORN: Lig fopen?
>> STUDENT 18: Г…bne parentes, argv, ГҘbneparentes.
>> JASON HIRSCHHORN: Vent.
Undskyld.
Г…ben parentes.
OK.
>> STUDENT 18: Ja.
Argv sub 1..
>> JASON HIRSCHHORN: Sub 1?
>> STUDENT 18: Ja.
Argv ГҘbneparentes 1 -
Ja.
Og sГҘ komma og derefter ГҘbne dobbelt citat, r, dobbelt citat,
tГҰtte paren, semikolon.
>> JASON HIRSCHHORN: SГёd.
Og hvad med den anden?
>> STUDENT 18: Meget lignende, men i stedet af S-R-C, ville du kalde det D-S-T.
>> JASON HIRSCHHORN: Oo!
Jeg kan godt lide det.
>> STUDENT 18: Just D-S-T. Ja.
Og sГҘ argv, ГҘbneparentes, 2..
Ja.
Og sГҘ w stedet for r..
Ja.
>> JASON HIRSCHHORN: Great.
NГҰste par linjer.
OgsГҘ, hvis nogen har ting at tilfГёje til linjer, som vi har gjort, er du velkommen til
tilfГёje dem sГҘ godt.
Kontroller, at ingen af вҖӢвҖӢdem er NULL.
Hvem kan give mig den kode jeg har brug for at tilfredsstille denne linje af pseudokode?
Archer.
>> ARCHER: Hvis src lig ligemГҰnd NULL eller dst lig ligemГҰnd
NULL, sГҘ du vender tilbage -
>> JASON HIRSCHHORN: Hvad?
>> ARCHER: Return 2?
>> JASON HIRSCHHORN: Return 2.
SГҘ hvis ГҘben parentes src lig lig NULL, eller -
uanset hvad der thing's - rГёr?
Pipe?
Vi kalder det rГёr.
Pipe, rГёr, dst lig ligemГҰnd NULL, returnere 2.
OK?
Indtil vi er ude af bytes -
vi slags springes over dette skridt fra pseudokoden del til at gГҘ til her.
>> Men indtil vi er ude af bytes - hvad lyder det?
Hvilken type C struktur -
men jeg bruger ikke ordet struktur, fordi vi kommer til at begynde at bruge
at i andre tilfГҰlde -
men C vГҰrktГёj lyder det?
>> STUDENT 19: En lГёkke.
>> JASON HIRSCHHORN: En lГёkke.
Lyder som en lГёkke.
SГҘ der kan give mig den fГёrste linje af lГёkken kode lige her?
Du kan ogsГҘ vГҰlge, hvilken slags loop, du Гёnsker, hvis du giver mig
denne linje kode.
Der findes tre typer.
Du kommer til at plukke.
Jeg vil foreslГҘ en af вҖӢвҖӢdem.
Avi.
Hvilken en vil du have?
>> AVI: FOR.
>> JASON HIRSCHHORN: FOR.
>> AVI: int i er lig med nul.
>> JASON HIRSCHHORN: OK.
>> AVI: Denne del er jeg ikke sikker pГҘ om.
Men i er mindre end stГёrrelsen af stjerne kilde?
Jeg er ikke sikker pГҘ.
>> JASON HIRSCHHORN: OK.
>> AVI: Fordi du Гёnsker, at stГёrrelsen pГҘ en fil, right?
>> JASON HIRSCHHORN: SГҘ det vil sandsynligvis ikke giver os stГёrrelsen af вҖӢвҖӢden faktiske
fil i bytes.
SГҘ hvad andet kunne vi gГёre?
Hvad er en anden type loop?
Eller skal vi holde fast i for-lГёkken?
>> STUDENT 20: Kan du en while-lГёkke?
Og sГҘ, hvad du ville gГёre, er I ville i stedet -
fordi vi har en char * til filen.
SГҘ hvis vi bare holde forГёgelse at indtil vi ville finde NULL tegn pГҘ
i slutningen af вҖӢвҖӢdet?
Eller nej, er, at ikke hvordan filer fungerer?
>> JASON HIRSCHHORN: SГҘ vi kan beholde forГёgelse af char *
indtil vi finder NULL -
>> STUDENT 20: VГҰsentlige holde ud tegn for tegn, indtil vi ramte
slutningen af вҖӢвҖӢfilen.
>> JASON HIRSCHHORN: Ja.
SГҘ det er hvad vi Гёnsker at gГёre.
Vi Гёnsker at holde lГҰsning, karakter af tegn, indtil vi kommer til
slutningen af вҖӢвҖӢfilen.
>> STUDENT 20: Ja.
Find -
hvad er enden eller stopskilt ved afslutningen af вҖӢвҖӢen tekstfil.
>> JASON HIRSCHHORN: OK.
SГҘ nГҘr vi kommer til slutningen af вҖӢвҖӢfilen - hvordan kan vi vide, vi har nГҘet
slutningen af вҖӢвҖӢen fil?
Hvis jeg ringer -
sГҘ lad os trГҰde et skridt tilbage.
Hvad er en funktion?
Lad os gГҘ til denne linje lige her.
LГҰs fra kildefilen.
Hvem kan give mig denne linje kode?
>> STUDENT 21: fscanf?
>> JASON HIRSCHHORN: fscanf.
OK.
Hvad hvis jeg Гёnsker at lГҰse, meget specifikt en byte?
>> STUDENT 21: Jeg ved det ikke.
>> JASON HIRSCHHORN: OK.
Endnu enklere end fscanf - hvad er en -
Jeg Гёnsker at lГҰse fra en kilde fil?
LГҰse fra en kildefil.
Hvad er en funktion - ja.
>> STUDENT 22: Det er fread?
>> JASON HIRSCHHORN: fread.
Jeg tror, вҖӢвҖӢlad os holde fast i at man for nu.
Hvilken slags argumenter betyder fread tage?
>> STUDENT 22: Sandsynligvis den filtype, og derefter placering i filen?
>> JASON HIRSCHHORN: Hvad kan jeg skrive her at finde ud af, hvilken type argumenter
fread tager?
>> FLERE STUDERENDE: Man fread.
>> JASON HIRSCHHORN: Man fread og fwrite.
Ligner de hГҰnge ud sammen.
SГҘ fread tager, hvor mange argumenter?
>> STUDENT 23: Four.
>> JASON HIRSCHHORN: Det tager fire argumenter.
Det tager en pointer, en stГёrrelse, og at ting, som er underligt, og nogle fil.
OK?
Lad os lГҰse om det lige her.
"Funktionen fread lГҰser n memb elementer af data, hver stГёrrelse bytes
lang, fra strГёmmen der peges pГҘ af streame, opbevare dem pГҘ det sted,
afgivet pointer. "
>> SГҘ fire argumenter.
Hvorfor kan jeg ikke bare kopiere det, og indsГҰt den lige her.
OK.
SГҘ der kan begynde at udfylde disse argumenter til mig?
Avi.
>> AVI: Tag tomrum.
SГҰt bare src.
Tag pointer og stjernen.
Put src.
SГҘ -
>> JASON HIRSCHHORN: SГҘ jeg har tГҰnkt mig at stoppe du der, fordi det er forkert.
Du har ret med src, men hvor skal src hen?
>> [indskyde STEMMER]
>> JASON HIRSCHHORN: Det bГёr gГҘ over her.
Det er src - vores src er en type.
Lad os se her.
Dette beder om en type FIL *, vi faktisk normalt se dem sГҘdan.
SГҘ dette er at bede om et argument for filtypen * kaldet strГёm, der er src.
OK?
>> Hvilken stГёrrelse af ting at gГёre vi Гёnsker at lГҰse?
Jeg gav dig dette i beskrivelse af problemet.
>> STUDENT 24: En byte ad gangen.
>> JASON HIRSCHHORN: Гүn byte.
Hvor stor er en byte?
Dens stГёrrelse er i bytes, sГҘ hvad kan jeg sГҰtte lige der?
>> STUDENT 25: One.
>> JASON HIRSCHHORN: One.
Right.
Dens stГёrrelse er i enhed byte, sГҘ 1 er 1 byte.
Hvor mange Гёnsker jeg at lГҰse pГҘ et tidspunkt.
>> STUDENT 26: One?
>> JASON HIRSCHHORN: En ting.
Jeg Гёnsker at lГҰse en ting af stГёrrelse 1, en bid ad gangen.
Og hvor skal jeg sГҰtte det, nГҘr jeg lГҰse det?
>> STUDENT 27: Destination?
>> JASON HIRSCHHORN: SГҘ jeg kan ikke sГҰtte det lige ind destination.
>> STUDENT 28: Du kommer put det ind i en tredje pointer?
>> STUDENT 27: til destinationen.
>> JASON HIRSCHHORN: OK.
Ja.
>> STUDENT 29: Du kan erklГҰre noget til fungere som en midlertidig oplagring tidligere.
>> JASON HIRSCHHORN: OK.
Giv mig den.
>> STUDENT 29: En anden fil pointer, mГҘske?
>> JASON HIRSCHHORN: OK.
SГҘ dette er ugyldig stjerne -
det er en type tomrum stjerne, sГҘ det ikke vГҰre en fil pointer.
Og hvis jeg lГҰser en byte, hvor ville vГҰre et godt sted
at gemme en byte?
>> STUDENT 29: Et array?
>> JASON HIRSCHHORN: An array.
OK.
Og hvad der ellers er noget, der er bare stГёrrelse en byte?
>> STUDENT 30: Et char *?
>> STUDENT 29: Ja.
>> JASON HIRSCHHORN: En char * er ikke Г©n byte.
>> STUDENT 29: En char.
>> JASON HIRSCHHORN: En char er en byte.
Right?
SГҘ lad os kalde denne buffer er en generisk betegnelse for disse ting til at gemme
noget midlertidigt.
SГҘ jeg skabe en buffer.
Right?
Men det tager en void *.
SГҘ mГҘske du har ret, at det bГёr vГҰre en buffer pГҘ stГёrrelse 0.
SГҘ det gemmer en -
hГёjre.
>> Fordi denne ret her - char buffer er et tegn, men
det tager en void * -
en pointer.
SГҘ jeg kunne gГёre dette og nu puffer er en pointer.
Hvad andet kunne jeg gГёre?
>> STUDENT 31: SГҰt en stjerne ud til char.
>> JASON HIRSCHHORN: Jeg kunne har skabt det char *.
OK.
Hvad er en anden ting, jeg kunne gГёre?
Eller lad os gГҘ med denne ene.
Char * buffer, sГҘ hvad sГҰtter jeg her?
>> STUDENT 31: Buffer.
>> JASON HIRSCHHORN: Buffer.
Buffer er en pointer til en char.
Og i den placering, vi sГҰtter en byte noget, vi har lГҰst.
Ja.
Avi.
>> AVI: Bare et hurtigt spГёrgsmГҘl.
Гҳnsker du at allokere buffer?
>> JASON HIRSCHHORN: Hvem kan besvare dette spГёrgsmГҘl?
>> STUDENT 32: NГҘ, det gГёr ikke rigtig punkt til noget lige nu, sГҘ -
>> JASON HIRSCHHORN: Men gГёr vi Гёnsker at allokere det?
>> STUDENT 32: Hvis du skulle gГёre det pГҘ den mГҘde, tror jeg, ja, fordi du havde behov for
nogle sted for det til at pege pГҘ.
>> JASON HIRSCHHORN: Har vi nГёdt til at allokere det?
>> STUDENT 33: Hvis du vil bruge den uden for slГёjfen.
>> JASON HIRSCHHORN: Skal vi bruge den uden for loop?
>> STUDENT 34: Ja.
>> STUDENT 35: Vent.
Гҳnsker vi at erklГҰre den i slГёjfen til ud?
>> JASON HIRSCHHORN: SГҘ jeg gГҰtte, vi har nogle pseudo MENS lГёkke her, at vi er
forsГёger at regne ud, at Vi har ikke fГҘet til endnu.
Vi behГёver ikke at allokere den.
Vi opererer i hovedsagen, er det kun gГҘr til brug inden for denne lГёkke.
Det behГёver ikke at eksistere uden for dette.
>> SГҘ det kan vГҰre en lokal variabel.
Du har en pointer til en lokal variabel.
>> STUDENT 36: Men det er ikke peger pГҘ noget.
>> JASON HIRSCHHORN: Nej, det er ikke initialiseres til noget.
Men vi kommer ikke til at bruge det ogsГҘ.
Vi kommer til at sГҰtte noget i det fГёrste gang vi bruger den.
SГҘ der synes OK.
SГҘ vi har ikke brug for malloc her.
Og jeg synes, det er OK, som det er.
OK.
Vi har den fread linje.
Lad os gГёre den nГҰste linje.
>> Hvis vi Гёnsker at skrive til en fil, hvad er en god funktion at bruge til at gГёre det?
>> STUDENT 37: fwrite?
>> STUDENT 38: fprintf?
>> JASON HIRSCHHORN: fprintf er Г©n.
Hvad er en anden?
>> STUDENT 39: fwrite.
>> JASON HIRSCHHORN: fwrite.
Og til vores formГҘl, fwrite, som vi sГҘ her, er
sandsynligvis det bedste valg.
Det tager fire argumenter sГҘ godt.
Nishant, kan du give me argumenterne?
>> Nishant: Den fГёrste ens igangvГҰrende at vГҰre lige puffer.
>> JASON HIRSCHHORN: OK.
>> Nishant: Den anden ens bare at vГҰre 1.
Tredje man kommer til at vГҰre 1.
Og den fjerde bliver DST.
>> JASON HIRSCHHORN: Er der nogen, der har spГёrgsmГҘl om denne linje?
Det ser godt ud.
OK.
SГҘ nu ser det ud som den ene ting, vi er mangler - faktisk, lad os skrive
denne sidste linje.
Luk filerne.
Hvem kan afslutte os op skrivning disse to sidste linjer?
Ja.
Undskyld, hvad er dit navn?
>> LUCY: Lucy.
>> JASON HIRSCHHORN: Lucy.
>> LUCY: fclose src og derefter fclose destination.
>> JASON HIRSCHHORN: fclose, ГҘben parentes, src, tГҰtte paren, semikolon.
Og fclose -
ja?
>> LUCY: Г…ben parenteser, dst og derefter semikolon.
>> JASON HIRSCHHORN: Great.
Og hvad skal jeg medtage i slutningen?
>> LUCY: Return 0.
>> JASON HIRSCHHORN: Return 0.
Skal jeg?
Bare et spГёrgsmГҘl.
Har vi nГёdt til at medtage tilbagevenden 0?
>> FLERE STUDERENDE: Nej.
>> JASON HIRSCHHORN: Nej.
Main gГёr det automatisk hvis du kommer til enden.
Men jeg synes det er rart at medtage den eksplicit.
IsГҰr nГҘr vi vender tilbage en anden ting i hele programmet.
OK.
Dette er, hvad vi mangler -
MENS hvad?
Hvem kan tГҰnke pГҘ nogle -
har en fornemmelse af, hvad tingene kunne gГҘ derind?
Selvom det er bare i nogle pseudokode lignende sprog?
>> Hvad er vi egentlig - hvad Гёnsker vi at gГҘ, indtil?
Ja, Lucy.
>> LUCY: Slutningen af вҖӢвҖӢfilen.
>> JASON HIRSCHHORN: Slutningen af вҖӢвҖӢfilen.
SГҘ hvad mener du med slutningen af вҖӢвҖӢfilen?
>> LUCY: NГҘr du kommer til slutningen af вҖӢвҖӢfilen, stop.
>> JASON HIRSCHHORN: OK.
SГҘ nГҘr vi nГҘr til slutningen af вҖӢвҖӢfilen.
Hvordan kan vi vide, nГҘr vi har nГҘet slutningen af вҖӢвҖӢfil?
>> STUDENT 40: Jeg tror buffer vil blive sat til NULL.
>> STUDENT 41: Buffer er erklГҰret inde i slГёjfen.
>> JASON HIRSCHHORN: SГҘ du tror buffer vil blive sat til NULL.
Hvorfor skulle buffer sГҰttes til NULL?
>> STUDENT 40: Fordi nГҘr du fread, forsГёger du at sГҰtte
intet ind i buffer.
>> JASON HIRSCHHORN: OK.
SГҘ du tГҰnker fread -
nГҘr vi har nГҘet slutningen af вҖӢвҖӢden fil, hvad der er fread gГёre?
Jeg tror, вҖӢвҖӢdet er spГёrgsmГҘlet vi er nГёdt til at regne ud.
Hvad betyder fread gГёre?
Er det sat NULL i buffer, eller gГёr den noget andet?
Hvordan kan vi regne ud, hvad det betyder?
>> STUDENT 42: Man.
>> JASON HIRSCHHORN: Man.
SГҘ lad os se herovre.
Retur vГҰrdi.
Den succes, fread og fwrite returnere antallet af elementer lГҰses eller skrives.
Dette tal er lig med antallet af bytes overfГёres kun, nГҘr stГёrrelsen er 1.
Hvis der opstГҘr en fejl, eller afslutningen af вҖӢвҖӢden fil er nГҘet, er returvГҰrdien en
kort post count eller 0.
>> SГҘ for vores formГҘl, hvis fread afkroge slutningen af вҖӢвҖӢfilen, og lГҰser fra
I slutningen af вҖӢвҖӢfilen, er der intet tilbage at lГҰse, hvad det kommer til at vende tilbage?
>> STUDENT 43: Zero?
>> JASON HIRSCHHORN: Hvad?
>> STUDENT 43: Zero?
>> JASON HIRSCHHORN: Zero.
Det kommer til at returnere nul.
SГҘ vi ved, at fread, nГҘr vi har nГҘet enden af вҖӢвҖӢfilen, gГҘr
for at vende tilbage til nul.
Hvordan kan vi bruge det til vores fordel?
>> AVI: Du kan erklГҰre en variabel udenfor af lГёkken kaldes check.
Hvis kontrol lig -
for nu - Г©n.
>> JASON HIRSCHHORN: OK.
>> AVI: Og sГҘ kan du sГҰtte en IF erklГҰring lige efter fread siger, hvis
fread lig nul -
no.
>> JASON HIRSCHHORN: Hvem kan hjГҰlpe Avi ud?
>> AVI: Hvad er vГҰrdien returneret af fread?
>> JASON HIRSCHHORN: Vi har lige gik over.
>> AVI: Hvordan du reprГҰsenterer det?
>> JASON HIRSCHHORN: SГҘ det vender tilbage - lad os se op her - det returnerer en
size_t, der i det vГҰsentlige et heltal.
SГҘ det returnerer et heltal.
Og i vores tilfГҰlde, vil det returnere 1 eller 0 -
1, hvis den lГҰst Г©n ting - en byte, og 0, hvis vi har nГҘet slutningen.
SГҘ hvis fread -
ja?
>> STUDENT 45: Kan du ikke bare sГҰtte den fulde fread (buffer, 1, 1, src) i
mens loop?
>> JASON HIRSCHHORN: SГҘ du foreslГҘr gГёre dette i der?
>> [indskyde STEMMER]
>> JASON HIRSCHHORN: Hold ud.
SГҘ vi befri af.
SГҘ du foreslГҘr at sГҰtte ind der? fread
Hvad skal vi ogsГҘ flytte hvis du Гёnsker at gГёre det?
>> STUDENT 45: buffer udenfor.
>> JASON HIRSCHHORN: Vi bГёr ogsГҘ flytte ud af dette her.
>> STUDENT 45: Men er der konstant flytte det fremad?
>> [indskyde STEMMER]
>> JASON HIRSCHHORN: OK.
SГҘ dette er hvad Okshar foreslГҘet.
Vi skaber vores buffer.
Vi MENS fread, sГҘ vi fwrite.
Tanker om dette?
>> STUDENT 46: Mit eneste spГёrgsmГҘl er, ville det faktisk udfГёre kommandoen fread?
>> JASON HIRSCHHORN: Great spГёrgsmГҘl.
NГҘr du lГҰgger et funktionskald inde i en tilstand, gГёr det
funktionskald udfГёre?
Vi har set eksempler pГҘ dette fГёr.
Right?
>> STUDENT 46: OK.
Ja.
SГҘ det gГёr udfГёre.
>> JASON HIRSCHHORN: Vi har set tingene som fГёr, hvor vi har en
funktionskald indersiden af вҖӢвҖӢen tilstand.
Betyder det funktionskald udfГёre?
Ja.
SГҘ svaret er ja.
Denne funktion indkaldelse vil udfГёre.
Men igen, det er hvad vi Гёnsker?
>> Hvad er en mГҘde, vi kunne regne ud, hvis det er hvad vi Гёnsker?
>> FLERE STUDERENDE: KГёr det?
>> JASON HIRSCHHORN: Vi kunne kГёre den.
Men fГёr vi gГёr det, vi kunne ogsГҘ rГҰsonnere gennem dette.
Hvis -
sige, at vi har en byte i vores fil, vil vi komme til her,
vi fГҘr denne kode.
Dette vil kГёre.
fread vil returnere en byte og gemme det i bufferen.
Og det vil vurdere til 1, hГёjre, efter at han vender tilbage 1.
>> SГҘ mens 1.
Betyder det, at koden inde while-lГёkken vil kГёre?
>> STUDENT 47: Ja.
Det er sandt.
>> JASON HIRSCHHORN: Ja.
1 er sandt.
Det er ikke 0.
SГҘ kode inde her, vil udfГёre.
SГҘ vi vil skrive det.
Vi flytter tilbage til dette linie igen.
Nu har vi -
vi er i slutningen af вҖӢвҖӢvores fil.
Vi lГҰser fra slutningen af вҖӢвҖӢvores fil, fordi vi kun havde Г©n byte i det.
>> Fread returnerer 0, gemmer noget i puffer.
Jeg ved ГҰrligt talt ikke, hvad det gemmer i buffer.
Vi kunne sikkert se op at se, hvad det gГёr.
At jeg helt ГҰrligt ikke kender.
Vi ved ikke, hvem bekymrer sig, hvad det gemmer i buffer?
Men det vender tilbage 0.
Og vil mens 0 eksekvere?
>> MENS 0 ikke vil udfГёre.
SГҘ rykker vi ned her.
SГҘ lad os fГҘ en hГҘndsoprГҰkning, hvis dette er den kode, vi skal kГёre, eller hvis vi
skal gГёre ГҰndringer fГёrst.
SГҘ hvis du tror - du er nГёdt til at stemme.
Hvis du synes, vi skal kГёre denne kode som det er, skal du hГҰve din hГҘnd.
>> OK.
Der er en -
har du et spГёrgsmГҘl, bekymring?
Ja.
>> STUDENT 48: NГҘr vi bevГҰger buffer uden for lГёkken, gГёr vi
nГёdt til at allokere det?
>> JASON HIRSCHHORN: Great spГёrgsmГҘl.
NГҘr vi bevГҰger buffer uden for loop, vi er nГёdt til at allokere det?
Det er et omfang spГёrgsmГҘl.
Hvis vi initialisere buffer uden af denne slГёjfe, vil det findes
indersiden af вҖӢвҖӢloop?
>> FLERE STUDERENDE: Ja.
>> JASON HIRSCHHORN: Ja.
Dens anvendelsesomrГҘde dГҰkker indersiden af вҖӢвҖӢlГёkken, og virkelig, noget under det inde
af denne kode, herunder ting inde her.
SГҘ vi behГёver ikke at allokere den.
Det er en lokal variabel, og dens omfang stadig indeholder slГёjfen.
>> STUDENT 49: Har vi brug for at frigГёre det?
>> JASON HIRSCHHORN: Har vi nГёdt til at fri buffer?
>> STUDENT 49: Ja, hvis vi ikke gГёr malloc.
>> JASON HIRSCHHORN: Har vi nГёdt til at fri buffer?
Vi gГёr ikke.
Igen, det er en lokal variabel, sГҘ vi ikke behГёver at frigГёre det.
OK.
Lad os se hvad der sker.
SГҘ det er initialiseret.
Det var, hvad noget, Marcus foreslog tidligere.
SГҘ vi har denne fejl, variabel buffer bliver initialiseret, nГҘr det anvendes her.
>> Hvordan kan vi lГёse dette?
>> STUDENT 50: malloc det?
>> STUDENT 51: Lig NULL?
>> STUDENT 52: Sig buffer lig NULL.
>> JASON HIRSCHHORN: OK.
Ser godt ud.
Vi har det nu.
Lad os skabe noget at forsГёge at kopiere.
SГҘ vi har vores tekstfil.
Hvordan kan vi kГёre dette program?
Ja.
>> STUDENT 53: Du kan gГёre dot slash cp, test.txt.
Og sГҘ kan du navngive en anden fil som den gemmer i.
>> JASON HIRSCHHORN: OK.
Vi kalder det out.txt.
Cool?
Seg fejl.
Tanker om seg skyld?
Dette er stor.
Hvordan kan vi finde ud af, hvor den seg fejlen er?
Hvad?
>> STUDENT 54: gdb.
>> JASON HIRSCHHORN: gdb.
Vi kГёrer gdb ved at skrive gdb dot skrГҘstreg, navnet pГҘ vores program.
Ingen kommandolinjeargumenter der.
Vi kommer til at sГҰtte en breakpoint pГҘ main.
Hvis jeg Гёnsker at starte gdb, hvad gГёr jeg?
>> STUDENT 55: R.
>> JASON HIRSCHHORN: R. Og hvad sГҘ?
>> STUDENT 55: Argumenterne?
>> JASON HIRSCHHORN: SГҘ kommandolinje-argumenter.
Lad os gГҘ igennem.
N bare at tage mig linje for linje.
Jeg har tГҰnkt mig at gГҘ, indtil Jeg fГҘr min seg fejl.
Der er min seg fejl.
Det ligner fread forГҘrsaget min seg fejl.
Jeg kender fread forГҘrsagede min seg skyld, fordi det var den
linje, vi lige henrettet.
>> Og det eneste, der var sker i denne linje -
to ting blev sker.
Fread foregik, og sГҘ var vi laver nogle mens du tjekker.
Jeg er villig til at vГҰdde pГҘ, at WHILE kontrol ikke var ГҘrsag min seg fejl.
Mest sandsynligt, var fread forГҘrsager min seg fejl.
Jeg kan ogsГҘ se noget her, memcopy.
>> Hukommelse kopi.
Lyder som at flytte hukommelse fra ene sted til det andet.
Lyder som noget, der ville ske i fread, mГҘske nogle hukommelse
flytter fra her til her.
Lad os gГҘ igennem det igen.
Hvordan starter jeg det over og kГёre det igen?
Ja.
>> STUDENT 56: Har du brug for at sГҰtte et og-tegn fГёr buffer?
>> JASON HIRSCHHORN: So-tegnet fГёr buffer ville give mig adressen pГҘ
puffer, som er en char *.
Lad os lГёbe igennem en gang mere.
Hvordan kГёrer jeg igennem det en gang til?
>> STUDENT 57: Kan du bare skriv kГёre igen?
>> JASON HIRSCHHORN: Bare skriv kГёre igen.
SГҘ vi kommer ikke til at udfГёre denne linje.
SГҘ buffer er en NULL-pointer.
Ret?
Det peger pГҘ - lad os se.
Hvis vi har vores -
tegne et hurtigt billede af det.
Kan alle se, om Jeg skriver herovre?
>> SГҘ i stakken, vi har en lokal variabel, og det hedder buffer, og
det er en pointer til en char.
Hvilken adresse er denne char pГҘ?
>> STUDENT 58: 0x0.
>> JASON HIRSCHHORN: Right.
Det er, hvad det er.
I her inde puffer, lagres 0x0.
Det er, hvad vi har - det setup, vi har lige nu.
SГҘ denne linje, fread, sГҰtter noget fra kilde, hvor?
Ind i denne kasse eller denne boks?
Hvilken kasse?
Venstre kasse eller hГёjre kasse?
Denne ret kassen.
>> Det fГёlger markГёren, og sГҰtter det i her.
NГҘr vi prГёve at rГёre hukommelse pГҘ placering 0, hvad fГҘr vi?
En segmentering fejl.
Det er den fejl, vi har lige nu.
Ja.
>> STUDENT 59: Har du ikke at sГҰtte stjerne buffer?
Eller nej?
For fread?
>> JASON HIRSCHHORN: So fread tager en pointer.
SГҘ det gГҘr i buffer.
Og sГҘ vil de-henvisning det andet sted inde fread.
Men igen, sГҘ vi tager det en pointer.
Vi behГёver ikke at passere den stjerne buffer.
Det ville vГҰre forbi det, hvad er her.
Og det ville sandsynligvis give os en fejl fordi vi er de-henvisninger det.
>> Right?
NГҘr vi de-henvisningen denne pointer, nГҘr vi forsГёger at fГҘ adgang til denne placering,
vi fГҘr en fejl - vores segmenteringsfejl.
SГҘ -
oops.
Vi kommer til at holde op ud af gdb.
Vores linje -
vores problem - er ret her pГҘ denne linje.
Og det er et problem, fordi denne linje.
>> Hvordan kan vi skabe en boks, er tilgГҰngelig i fread.
Right?
Vi er nГёdt til at oprette en boks, der er en byte store, stГёrrelsen af вҖӢвҖӢen char.
Men vi har brug for, at feltet for at vГҰre tilgГҰngelige nГҘr denne funktion udfГёrer.
SГҘ hvor -
ja.
Nogen idГ©er?
>> STUDENT 60: Bare sГҰt den som en tilfГҰldig karakter.
Bare gГёr char buffer ligemГҰnd tegnet.
Og sГҘ, nГҘr du har buffer der -
>> JASON HIRSCHHORN: Vent.
Char buffer?
SГҘ ingen stjerne?
>> STUDENT 60: Ja.
Tag stjernen.
Lig en tilfГҰldig karakter.
>> JASON HIRSCHHORN: OK.
SГҘ giv mig en.
>> STUDENT 60: Ligesom en eller noget.
Og sГҘ nГҘr du har buffer der bruger du en -
>> STUDENT 61: Star?
Г…h nej, det tegnet.
>> STUDENT 60: Brug tegnet.
>> JASON HIRSCHHORN: OK.
Og hvad i fwrite?
>> STUDENT 60: Brug tegnet igen.
>> JASON HIRSCHHORN: Okay.
SГҘ din idГ© er, at vi skaber en char og sГҰtte noget i det, og derefter
skrive til denne char.
>> STUDENT 60: Ja.
>> JASON HIRSCHHORN: Hvad tror folk?
>> STUDENT 62: Det er indviklede.
>> JASON HIRSCHHORN: OK.
Lad os trГҰkke det ud.
SГҘ denne gang, jeg har tГҰnkt mig at trГҰkke denne i rГёd pГҘ stakken her, og sГҘ vi
vil have -
ooh!
Undskyld.
SГҘ denne gang har vi noget, der hedder buffer, og det er pГҘ stakken.
Ret?
Og vi gemmer i det en, i fГёrste omgang.
>> SГҘ har vi vores opfordring til fread.
Hvad fread gГёr, er det tager en byte fra vores fil og sГҰtter det et eller andet sted.
Det sГҰtter det i uanset ting peger pГҘ.
NГҘ, fГёr vi havde denne adresse -
0x0.
Nu hvad adresse har vi?
>> STUDENT 63: Whatever adresse buffer.
>> JASON HIRSCHHORN: Whatever adresse buffer.
Det er sandsynligvis vil vГҰre noget lignende.
Sandsynligvis kommer til at starte med en b og en f, og derefter har seks andre
hexadecimale cifre.
Betyder ikke noget.
Nogle adresse.
Og vi passerer denne adresse i.
>> Og vi kommer til at sГҰtte vores ene byte ting pГҘ denne adresse.
SГҘ vi kommer til at sГҰtte vores ene byte ting herinde.
Og sГҘ vil vi skrive fra hvad der er nogensinde herinde.
Er der nogen har nogen spГёrgsmГҘl om det?
Hvem tror denne kode vil arbejde?
>> LГёft din hГҘnd, hvis du tror denne kode vil arbejde.
Du er nГёdt til at tage et standpunkt.
Og hvem tror denne kode vil ikke arbejde?
LГёft din hГҘnd.
Alle andre bГёr vГҰre hГҰve deres hГҘnd.
OK.
Michael, hvor stГҘr du?
>> MICHAEL: Jeg kan ikke afgГёre.
Slags i midten.
>> JASON HIRSCHHORN: Du er i midten.
VГҰlg en.
>> MICHAEL: Jeg har tro og siger, at det vil virke.
>> JASON HIRSCHHORN: OK.
Du har tro og sige det virker?
Hvad er der sket?
>> [indskyde STEMMER]
>> JASON HIRSCHHORN: Ingen seg fejl.
Hvordan kan vi kontrollere, om to ting er lige?
To filer er ens.
>> STUDENT 64: Diff.
>> JASON HIRSCHHORN: Diff.
Diff checks for forskellene mellem to filer, og hvis det returnerer
ingenting, de er identiske.
Og hvis vi ГҘbner op, fГҘr vi vores fil.
SГҘ det var den rigtige lГёsning.
Lad os se tilbage pГҘ det en gang mere.
Vi har faktisk ikke engang nГёdt til at initialisere den.
>> Det ville nok se lidt renere, hvis du ikke har bragt
noget tilfГҰldigt derinde.
Pointen er, du behov for at skabe nogle plads til at gemme noget fra
fread og tage noget ud af fwrite.
Og at ting skulle vГҰre enten en lokal variabel pГҘ stakken - du
kunne have malloc'd noget plads.
>> SГҘ vi kunne faktisk have skriftlig malloc her, og
der ville have fungeret.
Og sГҘ ville vi have vГҰret opbevaring vores ting et sted pГҘ bunke.
Men det er faktisk, sandsynligvis, den mest elegante lГёsning.
Bare skabe noget plads pГҘ stakken for disse ting til at gГҘ.
>> Jeg ville have to andre kommentarer.
Hvis du skulle tage tur i dette, og derefter fГҘ scoret pГҘ dette, mine kommentarer
ville vГҰre som fГёlger.
Disse 1 er her, for mig, se ligesom magiske tal.
Denne 1, i form af fread, giver mening.
Det er antallet af ting, at lГҰse eller skrive.
>> Men denne ene lige her burde sandsynligvis vГҰre noget andet.
SГҘ hvad er en lГёsning?
>> STUDENT 65: stГёrrelse byte.
>> JASON HIRSCHHORN: Ligesom det?
>> STUDENT 65: stГёrrelse char.
>> JASON HIRSCHHORN: StГёrrelse af char.
Ja, byte er ikke en type.
SГҘ stГёrrelsen af вҖӢвҖӢchar vГҰrker.
Vi kunne have pГҘ toppen af vores kode, # definerede det.
Kaldet noget BYTE og det er virkelig en char.
Faktisk en endnu bedre tilgang kunne have vГҰret det -
uint.
Nogen der ved hvad det er?
>> Undskyld.
Jeg har det baglГҰns.
Vent, nej.
Hvilken vej gГҘr det hen?
Nogen der ved hvad det er?
Ja.
>> STUDENT 67: formodes at hjГҰlpe standardisere pГҘ tvГҰrs af systemer ting,
har - ligesom unsigned heltal der har 8 byte?
>> JASON HIRSCHHORN: Det er helt rigtigt.
PГҘ forskellige maskiner, stГёrrelsen af вҖӢвҖӢen char -
normalt ikke en char.
Bogstaver er normalt en byte.
Men stГёrrelsen af вҖӢвҖӢandre datatyper er forskellige stГёrrelser pГҘ en 32-bit maskine
versus en 64-bit maskine.
En uint8_t er altid 8 bit -
altid en byte.
>> Og jeg har brug for at medtage, at standard int header fil.
SГҘ nu, dette ville have sandsynligvis vГҰret den bedste mГҘde at skrive denne kode.
SГҘ jeg slippe af med de magiske tal.
Og jeg har ogsГҘ en mere logisk skrive til buffer.
Det er ikke blot en char, er det en byte, hvilket er, hvad vi forventer det at vГҰre.
>> Og heroppe, vi har faktisk vГҰret lidt mere robust.
Vi ikke kalde det en char, som -
mГҘske, hvem ved - kunne vГҰre en anden stГёrrelse pГҘ forskellige maskiner.
Vi faktisk siger det er prГҰcis en byte, altid, uanset hvad.
Og hvis vi ser her, gГёr vi cp.
Uh-oh.
Hvad er der sket?
>> STUDENT 68: Det kunne vГҰre tГҰndt.
>> JASON HIRSCHHORN: Hvad?
>> STUDENT 69: Er det?
>> STUDENT 70: Du har ikke definere det som en type.
>> STUDENT 71: men det bГёr skal defineres i standarden.
>> STUDENT 72: Hvad sker der?
>> STUDENT 73: BГёr definere vГҰre alle hГҰtter?
>> JASON HIRSCHHORN: SГҘ det er ikke # define.
Faktisk, i dette tilfГҰlde, er jeg vil bruge typedef.
Fordi vi bruger det som en type pГҘ Г©t sted.
SГҘ i dette tilfГҰlde, vi rent faktisk Гёnsker at typedef ligesom vi udskriver en ny type
byte, og det er det vГҰsentlige, dette.
Det er en smule anderledes end # define.
>> Og nu, vores kode fungerer perfekt.
SГҘ igen, # define tager noget, erstatter det overalt
med den anden ting.
Det er bare en makro -
stenografi at slippe af magiske tal.
Men i dette tilfГҰlde, fordi vi er bruge det som en type -
lige her -
for at dette skal fungere, er vi nГёdt at typedef hvad byte er.
>> Og vi definerer det lige her.
Det er ikke en struct, det er faktisk bare en usigneret heltal.
Det er Г©n byte lang.
Denne kode vil vГҰre tilgГҰngelig online, og du bГёr alle have det lige nu.
>> SГҘ vi har -
perfekt -
13 minutter tilbage til at gГҘ lГёbet problem sГҰt 5.
Jeg Гёnsker at gГҘ gennem copy.c sammen, og sГҘ vil vi tale kort
om de andre dele af problemet indstillet.
SГҘ lad mig trГҰkke op copy.c.
Og cool ting er, vi har faktisk allerede skrevet en masse af denne kode.
>> Den kode, vi skrev bogstaveligt talt bare kom ud af her, da jeg var
skriver dette pГҘ min egen.
Men dette er copy.c, danner grundlaget for de to fГёrste dele af
problemet indstillet til whodunit.c, som du nГёdt til at skrive, og resize.c.
Recover.c, som er den tredje og sidste del af problemet sГҰt, er ikke
baseret ud af denne fil.
>> Du vil fГҘ brug for at skrive, at filen vi giver dig en skabelon til at
fil, men det har intet at gГёre med copy.c.
Men fordi copy.c er grundlaget for de to fГёrste dele, vi kommer
til at gГҘ igennem det nu, sГҘ du har en god fornemmelse af, hvad det gГёr.
>> Og bemГҰrkninger giver noget af det vГҰk.
Vi har allerede skrevet nogle af dette.
FГёrst gГёr vi sikker vi fГҘr tre argumenter.
NГҰste, vi huske filnavnet.
SГҘ vi sprunget over dette trin, nГҘr vi kodet vores ting -
nГҘr vores cp.
Men her er de gГёr det en smule renere.
>> De kontrollerer, at begge filer er gode, i
Ud over at ГҘbne dem.
Vi skrev alle denne kode lige nu, sГҘ jeg er ikke kommer til at dvГҰle ved denne kode.
NГҰste er nogle ting, der er specifikke for de typer af filer, vi bruger, som
er bitmap-filer.
Bitmap-filer har nogle metadata forbundet med dem.
>> SГҘ de fГёrste par bytes fortГҰlle dig om filen.
De er ikke farver pixel i billedet.
De fortГҰller dig om filen.
Og hvis du lГҰser igennem problemet sГҰt, vil du have meget mere information
om, hvilke typer af metadata strukturer indgГҘr med bitmaps.
>> Men det er derfor vi har denne fГёrste sГҰt - denne kode lige her.
Vi lГҰser metadata -
to stykker af metadata - filen header og info header.
Og vi tjekker nogle dele af den til sГёrg for at det er en sand bitmap-fil
fГёr du fortsГҰtter.
>> Og igen, disse er detaljer, som vi behГёver ikke at gГҘ ind i nu.
Hvis du lГҰser gennem problemet sГҰt, du vil forstГҘ disse.
Lang historie kort, er disse bare siger, dette er en bitmap-fil, og
bekrГҰfter, at.
>> NГҰste, vi skriver dem til ud-fil.
Vi ser, at her.
Vi skriver til den ud pointer.
NГҰste, vi bestemme polstring.
SГҘ igen, som er sГҰregne med en bitmap-fil, nogle linjer omfatter
polstring i slutningen.
Og hvis du lГҰser igennem problemet sГҰt, du vil lГҰre mere om polstring.
Dette er formlen for at finde polstring.
>> Vigtigt at huske pГҘ -
nГҘr du ГҰndrer stГёrrelsen af вҖӢвҖӢen bitmap fil, polstring ГҰndringer.
NГҘr du ГҰndrer stГёrrelsen pГҘ en fil, polstring ГҰndringer.
Det er aldrig kommer til at vГҰre stГёrre end 3 -
det vil vГҰre 0 til 3 inklusive.
Men nГҘr du ГҰndrer stГёrrelsen pГҘ noget, polstring ГҰndringer.
>> Hvis jeg kun har Г©n pixel i den pГҘgГҰldende rГҰkke, jeg brug for tre bytes af polstring, fordi
hver rГҰkke skal vГҰre et multiplum af fire bytes lГҰnge i en bitmap-fil.
Men hvis jeg fordoble det, at gГҘ fra Г©n pixel til to pixel, som hver,
lad os sige, er en byte, sГҘ jeg har brug for to bytes af polstring til at gГёre
der er lig med fire.
>> SГҘ nГҘr jeg ГҰndre stГёrrelsen pГҘ noget, Jeg har brug for at ГҰndre belГёbet
polstring jeg har.
Giver det mening for alle?
DernГҰst vi gentage over hver rГҰkke, eller gennem alle rГҰkker.
Og sГҘ skal vi gentage gennem hver kolonne i hver rГҰkke.
Vi behandler denne bitmap ligesom et gitter, ligesom vi har behandlet
bestyrelsen i 15..
>> Ligesom vi behandlet murstenene nГҘr vi trykt dem pГҘ skГҰrmen.
Et gitter af rГҰkker og kolonner.
SГҘ - vi oplevede dette.
Vi har faktisk lige kodet dette.
Vi skabte nogle midlertidige opbevaring.
Vi lГҰser i der, og derefter vi skriver det ud.
Dette er prГҰcis, hvad vi lige gjorde.
>> DernГҰst fordi jeg sagde hver linje ender pГҘ polstring, vi
springe over, at polstring -
den gamle polstring.
Og sГҘ tilfГёjer vi det tilbage.
I dette tilfГҰlde, vi skaber nГёjagtig den samme fil.
Vi er bare kopiere det.
SГҘ denne linje er lidt fjollet.
Vi kunne bogstaveligt talt bare sГҰtte polstring i.
>> Men hvis du ГҰndrer stГёrrelsen af вҖӢвҖӢfilen, Vil du stadig denne linie?
SГҘ hvis vi ГҰndre stГёrrelsen pГҘ en fil, gГёr vi stadig Гёnsker at springe
over den gamle polstring?
>> STUDENT 74: Ja.
>> JASON HIRSCHHORN: SГҘ vi gГёr.
Fordi dette, igen, tilbud med kildefilen.
Vi er ligeglade om polstring fra kildefilen.
Vi Гёnsker at gГҘ til den nГҰste linje.
Men vi har ikke bare sat tilbage den gamle vГҰrdi af polstring.
Vi er nГёdt til at sГҰtte tilbage ny mГҰngde af polstring.
>> SГҘ nГҘr vi er ved at ГҰndre stГёrrelsen pГҘ en fil, vi stadig Гёnsker at springe over
polstring i den gamle fil - hvad vi lГҰser fra.
Men hvad vi skriver til, vi kommer til brug for at sГҰtte tilbage nogle forskellige
Antallet af polstring, vi har bestemt.
Ja.
>> STUDENT 75: RГҰkkefГёlgen af вҖӢвҖӢde to linier betyder ikke noget, right?
Fordi du hГҘndterer forskellige filer.
>> JASON HIRSCHHORN: PrГҰcis.
RГҰkkefГёlgen af вҖӢвҖӢdisse to linjer betyder ikke noget.
Vi skriver denne linje.
Det er her for filen vi skriver til.
Det er vigtigt, sГҘ vi fГҘr rigtige mГҰngde af polstring.
Dette har at beskГҰftige sig med i filen.
Vi Гёnsker at springe til hГёjre over polstring.
>> Vi Гёnsker ikke at lГҰse -
hvis vi lГҰser en byte ad gangen, vi ligeglad disse Udfyldningsbytes.
Vi Гёnsker at flytte til den nГҰste linje.
Endelig ligesom Lucy gav for os, vi lukke filer og returnere 0.
SГҘ dette er copy.c.
Og vi faktisk skrev - vi brugte det meste af sektion skriver dette vГҰsentlige.
>> Du har lavet dette.
SГҘ forhГҘbentlig har du en god fornemmelse af, hvad der foregГҘr her.
Den store forskel, helt ГҰrligt, er blot denne fГёrste del, der omhandler
sГҰregenheder bitmap-filer.
SГҘ jeg har da min nГҰste dias, hvad skal vi gГёre?
NГҘ, lad os tГҰnke over krimi.
>> Og for nogen, der lГҰser problemet indstillet, hvad gГёr vi
nГёdt til at gГёre i krimi?
Simply.
Aleja.
>> Aleja: Kan du tegne den del af hver pixel, der betegner rГёd.
Og sГҘ -
slags?
>> JASON HIRSCHHORN: OK.
SГҘ tag del af hver pixel, der betegner rГёd.
Det er tГҰt pГҘ, men ikke det hele.
>> STUDENT 76: Tja, der er forskellige mГҘder at gГёre det.
>> JASON HIRSCHHORN: OK.
Giv mig Г©n mГҘde.
>> STUDENT 76: Tag alle de rГёde, og derefter understrege blГҘ og grГёn.
>> JASON HIRSCHHORN: OK.
SГҘ givet begge disse mГҘder -
det lyder som vi giver det en pixel, er det har en rГёd, blГҘ og grГёn plan.
Vi Гёnsker at ГҰndre de relative niveauer af rГёd, blГҘ og grГёn, afhГҰngigt
pГҘ denne pixel.
Hvor i denne kode, bГёr vi ГҰndre den relative rГёd, blГҘ og grГёn
niveauer af en given pixel.
Efter at vi har lГҰst det -
fГёr vi skriver det?
Giv mig den linje nummer.
>> FLERE STUDERENDE: 83.
>> JASON HIRSCHHORN: 83.
SГҘ lige her.
For mordmysterium den kode, du har brug for at write bГёr alle gГҘ lige der.
Og det er det eneste kode du nГёdt til at skrive.
Fordi, ligesom vi hГёrte, alt du behГёver at gГёre, er at ГҰndre disse relative blГҘ,
rГёde og grГёnne niveauer fra hver pixel.
>> Du har lГҰst det i, og nu er du kommer til at skrive det ud.
Hvordan fГҘr jeg - hvis jeg har denne ting kaldet triple, lige her, og det er af
skriv RGBTRIPLE -
godt, hvis vi kiggede i bmp.h, hvad der er RGBTRIPLE?
>> STUDENT 77: Det er en struct.
>> JASON HIRSCHHORN: RGBTRIPLE er en struct.
Vi ser, at lige hernede.
Og sГҘ hvis jeg Гёnskede at fГҘ adgang, siger, rГёd niveau af struct, hvordan gГёr jeg
adgang til rГёde niveau af denne struct?
>> [KLASSE mumler]
>> STUDENT 78: RGBTRIPLE.rgbtred?
>> JASON HIRSCHHORN: Er det korrekt?
>> STUDENT 79: Det bГёr vГҰre tredobbelt dot, i stedet for RGBTRIPLE prik?
>> JASON HIRSCHHORN: Triple.
Triple er den lokale variabel, sГҘ her, der er ingen henvisninger her.
SГҘ vi bare bruge dot notation.
Dette vil give mig niveauet af rГёd.
Hvis jeg Гёnsker at ГҰndre det, jeg bare indstille det lig med noget andet.
SГҘ igen, denne linje kode adgange denne variabel inde i denne struct, og
vi kan indstille den til noget nyt.
>> SГҘ for mordmysterium, igen, det er, i det vГҰsentlige, hvad vi skal gГёre.
Meget enkel.
Bare ГҰndre nogle relative niveauer, og det er her, at koden gГҘr.
ГҶndre stГёrrelse, pГҘ den anden side, er en smule tricky.
Faktisk stГёrrelsesfeltet er sandsynligvis vanskeligste del af dette problem indstillet.
Vi har tre minutter til at gГҘ over det.
>> Men igen, vi har allerede skrevet det meste af denne kode, sГҘ vi
bГёr vГҰre temmelig bekendt.
Hvad er nogle ting, vi Гёnsker at gГёre i ГҰndre stГёrrelse, hvis du har lГҰst i lГёbet af
problem indstillet?
Hvis du giver mig dem, vi kan tale om dem.
Hvad er nogle ting, vi Гёnsker at gГёre?
>> STUDENT 80: Lodret -
sГҘ er du nГёdt til vandret ГҰndre stГёrrelse pГҘ det, men lodret resize det sГҘ godt?
>> JASON HIRSCHHORN: SГҘ hvis vi er givet et pixel, og vi Гёnsker at ГҰndre stГёrrelsen pГҘ det ved en
faktor to, det nu skal vГҰre skaleres horisontalt og skaleres
lodret.
Giver det mening?
Ja.
SГҘ det er nok det stГёrste udfordring.
Og vi vil tale om dette i et sek.
Ja.
>> STUDENT 81: Den mГҘde, jeg tГҰnkte pГҘ det var du havde brug for print det ud -
>> JASON HIRSCHHORN: Vent.
MГҘ ikke fortГҰlle os, hvad du gjorde.
Vi kommer til at tale i logik.
>> STUDENT 81: OK.
Hvad var spГёrgsmГҘlet?
>> JASON HIRSCHHORN: Du skal bare hГҰvede hГҘnden.
Der var ingen spГёrgsmГҘl.
Lad mig prГҰsentere den.
Lad mig blot diskutere dette kort.
SГҘ vi har en pixel, vi Гёnsker at kopiere det, bГҘde horisontalt og
lodret.
SГҘ ideelt set, hvad vi gГёr her er, at vi lГҰse i vores pixel, vi skriver det
men mange gange.
>> Men sГҘ har vi vores trick her, fordi sГҘ Гёnsker vi at springe til
nГҰste linje og skrive det pГҘ begyndelsen af вҖӢвҖӢnГҰste linje.
SГҘ hvis vi Гёnsker at kopiere bГҘde vandret og lodret, hvad er
en god mГҘde at gГёre det -
et godt selv at gГёre det?
SГҘ vi behГёver ikke hele tiden at sГёge omkring vores fil for at placere ting.
>> Dette spГёrgsmГҘl har mГҘske ikke gav mening, men jeg tror en
besvare det vil hjГҰlpe.
>> STUDENT 82: Opret en array?
>> JASON HIRSCHHORN: SГҘ lad os tГҰnke for hver fil som en rГҰkke.
Lad os tГҰnke i rГҰkker.
Hvis vi har vores fГёrste rГҰkke fra vores lille billede, kan vi gГёre denne rГҰkke
i en stor rГҰkke af et stort billede, og derefter replikere rГҰkken imidlertid
mange gange det skal blive gentaget, snarere end at gГҘ pixel for pixel,
som fГҘr forvirrende, nГҘr beskГҰftiger sig med filer.
>> Fordi hvis vi havde -
Jeg kГёrer ud af rummet.
Hvis dette er vores fil, og vi har at Г©n pixel der, og vi Гёnsker at sГҰtte det
lige der, vi stadig har nogle ting at det er nГёdvendigt at gГҘ over der, nГҘr vi er
skrive og skabe vores nye fil -
vores fil, der er dobbelt sГҘ stor.
>> Men det er virkelig svГҰrt med fil-funktioner at springe rundt til nye linjer
lignende, og derefter gГҘ tilbage her og sГҰtte ting derinde.
Det er nГҰsten umuligt at gГёre noget gerne, hvis det giver mening.
SГҘ hvis vi tГҰnker i rГҰkker, kan vi tage vores rГҰkke, og derefter sГҰtte det -
replikere rГҰkker vertikalt.
>> Og det er, hvordan vi behandler resizing lodret i stedet for vandret.
Det var slags hurtig, og lidt forvirrende.
DesvГҰrre vores tid er op.
Jeg vil stГҘ uden for de af jer, her der har spГёrgsmГҘl om
problem sГҰt, herunder komme sig.
>> SГҘ lad os udsГҰtte for nu.
Og igen, hvis du har spГёrgsmГҘl, vi kan chatte udenfor.