JASON HIRSCHHORN: Welcome, mindenki, a 6. hét. Örülök, hogy látlak minden él és virul után Kvíz 0, mert tudom, hogy egy kicsit durva. De szerencsére, mindenkinek volt hihetetlenül jól. És ez csodálatos. Ha az én részben adtam a legtöbb A biztonsági másolatot a vetélkedők már. Néhány, én találkozom óra után. És ha egy kiterjesztés hallgatói és még nem kapta meg a kvíz vissza Mégis, a TF valószínűleg dolgozik rajta és a besorolási, és akkor kap vissza nem sokkal. Szóval a kiterjesztés a diákok, akik nézi most - remélhetőleg él - Én lesz a vetélkedők röviddel is. A program ma a következő. Először fogunk menni át néhány erőforrások CS50 biztosít az Ön számára. Fogunk menni át kvíz 0 következő, és Én válaszoljon a kérdésekre bárki mintegy különösebb problémát. És akkor mi lesz majd vége Fájl I / O és a probléma meg 5. Az utolsó két téma lesz fel a nagy részét részben ma. Tettem ezt a listát minden héten, mint a emlékeztető mindenkinek, de az alapvető rész, már csak 90 perc alatt - mi nem képes fedezni mindent, amit Szeretném, hogy fedezze a srácok. De van egy csomó források meg, hogy merítsen, ahogy megismerjük az anyag és a munka révén a problémát állítja. Emlékeztető, hogy van online szöveg box, létre, hogy töltse ki, ha bármilyen észrevételed van nekem, mind a pozitív, mind konstruktív, a részt. Az URL fekszik itt. Ezért kérjük, szánjon egy kis időt, ha bármilyen visszajelzés, legyen ez a rész, vagy után, vagy miután nézni a videót az interneten, hogy nekem a véleményét. Igazán hálás vagyok minden, és az egészet. Szóval már rendelkezik kis beszélgetések sok az én a diákok egész héten - ahogy kéz vissza vetélkedők, beszél a Természetesen, látva, hogy hogyan csinálod. És egy témát jön át, és át beszél - a különösen - probléma beállítja. És én zárt, hogy a téma a táblán most. Lényegében van egy különbség között fordult a valamit, ami helyesen tette, és valami hogy történik is. A legtöbb ember már csinál fantasztikus szempontjából a korrektség - 5-ös vagy 4-es minden psets. A legtöbb ember egyre azokat minden alkalommal. Azonban csak azért, mert tettél valamit jól nem jelenti azt, hogy már történt valami olyan elegánsan, vagy hatékony, vagy tisztán, mint te tehette. És ez az, amit a tervezés - és kisebb mértékben, a stílus - tengely számára. Így vagyok rámenős benneteket, és más TFs nyomja srácok, hogy ne csak a turn A dolgok, amelyek a helyes, de viszont A dolgok kódolva. Nem csinál felesleges hurkok, Nem újratervezi változókat, ha Önnek nem kell. Például, ha visszatekintünk a probléma meg 4, ha forgalomba a tégla a képernyőn minden sorban - minden tégla a adott sor ugyanolyan y koordináta - azonos magasságban koordináta. Annak érdekében, hogy y-koordináta nem kell számítható belül a belső egymásba ágyazott FOR ciklus, amit valószínűleg használt kell elhelyezni ezeket a tégla a képernyőn. Csak ki kell számítani minden alkalommal, amikor váltott a sorban, vagy elindult lefelé a sorban. Tehát mondjuk ha van 10 téglákat egy sorban, minden tégla lehet ugyanazt y-koordináta, és az y-koordináta egyszerűen kiszámítható egyszer az összes ilyen. Ez nem kell kiszámítani 10 időre, sem csinálja kiszámítása során figyelembe kell történik az aktuális függvényhívás - Az új gracked függvényhívás. Tehát, ha ez egy kicsit zavaró a te, még általánosságban, a dolgok, Nem kell, hogy megtörténjen minden egyes alkalommal megy egy ciklusban nem lehet betenni a FOR ciklus, és ne történik minden alkalommal, amikor a FOR ciklus. Egy másik jó design példa láttunk A 3. hét 15, meg tudná tartani követni az nulla. Tehát, ha inicializálni a fórumon, menteni - egy globális változó, talán - Az x és y-koordinátája nulla. És akkor, amikor - a mozgás funkció, amikor csinál Sikeres lépés, frissíti a helyét a nulla. Ez azt menteni attól kelljen egymásba ágyazott FOR ciklusok, hogy nézze át a fórumon minden alkalommal a lépés funkció és keresse meg a nulla, vagy keresse meg a cserép, és ellenőrizze, mi a következő lépés, hogy azt. Ehelyett, akkor a helyét a nulla, akkor csak nézd felett, alatt, és a bal és jobb oldalán, hogy megtalálják a cserép, amit keresett. Így tekintve a programok vagyunk írás, ők soha nem elég nagy hogy ezek közül néhány tervezési döntések nagyon fog akadályozza a programot, vagy hogy ez fut lassabban, vagy talán még elfogy a memória. De még mindig nyomja a srácok írni, elegáns és hatékony kódot, amennyire csak lehetséges. Tehát, ha nem a végén írásban dolgokat hogy van egy lényegesen nagyobb köre, lesznek írva a jó tervezés amellett, hogy helyes-e. Így számos olyan van hozta, hogy ki. Ez olyasmi, amit keresünk - valami megyünk tovább nyomja meg srácok. Ha valaha is bármilyen kérdése van a kialakítása a program, nyugodtan hogy elérje a számomra, és örülök, hogy séta a programban veled, és rámutatni néhány a tervezés döntés amit tett, és ad egy kis javaslatokat, hogyan is jobb tervezési döntéseket. Így fogunk lépni hogy beszélünk Quiz 0-ra. Mielőtt ezt tesszük, nem bárki bármilyen kérdése van, milyen Én már lefedett eddig? [Zajt] JASON HIRSCHHORN: Hét másodperc. OK. Beszéljünk Kvíz 0 egy kicsit. A legtöbb van a kvíz 0 hátán. Ha nem, remélhetőleg emlékszik rá egy kicsit. De ha már megtette kvíz 0, akkor is hozzáférhetnek a PDF-online A minta oldatok. Van valakinek bármilyen kérdése van, mielőtt ugrunk a heti anyagot a egy adott probléma Quiz 0 - miért a válasz, mi az? Van valaki zavaros valamit? Akkor is, ha van a probléma van, de csak azt szeretném, hogy magyarázzam el, hogy egy kicsit több, boldog vagyok, hogy ezt most. Szóval kértek titeket felkészülni néhány gondolatok Quiz 0-ra. Tehát, aki szeretne minket kezdődött egy kérdést, vagy megjegyzést a kvíz 0-ra? [PAPÍR susogó] JASON HIRSCHHORN: Nem mindenki nem tökéletesen. Szóval tudom [nevet] ott kell néhány kérdést a Quiz 0-ra. OK. Igen. Ompica. OMPICA: 10. szám. JASON HIRSCHHORN: 10. szám. Melyik volt a 10-es számú? OMPICA: A - JASON HIRSCHHORN: I haven't - OMPICA: Az include - JASON HIRSCHHORN: Number 10 nyolc I - írásban nyolc-i? OMPICA: Igen. JASON HIRSCHHORN: OK. Így egy másik kérdés, hogy lehetett volna kérdeztem vagyok előrelátó? A válasz: igen. A részt, mielőtt a kvízt, megkérdeztem srácok kódolni mind a Sterling és a nyolc i. Mindketten történt jelenik meg a kvíz. Így remélhetőleg, fizetett figyelmet arra, hogy a. És ha már, akkor meg kellett volna Valószínűleg jól ezen a két. De nyolc-én, valójában nem kód az osztályban, de ez megint, kérte a kvíz. Tehát egy-két dolgot, hogy ügyelni kódolás nyolc i. Az első dolog, egy kérdés volt, hogy meg kell, hogy ellenőrizze, hogy a húr egyenlő volt a null. Néhány ember megpróbált ellenőrizni később a programban, ha s konzol voltam - így egy adott karaktert, hogy húr - egyenlő volt a null. De ne feledjük, hogy a null lényegében - ez jó, hogy gondolni null a nulla mutató - a mutató nullára - valahol a memóriában, ahol a soha nem lehet elérni. Tehát, ha valami egyenlő null, akkor tudja, hogy nem helyeztük üzembe, vagy nincs ott semmi. Tehát s egy char csillag, s konzol i egy char. Így van értelme összehasonlítani s null, de nem s konzol i null. De megint -, így ez volt az első dolog, hogy meg kellett volna tennie - győződjön meg róla, hogy valóban van egy igazi húr. Ezután meg akart átmenni mindegyik karaktere. És azért, hogy olyan lesz, mint egy s konzol Én például, ha van a bejáró. És hogy ezt a karaktert, és a hogy a valós értéket. Ön azt tárolni, mint egy char, de Az ASCII értéke nulla - nulla, mint egy karakter - valójában nem az egész nulla. Ez egy másik számot, amit nézz fel az ASCII táblázatban. Tehát az egyik módja annak, hogy javítani, hogy - talán a legjobb módja annak, hogy javítsa a hogy - a kivonni belőle a karakter értékét - nulla, mint egy karakter. Tehát mínusz egy idézet, nulla, egy aposztróf. Ez megtesz minden szám van mint a char, és kap ez egyenlő A szám, mint a tényleges szám. És ez nagyon hasonló a megközelítés egy csomó ember volt a probléma meg 2, Caesar és Viginere - azok ciphers, ha voltak elforgatva. Így aztán itt van ez a szám nullától kilencig, akkor - attól függően, ahol megy a végső szám - meg kell szorozni az egy hatalom 10. Néhány ember költözött a vissza a elől, és meg kell szorozni az egyes számot a hatalom 10. Vannak, akik költözött Az előre-hátra - és így volt a legmagasabb Rendelési szám első - , és azok kivételével, amelyek a elleni globális változót. És akkor minden egyes alkalommal át a FOR loop, szaporodnak, hogy óriási a globális számláló változó 10, hogy a helyet a következő karakter. Szóval ez egy kicsit zavaros nélkül én írom a táblára. De a mintaoldatot áll az Ön rendelkezésére. De azok voltak a nagy dolgok kerestünk. Szintén győződjön meg arról, hogy minden egyéni jelleg valóban a karakter a nulla és kilenc, és nem más karakter, mint egy A, pl. Ezek voltak a dolgok, amit kerestünk az ebben a kérdésben. Van, hogy a kérdésére? OMPICA: Igen. JASON HIRSCHHORN: OK. Vannak más kérdések a kvíz 0-ra? Mi a fordítás? Mindenki összeállítása van? Nem. Ott volt - [Nevet] Bármilyen kérdése a fordítási folyamat? Wow. [PAPÍR susogó] JASON HIRSCHHORN: Igen. Michael. MICHAEL: A 7-es szám - véletlen? JASON HIRSCHHORN: Number 7. 7-es számú volt, hogy egy véletlen egész szám. Kiváló. Szóval adott egy egész egy és b számokat, és azt szeretné, egy véletlen közötti egész szám, a és b. Mi is valójában írni ezt a a testület, mert ez az egyik volt egy sort - az egyik módja annak, hogy csináld. Szóval adott drand, mint a funkció tudtuk használni. És mit drand - feltételezve, hogy ez már kiemelt - mit drand vissza? MICHAEL: Az úszó 0,0 és 1,0 közötti. JASON HIRSCHHORN: A szám - igen. A szám 0 és 1 között. És így már b és a. És akkor mi van a véletlen számot 0 és 1 között adott nekünk drand. Vannak, akik megpróbálták, hogy b vagy b mínusz Egy, vagy valami belül azokat a zárójelben. Ez azt jelentené, hogy ők érvek ezt a funkciót. drand nem vállal semmilyen érvet - mint getString nem nem vállal semmilyen érvet. Tehát csak nyitott paren, közel Paren - és hogy önmagában A függvényhívás. És ez ad egy számot 0 és 1 közötti. Természetesen van egy egész sor hogy a számok lehet, hogy be Mondjuk, ha a b 10 és 5, valóban szeretnénk egy számot egy sor 5. Így a következő dolog, amit tennie kell, hogy szorozzuk ezt tartományon b mínusz egy. Tehát, feltételezve azt, hogy ez megsokszorozódott. És ez ad nekünk egy számot egy adott tartományon belül. És az adott tartományban, hogy a különbség b mínusz. És végül, hogy akkor csak, hogy ez a - szerint a tartomány a B mínusz 5, hogy ad nekünk egy szám 0-5. De ha egy valójában 5, meg kell, hogy növeljék ez a hatótávolság, ahol ez valóban kéne lennie, hozzáadásával. Ahhoz, hogy megkapja a logika helyes. És akkor, ugye, hogy még egy kérdés? MICHAEL: Nem. Úgy érzem, nagyon buta most. [Nevet] JASON HIRSCHHORN: Nem. Nem érzem igazán hülye. Számos ember küzdött ezzel a kérdéssel. És akkor, a másik kérdés az, drand, azt mondta, ad egy úszó - visszaad egy úszó. De ez a funkció valóban kérte az egész, hogy vissza. Nem kell vetni ezt kifejezetten hogy egy egész szám, mert ezek a műveletek kezelni, mint minden a úszó -, mint a lebegőpontos szám. Mint ez - még akkor is, ha ez jelentése egész szám, ez az akarat kell szorozni helyesen. Az összes szorzást fog működni. Nem kell vetni itt. Sőt, akkor ne dobd el. Ez ugyanis - ha öntött egy számot ez a 0 és az 1 - egy véletlen számot, egy lebegőpontos - akkor sem lehet csak a 0 vagy 1, így a elveszted, hogy a pontosság. De a végén, amikor visszatérsz, automatikusan lesz küldött vissza egy egész szám. Szóval nem kell tennie hogy a casting magad. Tehát ez volt a válasz, hogy ezt a kérdést, 7-es szám. Minden más kérdés a kvíz 0-ra? Igen, Annie. Annie: Mikor használjuk rekurzív - mikor használjuk iteratív hurok? JASON HIRSCHHORN: Ha nem használ rekurzív - így általában, a érvek és ellenérvek a rekurzió szemben iteratív megközelítés. Tud valaki ajánlani egy profi, vagy a con? Kérjük? Nem lehet senkit. Ki tud nyújtani egy profi, vagy a con? [PAPÍR susogó] DIÁK 1: Rekurzív kevésbé kódolás - kevesebb gépelés? JASON HIRSCHHORN: Tehát általában, rekurzió különösen a funkció - vagy egy algoritmus hasonló merge sort - amely alkalmas arra, a rekurzív megközelítés - sokkal könnyebb lenne, kódot rekurzívan. És csak, hogy több értelme csinálni rekurzívan. Szóval ez lenne a Pro rekurziót. Mások? Igen? Diák 2: Con rekurzió - Használ több memóriát. JASON HIRSCHHORN: Tehát pontosan így van. A rekurzív függvény fogja hozzá stack keretek a verem. Tehát, ha működik a sok számokat, és meg kell hívni ezt a funkció sokat, akkor biztosan több memóriát, míg a iteratív megközelítés csak akkor tesz egy verem keret a verem, mert minden történik belül egy funkció. Minden más előnyei és hátrányai? Igen. DIÁK 3: profik rekurzió. Nem kell meghatározni, előre hányszor kódot meg kellett ismételni. Akkor lehet egy előre meghatározott számú idő, hogy meg kell halad-hatunk, majd rekurzió jobb, mert tart az eredmény. JASON HIRSCHHORN: Azt hiszem, ez igaz. De azt hiszem, mindkét esetben Te soha nem - akkor valószínűleg egy kis bemenet a felhasználó. Vagy ez a funkció volna valamelyik bemeneti , amely meghatározza, hogy hányszor kell futtatni. Tehát általában, akkor nem nehéz kód - még egy iteratív megközelítés - how sokszor, hogy hurkot kell futtatni. Megint voltál gondolkodás, Annie? OK. Tehát ezek talán a két - a legnagyobb profi, és a legnagyobb con a rekurzív szemben iteratív megközelítés. OK. Bármi mást kvíz 0-ra? Menjünk tovább. Fájl I / O Van egy csodálatos rövid ezen a héten az I / O műveleteket, ami remélhetőleg Ön nézte több idő, és csodálta. A sok munka bement, és én már hallottam, hogy őrülten hasznos. Én is szerepel a linkre a dia, ha még nem volt esélyt, hogy nézze meg 10 alkalommal. Így fogunk röviden menjen át a nagy lépéseket nyitó és munka fájlokat, majd fogunk belevetik magukat a kódolási probléma előtt vizsgálja a probléma meg. Tehát újra fogom, hogy ezt fel a képernyőn, de fogok beszélni csak egy percre, hogy mi vagyunk itt a fájl I/O-- mit jelent ez? Ez azt jelenti, hogy mi is létrehozhatunk a programokat, és ezt követően a program exit, és nem tett semmilyen hatással A külvilág a programunk. De amikor elkezdünk dolgozni a kép - mind olvasás őket, és létre őket - mi lehet némi hatása a kívüli világ a programunk. Csakúgy, mint ha a Microsoft Word nem volt képes , hogy minden Word dokumentumokat, akkor Egyszer Microsoft Word kilép, az összes munkát fog tűnni, és ez tényleg használhatatlan. Mi végül akarjuk, hogy képes legyen programokat írhassanak, amelyek hatással lehetnek a őket körülvevő világot, mind azáltal, hogy komplex bemenet - mind a fájlok és keresztül fájlokat, és meg kell teremteni érdekes és vonzó kimenetek - szempontjából a különböző típusú fájlokat. Tehát ezért kezdenek megtanulják, hogyan kell dolgozni fájlokat. Pontosabban, mi mi a következő. Ez nagyon egyszerű. Már csak pár lépést, és ezek szerepelnek itt a kód. Így fogunk átmenni ezt a kódot sorról sorra. Először is, látod kiemelt - ha dolgozik egy fájlt, függetlenül attól, hogy milyen típusú fájl van, meg kell nyitni. És ez a hívás fopen - itt. Beírja a fájl nevét. Ha a fájl nincs a könyvtárban, vagy a mappát, ahol a program él, akkor is kell, hogy tartalmazza egy utat, hogy hol van a fájl. Fogjuk fel, hogy ez a nevű fájl "text.txt" - egy egyszerű szöveges dokumentum - van a ugyanabba a mappába, mint ez a program. Szóval, ez egy másik dolog, hogy tartsa szem előtt tartva -, hogy ha meg szeretné nyitni a fájlt valahol máshol, valóban szüksége van tartalmazza a helyét. Másodszor, akkor át egy érv, hogy fopen, és ez az, amit akarsz a fájl. Három fő érv, hogy fogsz át fopen. Ki tud adni nekem a három? Ki tud adni nekem az egyiket? Igen. STUDENT 4.: A fájl neve? JASON HIRSCHHORN: Elnézést. Három fő érv akkor át a második érv, hogy az fopen. Igazad van - a fájl nevét az első érv. De a második érv, hogy az fopen van általában három húrok, és - igen. Aleja. Aleja: hozzáfűzés. JASON HIRSCHHORN: A, ha azt szeretné, hogy hozzáfűzi, hogy a fájl már létezik. STUDENT 5: R olvasási. JASON HIRSCHHORN: R, ha szeretnénk olvasni egy fájlt. STUDENT 6.: W írni. JASON HIRSCHHORN És w, ha szeretnénk írni a fájlt. Tehát ebben az esetben írunk hogy a fájlt, így van w. Kinyitod, akkor is meg kell menteni a fájl valahol, és ez a kódot a bal oldali Az értékadó operátor - Én létre egy mutatót a fájl hívják, ebben az esetben, a fájl. Nem fogunk aggódni, mi ez az egész sapkák FILE dolog. Elég annyit mondani, ez egy hosszú patak nullák. És így fogunk működik, és megérteni. A következő dolog, amit tennie kell - és ez hihetetlenül fontos - ha megnyitja a fájlt - Sőt, amikor hívja malloc, a Például, és egy kis memória, és próbálja és mentse el a mutató, mindig szeretné, hogy ellenőrizze, hogy megbizonyosodjon arról, hogy funkciója nem tért vissza null. Tehát ebben az esetben, azt ellenőrzik, hogy a arról, hogy mi valóban nyitott a fájl helyesen, és nem volt nincs hiba a programunkban. Ezután, ha egyszer már ellenőrizni, hogy megbizonyosodjon arról, hogy van egy működő fájlt, tudjuk írni, vagy olvasni, vagy hozzáfűzni, hogy a fájlt. Ebben az esetben én csak a nyomtatás egy sor erre a fájlra. Honnan tudom ezt? Nos, ezzel a funkcióval nevű fprintf. Az összes funkció lesz használva írásakor, illetve olvasása, vagy manipulálni fájlok hasonló lesz funkciók, amit látott, de kezdődik az F betű, állni fájlt. És fprintf, ellentétben a normál nyomtatási app, úgy egy további érv, és ez a fájl, ahol szeretne nyomtatni, ezt a sort. Nem kell semmit jobbra Ohai. Nem kell a harmadik argumentum printf - vagy a második érv, hogy printf, a harmadik érv az fprintf, mert nincs helyőrző itt. Én nem beleértve a változókat. De ismétlem, fprintf és az összes ilyen fájl funkciók működnek kép általában lesz szüksége a fájl amelyen ők működik. Végül az utolsó fontos dolog, hogy tennie, hogy zárja be a fájlt, mint és - amikor csak malloc valamit, azt akarjuk, hogy szabad valamit, nehogy Van memóriavesztés - szeretnénk zárja a fájlt. Ha ez a program kilépett bezárása nélkül a fájl, esély sem menne rossz, különösen, ha ez egy kis fájlt. De ez biztosan jó kódolási stílus és a gyakorlat, hogy mindig zárja be a fájlt amikor befejezte azt. Szóval ez az alapjait fájl I / O Valószínűleg már látott ilyet, vagy nézte meg ebben a fantasztikus rövid. Van valakinek bármilyen kérdése van, mielőtt bemegyünk egy kis gyakorlás kódolás problémák, a fájl I / O vagy a lépések csak átmentem? [TIPIZÁLÁS Hangok] JASON HIRSCHHORN: Van van egy kérdés, Avi? AVI: Nem. JASON HIRSCHHORN: OK. Fogok várni egy hét másodperc. [Nevet] Ez egy nagyon jó tipp. Ti csak nem tetszik kérdéseket. Ez rendben van. OK. Tehát az első gyakorlat a probléma, mi fog előidézni a funkció egy parancssori eszköz, amely valószínűleg korábban használt - copy - A másolat eszközt. Ha beírja cp, majd adja át a két érvek be a terminál, akkor másolni a fájlt. És ez az, amit mi fogunk írni most. Tehát még egyszer, olvassa el ezt dia, én , hogy írjon egy programot, amely kettő, míg a parancssori érveket - a forrás fájlt, és a célfájl - és másolja a tartalmát a forrás fájlt a célfájl egy byte egy időben. Szóval ez egy sokat kérni. Ismét egy jó megközelítés, hogy ez a nem megy egyenesen a C kódot, de felosztása pár lépést. Először is, gondoljon a logika - pontosan amit kérek, hogy nem - és megérteni az összes lépéseket, hogy ezt a problémát. Nem a C, csak bizonyos pszeudokódja, vagy akár egy mentális modellje mi folyik itt. Ezután, ha egyszer már a pszeudokód le, kitalálni, hogyan lehet a pszeudokód térképek rá eszközök és dolog, amit megtanulta használni a C És végül, ha már minden együtt, akkor a kódot a problémát. Take 5-től 10 percig, hogy dolgoznak ezen a problémán. Teszek az utasításokat vissza a második. És akkor fogunk menni át A pszeudokód, és a kód élni, mint egy csoport. Ha bármilyen kérdése van, miközben te ezen dolgozik, nyugodtan fel a kezét, és eljövök körül, és válaszolni rájuk. STUDENT 7: Tudok húzza egy darab papír? JASON HIRSCHHORN: Mi van? [TIPIZÁLÁS Hangok] JASON HIRSCHHORN: OK. Menjünk át a pszeudokód először, és akkor adok neked egy pár perc alatt befejezni kódolás. Ki szeretném kezdeni engem az első sorban a pszeudokódját ezt a funkciót? STUDENT 8. Győződjön meg arról, hogy kaptak két fájlt. JASON HIRSCHHORN: OK. És ha nem? STUDENT 8: Én vissza 0-ra. JASON HIRSCHHORN: kéne vissza 0-ra? STUDENT 8.: vissza a - törlést. Bocsánat. JASON HIRSCHHORN: Igen. Valószínűleg nem 0-ra. Mivel a 0 azt jelenti, minden jó volt. OK. Szóval ez az első sor A pszeudokódja. Kinek van a második sor pszeudokódja? DIÁK 9.: Open mind a fájlokat? JASON HIRSCHHORN: Nyissa meg a két kép. OK? STUDENT 10. Ellenőrizze, hogy ha a fájl NULL? JASON HIRSCHHORN: Ellenőrizze, arról sem vagy NULL. Mellesleg - perjel 0 - ez NULL? STUDENT 11: Nem. JASON HIRSCHHORN: Ez nem NULL. Ezt nevezik a NULL terminátort. Ez valójában tönkölybúza csak egy l. Így ellenőrizni valamit ez ellen - ez valójában egy karaktert - így ellenőrzése valami ellen, ami nem ugyanaz, mint ellenőrzi, hogy ha ez értéke NULL. És néhány ember - azok vetélkedők és a probléma készlet - már megvan a két ilyen összezavarodott. De a kettő ezek közül ténylegesen különböző. Az egyik végén a húr - az egyik a mutató 0-ra. STUDENT 12: Miért nem ellenőrzi, hogy győződjön meg arról, hogy a fájlok nem NULL mielőtt megnyitná őket? JASON HIRSCHHORN: Tehát nyitott takarít valamit a fájlban. És ha megy vissza - így ez a vonal - fopen - kapsz egy címet, és tárolja ezt a címet a fájlt, ha működik. Ha ez nem működik, akkor tárolja NULL - STUDENT 12: Oh. OK. Megvagy. JASON HIRSCHHORN: a fájlban. Így nem tudja ellenőrizni a NULL mielőtt még kinyitotta. NULL jelent valamit, nem működik megfelelően. OK. Tehát, győződjön meg róla, nem IS? Vagy nem? Mit gondol? Megyünk vele. STUDENT 13: Is. JASON HIRSCHHORN: A? Egyik sem? STUDENT 13: Is. JASON HIRSCHHORN: OK. Úgy tűnik, hogy néhány konszenzus, hogy az. Egyik sem NULL. OK, következő sor a pszeudokódja. Ki nem adott nekem egy sort még? Mi fogja várni. Igen. STUDENT 14: El kell olvasni az első fájl? JASON HIRSCHHORN: OK. STUDENT 14: Vagy használjuk fscanf vagy valami ilyesmi, hogy az első fájl? JASON HIRSCHHORN: Tehát szeretnénk olvasd el az első fájlt, és - mondjuk, hogy itt van. Olvassa el a forrás fájlt. És akkor, mit csinálunk, miután olvasható a forrás file? Valaki más? STUDENT 15.: Írd be a cél fájlt? JASON HIRSCHHORN: Azt írja, hogy a célfájl, és - OK. Mit hagytunk ki? Valaki más, aki nem adott nekem kódsor még - a pszeudokódja. Igen. STUDENT 16.: Lehet, hogy mindig ellenőrizze hogy van-e valami, olvasni, mint a következő sor? Ez olyan, mint a következő sorban, nézd meg, hogy létezik. [Elektronikus BEEP] JASON HIRSCHHORN: Hoppá. Ez az én naplózó szoftver. Igen? STUDENT 16.: Igen. JASON HIRSCHHORN: Tehát hogy nekem még egyszer. STUDENT 16. Ellenőrizze, hogy van-e még a következő sort a forrás fájlt olvasni. JASON HIRSCHHORN: OK. Szóval nem olvasta vonalak - olvasták bájt itt - de igazad van. Azt akarjuk, hogy írni és olvasni, amíg nincs több bájt. OK. És így ezeket igazán tagolt egy kicsit, mert ők alatta. Nem igaz? Amíg kint vagyunk a byte, megyünk olvasd el a forrás fájlt, és írjuk a cél fájlt. És akkor, mi az utolsó vonal pszeudokódja? Valaki, aki nem adott nekem valamit még. STUDENT 17. Zárja le a fájlokat? JASON HIRSCHHORN: Pontosan. Zárja le a fájlokat. Tehát mi pszeudokódja. Azt fogom tenni a pszeudokód a gedit, és pár perc múlva majd kódot Együtt. OK. Engedje meg, hogy indult egy csoport. Nishant, van az új fájlt. Épp most megnyílt ezt fel. Untitled Document 1. Mi az első dolog, amit meg kell csinálni? Nishant: Beleértve a könyvtárak? JASON HIRSCHHORN: OK. Mely könyvtárakkal? Nishant: stdio.h, stdlib.h, azt hiszem? JASON HIRSCHHORN: OK. Mi StdLib az? Nishant: elfelejtettem. JASON HIRSCHHORN: OK. Így többek között stdio. Mit kell tennem, még mielőtt Kezdek kódolás? Nishant: Írj egy fejléc? JASON HIRSCHHORN: Hogyan kapom meg színes? [Közbeiktatásával VOICES] Nishant: Hogy érted színes? JASON HIRSCHHORN: Hogyan tudom színkódolás? Nishant: Nem tudom. Oh. Mentés. JASON HIRSCHHORN: Mentés. Igen. Meg kell menteni, mint egy. C. Így mentse el az asztalon, mint cp.c. Édes. És ha azt akarom, hogy a teljes stílus pontokat, mit kell többek között a csúcson? Nishant: Lehet írni a neved, nevét a program, és a cél A program is? JASON HIRSCHHORN: Jól néz ki. Kiváló. Szóval elkezdtem minket tökéletesen. # Include - mi is írja - OK. Szóval azt hiszem, minden beállítva, hogy menjen. Ki az első sort a kód nekem - vagy az első sornyi kódot, hogy ez lesz kielégíteni az első comment pszeudokód? Önnek. STUDENT 18: Ha nem lenne int argc, majd char * argv? JASON HIRSCHHORN: Azt hiszem, igazad van. Nézzük a változás, hogy int main, nyitott paren, int argc, vessző, char * argv? Mint ez? STUDENT 18.: Konzolok. JASON HIRSCHHORN: Konzolok. Nyitó zárójel, záró zárójel, szoros szülő. Tökéletes. Most már tudom, hogy parancssori argumentumok. OK. Győződjön meg arról, mi adott két fájlt. Adhat nekem is. STUDENT 18: Ha argc - ez nem egyenlő 3. JASON HIRSCHHORN: Ha nyitott paren argc nem egyenlő 3? STUDENT 18: Igen, vissza 1., vagy ilyesmi. JASON HIRSCHHORN: Elnézést. STUDENT 18.: Return 1. vagy ilyesmi. JASON HIRSCHHORN: vissza 1. OK? Remek. Nyissa ki mindkét fájlt. Ki tud segíteni nekem, nyissa fel a fájlokat? Ki nem adott nekem kód már? Kurt? KURT: Szóval caps F-I-L-E csillagos forrást. JASON HIRSCHHORN: megyek , hogy vegye ki a magánhangzókat. Ezek cool. Olyan, mint a Tumblr. STUDENT 18: Egyenlő fopen - JASON HIRSCHHORN: Egyenlő fopen? STUDENT 18.: Open paren, argv, nyitó zárójel. JASON HIRSCHHORN: Várjon. Bocsánat. Nyitott paren. OK. STUDENT 18.: Igen. Argv sub 1.. JASON HIRSCHHORN: Sub 1? STUDENT 18.: Igen. Argv nyitva tartó 1 - Igen. És akkor vessző, majd a nyitott dupla idézet, r, két idézet, szoros paren, pontosvessző. JASON HIRSCHHORN: Édes. És mi a helyzet a másik? DIÁK 18: Nagyon hasonló, de ehelyett Az S-R-C, azt nevezzük D-S-T. JASON HIRSCHHORN: Oo! Ez tetszik. STUDENT 18: Just D-S-T. Igen. És akkor argv, nyitó zárójel, 2.. Igen. És akkor w helyett r. Igen. JASON HIRSCHHORN: Remek. Következő pár sor. Továbbá, ha valaki már a dolgokat, hogy adjunk sorok tettünk, nyugodtan hozzá azokat is. Ellenőrizze, hogy nem is NULL. Ki tud adni nekem a kódot, azt kell elégíti ki ezt a vonalat pszeudokódja? Archer. ARCHER: Ha az src egyenlő az egyenlők NULL vagy dst egyenlő az egyenlők NULL, akkor vissza - JASON HIRSCHHORN: Mi az? ARCHER: vissza 2-ben? JASON HIRSCHHORN: vissza 2. Tehát, ha a nyílt paren src egyenlő értéke NULL, vagy - bármit thing's - cső? Pipe? Hívjuk meg cső. Cső, cső, DST egyenlő az egyenlők NULL vissza 2.. OK? Amíg kint vagyunk a byte - azt a fajta átugorja ezt a lépést A pszeudokód rész megy itt. De amíg elfogyott a byte - mit jelent ez a hang, mint a? Milyen típusú C szerkezet - de nem használja a szót, szerkezet, mivel fogunk kezdeni a hogy más esetekben - de a C-eszköz nem, hogy a hang, mint a? STUDENT 19.: A hurok. JASON HIRSCHHORN: A hurok. Úgy hangzik, mint egy hurok. Szóval, aki tud adni nekem az első sorban a hurok kódot itt? Azt is vegye, hogy milyen loop szeretné, ha adsz nekem ezt a kódsort. Háromféle. Kapsz felvenni. Azt javasoljuk, az egyik ilyen. Avi. Melyiket akarod? AVI: FOR. JASON HIRSCHHORN: FOR. AVI: int i nulla. JASON HIRSCHHORN: OK. AVI: Ez a rész nem vagyok biztos benne. De én nem kevesebb, mint a méret A csillag forrás? Nem vagyok benne biztos, hogy a. JASON HIRSCHHORN: OK. AVI: Mert szeretné, hogy a méretű képet, igaz? JASON HIRSCHHORN: Tehát ez valószínűleg nem fog nekünk a méret a tényleges fájl bájtban. Szóval, mi mást tehettünk volna? Milyen más típusú hurok? Vagy kellene ragaszkodni a for ciklus? STUDENT 20: Tudnál csinálni egy WHILE hurok? És akkor, hogy mit tenne az you'd - mert van egy char * a fájl. Tehát, ha csak folyamatosan növekvõ, hogy amíg meg fogjuk találni a NULL karakter a vége? Vagy nem, ez nem így működik a fájlokat? JASON HIRSCHHORN: így tudjuk tartani megnő a char * amíg meg nem találjuk a NULL - STUDENT 20: Lényegében folyamatosan megy karakterenként amíg elérünk a végén a fájl. JASON HIRSCHHORN: Igen. Szóval, ez az, amit akarok. Azt akarjuk, hogy olvass, karakter a karakter, amíg nem kap a végén a fájl. STUDENT 20: Igen. Find - mi a vége, vagy stoptábla a végén egy szöveges fájlban. JASON HIRSCHHORN: OK. Tehát, amikor eljutunk a fájl végére - Honnan tudjuk, hogy elértük a végén egy fájlt? Ha én hívom - úgyhogy hátrébb. Mi az a funkciója? Menjünk ezt a sort itt. Olvassa el a forrás fájlt. Ki tud adni nekem, hogy sor kódot? STUDENT 21: fscanf? JASON HIRSCHHORN: fscanf. OK. Mit tegyek, ha szeretnék olvasni, nagyon Konkrétabban, egy bájt? STUDENT 21: Nem tudom. JASON HIRSCHHORN: OK. Még egyszerűbb, mint fscanf - mi is az a - Szeretnék olvasni a forrás fájlt? Olvassa el az egy forrás állományt. Mi az a funkció - igen. STUDENT 22: Ez fread? JASON HIRSCHHORN: fread. Szerintem maradjunk hogy az egyik most. Milyen érvek nem fread veszi? STUDENT 22: Valószínűleg a fájl típusát, majd helyét a fájl? JASON HIRSCHHORN: Mit tudok írja itt hogy kitaláljuk, milyen típusú érveket fread vesz? TÖBB DIÁKOK: Man fread. JASON HIRSCHHORN: Man fread és fwrite. Úgy néz ki, mintha együtt lógnak. Tehát fread vesz Hány érv? STUDENT 23.: Négy. JASON HIRSCHHORN: Tart négy érvet. Beletelik egy mutatót, a méret, és hogy a dolog, ami furcsa, és néhány fájlt. OK? Olvassuk róla itt. "A funkció fread beolvassa n memb elemeket az adatok, minden egyes bájt méretű Hosszú, a patak által mutatott patak, tárolja őket a helyszínen adott mutató. " Tehát négy érvet. Miért nem tudok csak másolja ezt, -et itt. OK. Tehát, aki indulhat Töltsd ki ezek az érvek nekem? Avi. AVI: Vegye ki az űrt. Tedd csak src. Vegye ki a mutató és a csillag. Tedd src. Ezután - JASON HIRSCHHORN Szóval fogom megállítani ott, mert ez helytelen. Igazad van a src, de hol src menni? [Közbeiktatásával VOICES] JASON HIRSCHHORN: Meg kell megy itt. Ez az SRC - mi src egyfajta. Nézzünk itt. Ezt keresi a típusú FILE *, akkor valójában általában látni őket, mint ezt. Szóval ez a kér érv a típusú FILE * nevű patak, amely src. OK? Milyen méretű dolgok szeretnénk olvasni? Én adtam neked ezt a probléma leírását. DIÁK 24: Egy byte egy időben. JASON HIRSCHHORN: Egy byte. Mekkora egy byte? Ennek mérete byte-ban, akkor mi is tettem ott? STUDENT 25.: Egy. JASON HIRSCHHORN: Egy. Rendben. Mérete egységben byte, így 1-1 bájt. Hány akarok olvasni egy időben. STUDENT 26.: Egy? JASON HIRSCHHORN: Egy dolog. Szeretnék olvasni egy dolog méretben 1, egy falatot egy időben. És hol tegyem meg, ha már olvasni? STUDENT 27.: Cél? JASON HIRSCHHORN: Szóval nem tudod egyenesen a környéken. STUDENT 28.: Meg fogsz put azt egy harmadik mutató? STUDENT 27.: a cél. JASON HIRSCHHORN: OK. Igen. STUDENT 29.: A kijelentik valamit jár, mint egy átmeneti tároló korábban. JASON HIRSCHHORN: OK. Add csak ide. STUDENT 29.: Egy másik fájl mutató, talán? JASON HIRSCHHORN: OK. Tehát ez érvénytelen csillag - ez egyfajta űr csillag, így nem kell, hogy a fájl mutatót. És ha olvasok egy bájt, ahol lenne egy jó hely tárolni egy bájt? STUDENT 29.: Egy sor? JASON HIRSCHHORN: Egy sor. OK. És mi van még valami, ami csak mérete egy bájt? STUDENT 30: A char *? STUDENT 29.: Igen. JASON HIRSCHHORN: A char * nem egy bájt. STUDENT 29.: A kar. JASON HIRSCHHORN: A karakter egy byte. Nem igaz? Így hívjuk ezt a puffer egy általános nevet használja ezeket a dolgokat, hogy tárolja valami átmenetileg. Szóval hozzon létre egy puffer. Nem igaz? De ez nem fog egy void *. Így talán igazad van, hogy a kell egy 0 méretű puffer. Így tárolja egy - jobbra. Mert ez itt - char puffer egy karakter, de ez vesz void * - a mutató. Így tudtam ezt, és most puffer a mutató. Mi mást tehettem volna? STUDENT 31.: Tegyen egy csillag mellett char. JASON HIRSCHHORN: tudtam létrehozta az char *. OK. Mi a másik dolog, amit tehetek? Vagy menjünk ezzel. Char * buffer, akkor mi tegyem itt? STUDENT 31.: Buffer. JASON HIRSCHHORN: Buffer. Buffer egy mutató egy char. És azon a helyen, mi amivel egy byte a valami, amit olvastam. Igen. Avi. AVI: Csak egy gyors kérdés. Szeretné malloc buffer? JASON HIRSCHHORN: Ki lehet választ erre a kérdésre? STUDENT 32: Nos, ez nem igazán pont, hogy semmit most, így - JASON HIRSCHHORN: De vajon szeretnénk malloc ez? STUDENT 32: Ha úgy döntesz, hogy csinálni, hogy Így azt hiszem, igen, mert akkor lenne szükség Néhány helyen azt, hogy pont. JASON HIRSCHHORN: Vajon kell malloc ez? STUDENT 33: Ha meg akarsz használja kívül a hurok. JASON HIRSCHHORN: Megyünk használja kívül a hurok? STUDENT 34: Igen. STUDENT 35.: Várjon. Nem akarjuk, hogy állapítsa meg, hogy a hurok, hogy azon túl? JASON HIRSCHHORN: Azt hiszem van néhány pszeudo WHILE hurok, hogy itt vagyunk , hogy kitaláljam, hogy még nem jutottam el még. Nem kell malloc rá. Mi működő fő, ez csak akkor fog használni ezen belül hurok. Nem kell, hogy létezik kívül. Tehát ez lehet egy helyi változót. Van egy mutatót egy helyi változót. STUDENT 36: De ez nem mutat semmit. JASON HIRSCHHORN: Nem, ez nem inicializálni semmit. De nem fogunk használni is. Fogunk tenni valamit ez az első alkalom, hogy használja. Tehát úgy tűnik, rendben van. Tehát nem kell malloc itt. És azt gondolom, hogy ez rendben van, ahogy van. OK. Megvan a fread sor. Csináljuk a következő sorban. Ha azt akarjuk, hogy írni egy fájlt, ami egy jó függvényt használni erre? STUDENT 37: fwrite? STUDENT 38: fprintf? JASON HIRSCHHORN: fprintf egy. Mi a másik? STUDENT 39. fwrite. JASON HIRSCHHORN: fwrite. És mi célból, fwrite, amit láttam itt, valószínűleg a jobb választás. Beletelik négy érvet is. Nishant, tudsz adni nekem az érvek? Nishant: Az első fog hogy csak puffer. JASON HIRSCHHORN: OK. Nishant: A második ember csak lesz 1. Harmadik lesz 1. És a negyedik lesz a DST. JASON HIRSCHHORN: Van valakinek bármilyen kérdése van a vonal? Jól néz ki. OK. Most úgy néz ki, az egyetlen dolog, vagyunk hiányzik - valójában, írjunk az utolsó sorban. Zárja le a fájlokat. Ki tudja fejezni minket írásban az utóbbi két sor? Igen. Sajnos, mi a neve? Lucy: Lucy. JASON HIRSCHHORN: Lucy. Lucy: fclose src majd fclose célállomást. JASON HIRSCHHORN: fclose, nyitott paren, src, közel paren, pontosvessző. És fclose - igen? LUCY: Open zárójelben, a DST majd pontosvessző. JASON HIRSCHHORN: Remek. És mit kell tartalmaznia a végén? Lucy: vissza 0-ra. JASON HIRSCHHORN: vissza 0-ra. Muszáj? Csak egy kérdés. Muszáj, hogy tartalmazza return 0? TÖBB DIÁKOK: Nem. JASON HIRSCHHORN: Nem. Főoldal csinálja automatikusan ha kap a végén. De azt hiszem, jó, hogy tartalmazza azt kifejezetten. Különösen, ha mi vissza más dolog az egész programot. OK. Ez az, amit mi hiányzik - Míg az, ami? Ki tudja gondolni néhány - van bizonyos értelemben, amit a dolgok mehet oda? Akkor is, ha ez csak néhány pszeudokódja mint a nyelv? Mi igazán - mi akarunk menni, amíg? Igen, Lucy. LUCY: A fájl vége. JASON HIRSCHHORN: A fájl vége. Szóval mit értesz fájl vége? Lucy: Ha eléri a a fájl végén, stop. JASON HIRSCHHORN: OK. Tehát, ha elérjük a végét a fájl. Honnan tudjuk, mikor elértük a végén a fájl? STUDENT 40: Azt hiszem, puffer lesz beállítva NULL. STUDENT 41: Buffer nyilvánítják a cikluson belül. JASON HIRSCHHORN: Gondolja puffer lesz állítva NULL. Miért puffer lehet állítani, hogy NULL? STUDENT 40: Mert ha fread, próbálunk tenni semmit sem puffer. JASON HIRSCHHORN: OK. Szóval azt gondolod fread - amikor elértük a végét fájl, mi fread fog csinálni? Azt hiszem, ez a kérdés nekünk kell kitalálni. Mit fread csinálni? Vajon NULLA pufferben, vagy csinál valami mást? Hogyan lehet kitalálni, hogy mit csinál? STUDENT 42.: Man. JASON HIRSCHHORN: Man. Tehát nézzük meg itt. Visszatérési értéke. A siker, fread és fwrite vissza a tételek száma olvasott vagy írt. Ez a szám megegyezik a byte-ok száma át csak a mérete 1. Ha hiba lép fel, vagy a végén a fájl jön létre, a visszatérési érték a rövid elemszám, vagy 0-ra. Tehát a mi szempontunkból, ha fread eléri a végén a fájl, és olvas a fájl vége, semmi sem maradt , hogy olvassa el, hogy mi a helyzet, hogy visszatérjen? STUDENT 43: Zero? JASON HIRSCHHORN: Mi az? STUDENT 43: Zero? JASON HIRSCHHORN: Zero. Ez megy vissza nullára. Tehát tudjuk, hogy fread, amikor már végére ért a fájlt, megy vissza nullára. Hogyan tudjuk használni, hogy mi előnye? AVI: lehet, hogy egy változót kívül a hurok nevű csekket. Ha az ellenőrzés egyenlő - most - egy. JASON HIRSCHHORN: OK. AVI: És akkor véget IF adatok után fread mondja, ha fread nullával egyenlő - no. JASON HIRSCHHORN: Ki segíthet Avi ki? AVI: Mi az érték által visszaadott fread? JASON HIRSCHHORN: Csak ment fölé. AVI: Hogyan képviseletére? JASON HIRSCHHORN: Így tér vissza - mondjuk nézz fel itt - vissza size_t, amely lényegében egy egész szám. Így tér vissza az egész. És a mi esetünkben, hogy lesz vissza 1 vagy 0 - 1, ha olvas egy dolog - egy bájt, , és 0, ha már a végére ért. Tehát, ha fread - igen? STUDENT 45: Nem lehet, hogy csak fel a teljes fread (puffer, 1, 1, src) a while ciklus? JASON HIRSCHHORN: Szóval javasol ezt a ott? [Közbeiktatásával VOICES] JASON HIRSCHHORN: Várj. Szóval megszabadítja ezt. Szóval javasolja elhelyezés fread be ott? Mit is mozgatni ha azt akarod, hogy? STUDENT 45: A puffer külső. JASON HIRSCHHORN: meg kell is mozog ez itt. STUDENT 45: De vajon, hogy folyamatosan mozgassa előre? [Közbeiktatásával VOICES] JASON HIRSCHHORN: OK. Tehát ez az, amit Okshar javasolt. Úgy készítjük puffer. Mi AMÍG fread, akkor fwrite. Gondolatok erről? STUDENT 46.: Az egyetlen kérdés az, hogy ténylegesen végrehajtja a parancsot fread? JASON HIRSCHHORN: jó kérdés. Amikor amivel egy függvényhívás belsejében egy állapot, nem hogy függvényhívás végre? Láttunk példát ilyet. Nem igaz? STUDENT 46.: OK. Igen. Tehát ez végre. JASON HIRSCHHORN: Láttuk dolgokat ilyennek, ahol van egy függvényhívás belsejében egy állapot. Ez azt függvényhívás végre? Igen. Tehát a válasz: igen. Ez a funkció hívás végrehajtani. De ismétlem, ez, amit akarunk? Mi az egyik módja, tudtuk kitalálni , ha ez az, amit akarunk? TÖBB DIÁKOK: elindul? JASON HIRSCHHORN: tudtuk futtatni. De mielőtt ezt tesszük, amit lehetett is érvelni ezen keresztül. Ha - mondjuk, hogy egy byte a mi fájl, mi lesz itt, mi lesz, hogy ezt a kódot. Ez fog futni. fread visszatér egy bájt és tárolja a puffer. És ezt értékelni fogja, hogy 1, jobb, miután visszatér 1.. Tehát míg 1. Ez azt jelenti, a kód belsejében A WHILE hurok végre? STUDENT 47.: Igen. Ez igaz. JASON HIRSCHHORN: Igen. 1. igaz. Ez nem 0-ra. Tehát a kód belsejében itt is végre. Így fogjuk írni, hogy. Majd menjen vissza erre sor ismét. Most már - mi vagyunk a végén a fájl. Azt olvassuk végétől a fájl, mert csak egy byte-ban is. Fread visszatér 0, raktárak valami pufferben. Őszintén szólva nem tudom, mi tárolja a puffer. Mi valószínűleg felnéz , hogy mit csinál. Hogy Őszintén szólva nem tudom. Nem tudjuk, kit érdekel, mi tárolja a puffer? De ez vissza 0-ra. És míg a 0 végre? 0 pedig nem működik. Így aztán lefelé itt. Akkor most, hogy a kezeket, ha ez az a kód, meg kell futtatni, vagy ha kell tennie változások először. Tehát, ha úgy gondolja, - meg kell szavazni. Ha úgy gondolja, meg kell futtatni ezt a kódot ahogy van, kérem emelje fel a kezét. OK. Van egy - van egy kérdés, aggodalomra ad okot? Igen. STUDENT 48: Miután mozgás puffer kívül a hurok, mi is kell malloc ez? JASON HIRSCHHORN: jó kérdés. Miután mozgatni puffer kívül loop, kell még malloc ez? Ez egy köre kérdés. Ha inicializálni puffer kívül Ennek hurok fog létezni belsejében a hurok? TÖBB DIÁKOK: Igen. JASON HIRSCHHORN: Igen. Hatálya kiterjed belsejében a hurok, És tényleg, bármi alatta belülről ezt a kódot, beleértve a a dolgok idebent. Tehát nem kell malloc rá. Ez egy helyi változó, és annak hatályát is magában foglalja a hurok. STUDENT 49: Szükség van szabad ez? JASON HIRSCHHORN: Vajon kell szabad buffer? STUDENT 49: Igen, ha nem malloc. JASON HIRSCHHORN: Vajon kell szabad buffer? Mi nem. Ismét, ez egy helyi változó, így nem kell kiszabadítani. OK. Nézzük meg, mi történik. Így van ez inicializált. Ez volt, amit valami Marcus korábban javasolt. Tehát, hogy a hiba, a változó puffer inicializálatlan, amikor itt használt. Hogyan erősít ez? STUDENT 50: malloc ez? STUDENT 51: Egyenlő NULL? STUDENT 52: Mondd puffer értéke NULL. JASON HIRSCHHORN: OK. Jól néz ki. Van most. Hozzunk létre valamit, hogy próbálja a másolást. Tehát a szöveges fájl. Hogyan lehet futtatni ezt a programot? Igen. STUDENT 53: Megteheti dot perjel cp, test.txt. És akkor nevet egy másik fájlt amely tárolja be. JASON HIRSCHHORN: OK. Hívjuk meg out.txt. Cool? Seg hiba. Gondolatok a szegmens hiba? Ez nagyszerű. Hogyan lehet kideríteni, hogy hol A szegmens hiba? Mi az? STUDENT 54: gdb. JASON HIRSCHHORN: gdb. Futunk gdb írásban gdb dot perjel, a neve a programot. Nem parancssori paramétereket is. Megyünk be a töréspontot fő. Ha akarom kezdeni gdb, mit tegyek? STUDENT 55: R. JASON HIRSCHHORN: R. És aztán mi lesz? STUDENT 55: az érvek? JASON HIRSCHHORN: Akkor az parancssori argumentumok. Sétáljunk át. N csak visz soronként. Én megyek, amíg Kapom seg hibám. Ez az én hibám szegmensben. Úgy néz ki, mint fread okozott én seg hibám. Tudom, hogy fread okozta a szegmens hibám, mert ez volt a sorban már csak végre. És az egyetlen dolog, ami történik ezen a vonalon - Két dolog történt. Fread ment, aztán voltunk csinál valami ellenőrzése közben. Hajlandó vagyok fogadni, hogy a WHILE ellenőrzése nem okozza a szegmens hibám. Valószínűleg, fread volt ami az én seg hibám. Azt is látni valamit, memcopy. Memória másolás. Úgy hangzik, mint a mozgó emlék egyik helyről a másikra. Úgy hangzik, mint valami, ami történni A fread, talán egy kis memória mozgó innen van. Menjünk át újra. Hogyan kezdjem át és futtassa újra? Igen. STUDENT 56: Mit kell tenni -jel előtti puffert? JASON HIRSCHHORN: Tehát jel előtt buffer adna nekem a címét puffer, amely egy char *. Fussunk át ezt még egyszer. Hogyan végig még egyszer? STUDENT 57: Can csak típus fut újra? JASON HIRSCHHORN: Csak írd be újra futni. Szóval nem fog végre ezt a sort. Tehát puffer NULL pointer. Helyes? Ez mutat - lássuk. Ha megvan a - rajzoljon egy gyors képet a. Lehet mindenki lássa, Írok ide? Így a stack, van egy helyi változó, és ez az úgynevezett puffer, és ez a mutató egy char. Mi címe ez char-nél? STUDENT 58: 0x0. JASON HIRSCHHORN: Így van. Ez az, amit ez az egész. Itt, belső puffer tárolja 0x0. Ez az, amit mi - a beállítás van most. Szóval ez a vonal, fread, helyez valamit A forrás, ahol? Ebbe a mezőbe, vagy ezt a dobozt? Melyik box? Bal box vagy jobbra box? Ez a jog box. Ebből következik a mutatót, és mondja itt. Amikor megpróbálunk kapcsolatot memóriába helyszín 0, mit kapunk? A szegmentációs hiba. Ez a hiba már most. Igen. STUDENT 59: Nem kell , hogy csillag buffer? Vagy nem? A fread? JASON HIRSCHHORN: Tehát fread vesz a mutató. Így halad pufferben. És akkor majd de-referencia- ez valahol fread. De ismétlem, láttuk, hogy vesz egy mutatót. Nem kell, hogy adja át a csillag puffer. Ez lenne halad ez amit itt van. És ez valószínűleg nekünk egy hiba mert mi de-hivatkozás is. Nem igaz? Amikor visszahivatkozás Ez a mutató, ha a próbáljuk elérni ezt a helyet, mi megy egy hiba - szegmentációs hiba. Így - hoppá. Fogunk lépni ki a gdb. A sor - mi a probléma - igaza van itt ezen a vonalon. És ez a probléma, mert Az ebben a sorban. Hogyan lehet létrehozni egy doboz, elérhető a fread. Nem igaz? Létre kell hoznunk egy doboz, ami egy byte nagy, akkora, mint egy char. De tudnunk kell, hogy a dobozban, hogy hozzáférhető ha ezt a funkciót végrehajtja. Szóval, ha - igen. Valami ötlet? STUDENT 60: csak állítsa be véletlenszerű karakter. Csak nem char buffer egyenlő a karakter. És akkor, ha már a puffer ott - JASON HIRSCHHORN: Várjon. Char puffer? Tehát nem csillag? STUDENT 60: Igen. Vegye ki a csillag. Megegyezik egy random karaktert. JASON HIRSCHHORN: OK. Így adj egyet. STUDENT 60: Mint egy, vagy ilyesmi. És akkor, ha van puffer ott, akkor egy - STUDENT 61: Star? Ó, nem, a jelet. STUDENT 60.: A jel. JASON HIRSCHHORN: OK. És mi a helyzet a fwrite? STUDENT 60.: A jel újra. JASON HIRSCHHORN: Rendben. Tehát az ötlet az, hogy hozzon létre egy char és fel valamit, majd írni a karakter. STUDENT 60: Igen. JASON HIRSCHHORN: Milyen gondolnak az emberek? STUDENT 62: Ez szövevényes. JASON HIRSCHHORN: OK. Hadd dolgozzon ki. Ez alkalommal fogom felhívni ezt piros a verem itt, és akkor lesz - ooh! Bocsánat. Tehát ebben az időben van valami úgynevezett puffer, és ez a halom. Helyes? És mi vagyunk megtakarítás, hogy egy kezdetben. Aztán ott van a hívás fread. Mit fread nem is tart egy byte-ból a fájlt, és mondja valahol. Ez teszi azt, amit a dolog van mutatva. Nos, mielőtt volt ez a cím - 0x0. Most mi cím van még? STUDENT 63: Mindegy cím puffer. JASON HIRSCHHORN: Mindegy cím puffer. Ez valószínűleg lesz valami ilyesmi. Valószínűleg fog kezdeni a b és F, és ezt követően hat másik hexadecimális számjegy. Nem számít. Néhány cím. És mi halad a címet be És mi megy, hogy mi az egyik byte dolog, azon a címen. Szóval megy, hogy az egyik byte dolog benne van. És akkor fogunk írni a mi valaha is benne van. Van valakinek kérdése erről? Aki úgy gondolja, ez a kód működni fog? Emelje fel a kezét, ha úgy gondolja A kód működni fog. Meg kell állást foglalni. És aki azt gondolja, ez a kód nem fog működni? Emelje fel a kezét. Mindenki legyen felemelték a kezét. OK. Michael, hol állsz? MICHAEL: Nem tudok dönteni. Kind of a közepén. JASON HIRSCHHORN: Te a közepén. Válassz egyet. MICHAEL: Én hiszek , és azt mondják, hogy működni fog. JASON HIRSCHHORN: OK. Itt van a hit, és azt mondják, hogy működik? Mi történt? [Közbeiktatásával VOICES] JASON HIRSCHHORN: Nem szegmens hiba. Hogyan tudjuk nézni, hogy két dolog egyenlő? Két fájl azonos. STUDENT 64: Diff. JASON HIRSCHHORN: Diff. Diff ellenőrzi közötti különbségek két fájlt, és ha visszatér semmit, ők azonosak. És ha nyitunk, megkapjuk a fájlt. Szóval ez volt a helyes megoldás. Nézzük vissza még egyszer. Igazából nem is kell inicializálni azt. Ez valószínűleg egy kicsit tisztább, ha nem tesz valami véletlen ott. A lényeg, hogy, akkor szükség ahhoz, hogy Néhány hely tárolni valamit fread, és hogy valami ki fwrite. És ez a dolog volt, hogy vagy a helyi változót a stack - akkor volna malloc'd egy kis helyet. Tehát tulajdonképpen lehetett volna írásos malloc itt, és hogy működött volna. És akkor mi volna tárolás a dolgok valahol a kupac. De ez valójában, valószínűleg a legelegánsabb megoldás. Csak teremt helyet a stack ezek a dolgok, hogy menjen. Szerettem volna két másik megjegyzés. Ha úgy döntesz, hogy vegye be ebben, és akkor kap gólt ezen, én hozzászólások a következő lenne. Ezek az 1 itt van, nekem, meg mint a mágikus számok. Ez az 1, tekintve fread, van értelme. Ez a néhány dolog írni és olvasni. De ez itt kell valószínűleg valami mást. Tehát mi az egyik megoldás? STUDENT 65: mérete byte. JASON HIRSCHHORN: Tetszik ez? STUDENT 65: mérete char. JASON HIRSCHHORN: mérete char. Igen, byte nem egy típust. Tehát mérete char működik. Mi volna, tetején a kód, # definiált ezt. Hívott valami BYTE és ez tényleg egy char. Valójában, még jobb megközelítés lehetett volna ezt - uint. Tudja valaki, hogy mi ez? Bocsánat. Nekem van hátra. Várj, nem. Merre vezet ez? Tudja valaki, hogy mi ez? Igen. STUDENT 67: Állítólag segít szabványosítani rendszerek közötti dolog, hogy van -, mint a jelöletlen egész számok amelyek 8 bájt? JASON HIRSCHHORN: Ez pontosan így van. A különböző gépek, akkora, mint egy char - általában nem a char. Karakterek általában egy bájt. De a mérete más adattípusok különböző méretű, egy 32 bites gép szemben a 64 bites gép. A uint8_t mindig 8 bit - mindig egy bájt. És azt kell, hogy tartalmazza, hogy szabványos int header fájlt. Tehát most, ez valószínűleg már A legjobb módja annak, hogy megírjam ezt a kódot. Szóval megszabadulni a mágikus számok. És nekem is van egy logikus típusú puffer. Ez nem csak egy karakter, ez egy byte, ami az, amit várunk, hogy legyen. És itt, most már tényleg már egy kicsit erőteljesebb. Mi nem keresi, hogy egy karakter, amely - Talán, ki tudja - lehet egy másik méret a különböző gépeket. Mi tulajdonképpen azt mondja ez pontosan egy bájt, mindig, nem számít, mit. És ha megnézzük itt, teszünk cp. Uh-oh. Mi történt? STUDENT 68: Lehet, hogy bekapcsolt. JASON HIRSCHHORN: Mi az? STUDENT 69: Valóban? STUDENT 70: Nem igaz határozza meg, mint a típus. STUDENT 71. De kellene kell meghatározni szabvány. STUDENT 72.: Mi folyik itt? STUDENT 73: meg kell határozni, hogy nagybetűs? JASON HIRSCHHORN: Tehát ez nem # define. Tulajdonképpen, ebben az esetben, én fogja használni typedef. Mert mi vagyunk a használatát, mivel típus egy helyen. Tehát ebben az esetben, azt valóban szeretné typedef, mint mi vagyunk nyomtat egy új típusú bájt, és ez lényegében ezt. Ez egy kicsit más, mint # define. És most, a kód tökéletesen működik. Szóval, megint, # define vesz valamit, helyettesíti mindenhol a másik dolog. Ez csak egy makró - gyorsírás megszabadulni a mágikus számok. De ebben az esetben, mert mi vagyunk használja, mint egyfajta - itt - annak érdekében, hogy a munka, meg kell a typedef bármi bájt. És mi azt definiálta volna itt. Ez nem egy struct, valójában csak egy előjel nélküli egész. Ez az egyik byte hosszú. Ez a kód az interneten lesz elérhető, és a mindenkinek kell most. Tehát - tökéletes - 13 perc van hátra, hogy menjen mint probléma meg 5. Azt akarom, hogy séta copy.c együtt, aztán majd beszélünk röviden a más részein A probléma beállítva. Hadd húzza fel copy.c. És a jó dolog, most már tényleg már írt sok a kódot. A kód írtunk szó szerint csak jött ki ide, amikor én voltam írom ezt a saját. De ez copy.c, képezi az alapját az első két rész A probléma beállított whodunit.c, amely meg kell írni, és resize.c. Recover.c, amely a harmadik és egyben utolsó része a probléma meg, nem alapján le ezt a fájlt. Fogsz kell írni a fájlt, adunk egy sablont, amely fájlt, de semmi köze copy.c. De mivel copy.c az alapja Az első két rész, megyünk séta most, így van jó értelemben, hogy mit csinál. És a megjegyzéseket, hogy néhány, el. Már írt néhány ilyen. Először is, mi ügyelve arra, kapunk három érvet. Ezután mi emlékezve a fájl nevét. Így átugorja ezt a lépést, ha a kódoltuk a dolog - amikor a cp. De itt, ők így egy kicsit tisztább. Ők Ellenőrizzük, hogy Mindkét kép jó, a Amellett, hogy megnyitná azokat. Azt írta mindezt kódot most, tehát vagyok nem fog elveszni ezt a kódot. Ezután néhány dolog, ami kifejezetten a hogy milyen típusú fájlokat is használ, amely a bitmap fájlokat. Bitmap kép néhány metaadat velük kapcsolatban. Tehát az első pár byte mesélni a fájlt. Ezek nem a színek a pixel a kép. Azt mondják, hogy a fájlt. És ha olvassa el a megoldásokat, akkor már sokkal több információt hogy milyen típusú metaadat-struktúrák tartalmazza a bitmap. De ezért van ez az első sor - ez a kód itt. Hallunk a metaadatok - két darab metaadatok - fájl fejléc és az információ fejléc. És mi ellenőrzése egyes részeit, hogy győződjön meg róla, ez egy igazi bitmap fájlt A folytatás előtt. És ismét, ezek a részletek is Nem kell belemenni most. Ha elolvasod a probléma meg, meg fogod érteni ezeket. Hosszú történet rövid, ezek csak azt mondom, ez egy bitmap fájlt, majd megerősítette, hogy. Ezután írunk azokat Az out fájlt. Látjuk, hogy itt van. Azért írunk, hogy a kifelé mutató. Ezután mi meghatározó padding. Tehát még egyszer, mint sajátosság a egy bitmap fájlt, bizonyos vonalak közé padding a végén. És ha olvassa el a megoldásokat, akkor többet megtudni padding. Ez a formula találni padding. Fontos megjegyezni - ha megváltoztatja a méretét a bitmap fájl, a kitöltés változik. Amikor megváltoztatja a méretét fájl, a kitöltés változik. Ez soha nem lesz nagyobb, mint 3 - ez lesz a 0 és 3, a befogadó. De ha megváltoztatja a méretét valamit, a kitöltés változik. Ha csak egy pixel ebben a sorban, én kell három bájt padding, mert a Minden sorban kell lennie néggyel bájt hosszú egy bitmap fájlt. De ha kétszer is, hogy megy egy pixel két pixel, amelyek mindegyike, mondjuk, egy bájt, akkor kell két bájt padding, hogy a hogy az egyenlő négy. Tehát, amikor változtatni a méretét valamit, Meg kell változtatni az összeget padding én. Van ennek értelme mindenkinek? Következő, végighaladni minden sorban, vagy az összes sort. És akkor halad végig minden oszlopban minden sorban. Mi kezeljük ezt a bitmap, mint a rács, mint a már kezelt A fórumon 15. Hasonlóan kezeltük a tégla, ha mi nyomtatott őket a képernyőn. A rács a sorok és oszlopok. Ezután - láttuk ezt. Mi valójában csak kódolt ezt. Készítettünk néhány ideiglenes tárolására. Azt olvassuk ott, majd írunk ki. Pontosan ez az, amit csináltál. Ezután, mert azt mondtam, minden sor végül néhány padding, mi átugorják hogy padding - A régi padding. Aztán hozzá vissza. Ebben az esetben mi magunk hozzuk létre pontosan ugyanolyan fájlt. Mi csak másolás. Tehát ez a sor ilyen ostoba. Mi lehetett szó szerint csak tegye a padding be De ha megváltoztatja a fájl mérete, Még mindig akarod ezt a vonalat? Tehát, ha megváltoztatjuk a méretét a fájl, Van még ki akarja hagyni a régi padding? STUDENT 74: Igen. JASON HIRSCHHORN: Így van. Mert ez megint, ajánlatok a forrás fájlt. Nem érdekel a padding a forrás fájlt. Azt akarom, hogy a következő sorra. De nem csak tegye vissza a régi összeget padding. Meg kell, hogy kerüljön vissza a Új mennyiségű padding. Tehát amikor mi változik a mérete fájl, még mindig szeretnénk kihagyni a padding a régi file - mit mi olvasod felől. De amit írsz, hogy megyünk szüksége, hogy kerüljön vissza valami más száma padding, hogy ítéltük meg. Igen. STUDENT 75.: Az, hogy a két vonalak nem számít, igaz? Mert kezelése különböző fájlokat. JASON HIRSCHHORN: Pontosan. Az, hogy a két vonal nem számít. Írunk ezt a sort. Ez itt a fájl mi írásban. Ez fontos, így megkapjuk a megfelelő mennyiségű padding. Ez foglalkozik a fájlban. Azt akarjuk, hogy hagyja ki a jobb mint a szivacs. Nem akarunk olvasni - ha olvasod a byte egy időben, nem érdekli azokat a padding bájt. Azt akarjuk, hogy lépjen a következő sorra. Végül, mint Lucy adta nekünk, zárjuk a fájlokat, és vissza 0-ra. Tehát ez copy.c. És valójában írtam - mi töltötte részben írom ezt, alapvetően. Azt tette ezt. Így remélhetőleg van egy jó értelemben vett , hogy mi folyik itt. A nagy különbség, őszintén, csak ez az első rész, amely foglalkozik sajátosságai a bitmap fájlokat. Szóval az én következő dia, Mit kell tennünk? Nos, gondolj detektívregény. És valaki, aki olvassa végig A probléma meg, mit is kell tennie a detektívregény? Egyszerűen. Aleja. Aleja: Tud vegye ki a részét Minden egyes pixel, amely jelzi, piros. És akkor - fajta? JASON HIRSCHHORN: OK. Így vegye ki a részét az egyes képpont, amely jelöli piros. Ez közel van, de nem az egészet. STUDENT 76: Nos, különböző módon lehet csinálni. JASON HIRSCHHORN: OK. Adj egy út. STUDENT 76: Vegye ki az összes piros, és akkor hangsúlyozzák a kék és zöld. JASON HIRSCHHORN: OK. Tehát mivel mindkét módon - úgy hangzik, mint mi, hogy ez egy pixel, akkor egy piros, kék, és zöld szint. Meg akarja változtatni a relatív szintje a vörös, kék és zöld, attól azon a pixel. Amennyiben ezt a kódot kellene változtatni a relatív vörös, kék és zöld szint egy adott pixel. Miután olvastam el - mielőtt írni? Add nekem a sor számát. TÖBB DIÁKOK: 83. JASON HIRSCHHORN: 83.. Tehát itt. A detektívregény, a kódot kell write kell minden megy ott. És ez az egyetlen kód meg kell írni. Mert, mint hallottuk, csak annyit kell tennie, hogy változik a viszonylagos kék, piros és a zöld színek szintje minden pixel. Olvastad azt, és most fogja írni azt. Hogyan jutok el -, ha van ez a dolog úgynevezett hármas, itt, és ez a típus RGBTRIPLE - Nos, ha nézett bmp.h, mi RGBTRIPLE? STUDENT 77: Ez egy struct. JASON HIRSCHHORN: RGBTRIPLE egy struktúra. Látjuk, hogy itt lent. És így ha akartam elérni, mondjuk, a piros szint a struct, hogyan tudom elérheti a vörös szinten ez a struktúra? [CLASS MURMURS] STUDENT 78: RGBTRIPLE.rgbtred? JASON HIRSCHHORN: Ez így van? DIÁK 79: Meg kell hármas dot, ahelyett, hogy RGBTRIPLE dot? JASON HIRSCHHORN: Triple. Triple a helyi változó, így Itt nincs mutató itt. Szóval csak használja a pont jelölést. Ez ad nekem a szint a vörös. Ha meg akarom változtatni, én csak meg ez egyenlő az valami más. Tehát még egyszer, ezt a kódsort hozzáférések Ez a változó ezen belül struct, és tudjuk meg, hogy valami újat. Így a detektívregény, megint ez, lényegében, amit meg kell csinálni. Nagyon egyszerű. Csak a változás néhány relatív szintjét, és ez az, ahol a kód megy. Átméretezése, másrészt, egy kicsit trükkösebb. Sőt, átméretezés valószínűleg a legnehezebb része ennek a problémának beállítva. Van három percünk van rajta. De ismétlem, mi már írt a legtöbb a kódot, így kell nagyon ismerős. Milyen dolgokat akarunk csinálni átméretezés, ha már olvassa át a probléma meg? Ha adsz nekik, hogy én, mi lehet beszélni velük. Melyek azok a dolgok, amit akarok? STUDENT 80: függőlegesen - így van, hogy vízszintesen átméretezni, de függőlegesen átméretezni azt is? JASON HIRSCHHORN: Tehát, ha mi kap egy pixel, és szeretnénk átméretezni azt a kétszerese, most kell átméretezett vízszintesen és átméretezett függőlegesen. Van ennek értelme? Igen. Szóval ez valószínűleg a legnagyobb kihívás. És fogunk beszélni, hogy egy pillanat. Igen. STUDENT 81: Én úgy gondoltam, hogy volt szükséged kiírjuk - JASON HIRSCHHORN: Várjon. Ne mondd el, mit tett. Fogunk beszélni logika. STUDENT 81.: OK. Mi volt a kérdés? JASON HIRSCHHORN: Csak felemelte a kezét. Nem volt kérdés. Hadd mutassam be azt. Hadd beszéljen röviden. Tehát mi egy pixel, szeretnénk megismételni, mind vízszintesen, mind függőlegesen. Tehát ideális esetben, amit mi itt az, hogy olvasd el a mi pixel, akkor írd de sok alkalommal. De akkor mi van a trükk itt, mert akkor szeretnénk, hogy ugorjon a következő sort, és írja meg a elején a következő sorban. Tehát ha azt akarjuk lemásolni a két vízszintesen és függőlegesen, mi Egy jó módja, hogy - Egy jó, bár erre? Tehát nem kell állandóan keresni körül fájlt elhelyezni a dolgokat. Ez a kérdés talán nem értelme, de azt hiszem, egy választ, hogy ez segíteni fog. STUDENT 82: Hozzon létre egy tömböt? JASON HIRSCHHORN: Szóval szerintem Minden fájl a sorban. Nézzük gondolkodik a sorok. Ha van az első sorban a mi kis kép, tudjuk, hogy adott sor egy nagy sort egy nagy kép, majd megismételni, hogy a sor azonban sokszor kell megismételni, nem megy pixelenként, ami lesz zavaró, ha foglalkozó fájlokat. Mert ha volt - Kezdek kifogyni a hely. Ha ez a fájl, és van, hogy egy pixel ott, és azt akarjuk, hogy azt ott, még mindig van néhány dolog hogy kell menni oda, mikor vagyunk írásban és megteremti az új file - a fájl, ez kétszer akkora. De ez nagyon nehéz a Fájl függvények hogy kihagyja az egész az új vonalak így, aztán menj vissza és tegyük a dolgokat ott. Ez szinte lehetetlen, hogy tegyen valamit, így, ha van értelme. Tehát, ha úgy gondoljuk, tekintve a sorok, tudjuk hogy a sort, majd tedd - párhuzamos sorban, függőlegesen. És ez az, hogy hogyan kezeljük az átméretezés függőlegesen, hanem vízszintesen. Ez a fajta gyors és egy kicsit zavaros. Sajnos lejárt az időnk. Fogok állni kívül azoknak, itt, akiknek kérdése van a probléma meg, beleértve a vissza. Szóval vonuljon most. És ismét, ha bármilyen kérdése van, tudunk beszélgetni kívül.