[Powered by Google Translate] [ADRAN 5: LLAI CYSURUS] [Nate Hardison, Prifysgol Harvard] [Mae hyn yn CS50.] [CS50.TV] Felly croesawu yn ôl, guys. Croeso i adran 5. Ar y pwynt hwn, ar ôl cwblhau cwis 0 a ar ôl gweld sut rydych chi wedi ei wneud, gobeithio y byddwch yn teimlo'n wirioneddol dda oherwydd fy mod yn falch iawn gan y sgoriau yn yr adran hon. Ar gyfer ein gwylwyr ar-lein, rydym wedi cael ychydig o gwestiynau am y ddwy flynedd ddiwethaf problemau ar y set problem - neu ar y cwis, yn hytrach. Felly, rydym yn mynd i fynd dros y rhai yn gyflym iawn fel bod pawb yn gweld yr hyn a ddigwyddodd a sut i fynd drwy'r ateb gwirioneddol yn hytrach na dim ond edrych ar yr ateb ei hun. Rydym yn mynd i fynd dros yr ychydig o broblemau yn gyflym iawn, 32 a 33. Dim ond, eto, fel bod y gwylwyr ar-lein yn gweld hyn. Os ydych yn droi at eich problem 32, sydd ar dudalen 13, 13 allan o 16, problem 32 yw popeth am gyfnewid. Roedd yn ymwneud â chyfnewid dau rif cyfan. Dyma'r broblem yr ydym wedi mynd dros ychydig o weithiau mewn darlith. Ac yn y fan hon, yr hyn rydym yn gofyn i chi ei wneud yw olrhain cof gyflym. I lenwi'r gwerthoedd y newidynnau fel y maent ar y simnai fel y cod yn mynd drwy'r swyddogaeth cyfnewid. Yn benodol, yr hyn rydym yn edrych ar - I'm mynd i roi hyn iPad i lawr - yn arbennig, yr hyn rydym ni'n edrych arno yw y llinell hon rhif 6 dde yma. Ac mae'n rhif 6 am ychydig contiguity â'r broblem blaenorol. Yr hyn yr ydym eisiau ei wneud yw dangos neu labelu cyflwr cof fel y mae ar yr adeg pan rydym yn gweithredu hyn 6 rhif llinell, sydd i bob pwrpas yn dychwelyd o ein swyddogaeth gyfnewid iawn yma. Os byddwn yn sgrolio i lawr yma, gwelsom fod y cyfeiriadau o bopeth yn y cof ei ddarparu i ni. Mae hyn yn allweddol iawn; byddwn yn dod yn ôl ato mewn dim ond hyn o bryd. Ac yna i lawr yma yn y gwaelod, cawsom diagram cof bach ein bod ni'n mynd i gyfeirio atynt. Rwyf wedi gwneud mewn gwirionedd hyn ar fy iPad. Felly, yr wyf i'n mynd i bob yn ail yn ôl ac ymlaen rhwng y iPad a'r cod hwn yn unig ar gyfer cyfeirio. Gadewch i ni ddechrau. Yn gyntaf, gadewch i ni ganolbwyntio ar yr ychydig cyntaf o linellau o brif iawn yma. I ddechrau, rydym yn mynd i ymgychwyn x i 1 a y i 2. Felly, rydym wedi ddau newidyn cyfanrif, maen nhw'n ddau yn mynd i gael ei roi ar y corn. Rydym yn mynd i roi 1 a 2 mewn iddynt. Felly, os wyf yn troi drosodd i fy iPad, gobeithio, gadewch i ni weld - Apple TV adlewyrchu, a dyna ni. Iawn. Felly, os wyf yn troi drosodd i fy iPad, Rwyf am i ymgychwyn x i 1 a y i 2. Rydym yn gwneud hynny yn eithaf syml drwy ysgrifennu 1 yn y blwch wedi'i farcio x a 2 yn y blwch wedi'i farcio y. Eithaf syml. Felly nawr gadewch i ni fynd yn ôl i'r gliniadur, gweld beth fydd yn digwydd nesaf. Felly, mae hyn llinell nesaf yw lle mae pethau'n mynd yn anodd. Rydym yn pasio y cyfeiriad x a chyfeiriad y fel y paramedrau a a b at y swyddogaeth cyfnewid. Mae'r cyfeiriad x a chyfeiriad y pethau na allwn gyfrifo heb gyfeirio at y pwyntiau bwled i'r dde i lawr yma. Ac yn ffodus, y ddau bwynt bwled cyntaf yn dweud wrthym yn union beth yr atebion yn cael eu. Mae'r cyfeiriad x mewn cof yw 10, a chyfeiriad y yn y cof yw 14. Felly dyna'r gwerthoedd sy'n cael eu pasio i mewn fel a b atodol yn ein swyddogaeth cyfnewid. Felly, unwaith eto, gan newid yn ôl at ein diagram, gallaf ysgrifennu 10 mewn a 14 yn b. Yn awr, y pwynt yw lle rydym yn bwrw ymlaen â'r cyfnewid. Felly flipping yn ôl i'r gliniadur eto, rydym yn gweld bod y ffordd y mae'r cyfnewid yn gweithio yw fy mod dereference cyntaf a siop y canlyniad yn y tmp. Felly, y gweithredwr dereference yn dweud, "Hey. Trin y cynnwys amrywio a fel cyfeiriad. Ewch i beth bynnag yn cael ei storio yn y cyfeiriad hwnnw, ac yn ei lwytho. " Beth allwch chi ei llwytho allan o'r newidyn yn mynd i gael eu storio yn ein newidyn tmp. Flipping yn ôl i'r iPad. Os ydym yn mynd i'r afael 10, rydym yn gwybod y cyfeiriad hwnnw 10 yw'r x varible gan y dywedwyd wrthym gan ein pwynt bwled sy'n cyfeiriad x yn y cof yw 10. Felly, gallwn ni fynd yno, yn cael y gwerth ohono, sef 1, fel y gwelwn ar ein iPad, a llwytho hynny i tmp. Unwaith eto, nid yw hyn yn cynnwys terfynol. Rydym yn mynd i gerdded trwy'r a byddwn yn cyrraedd ein cyflwr olaf y rhaglen ar y diwedd. Ond ar hyn o bryd, mae gennym y gwerth 1 storio yn tmp. Ac mae cwestiwn cyflym dros yma. [Alexander] A yw'r gweithredwr dereference - dim ond yr hawl seren o flaen y newidyn? >> Ydy. Felly, y gweithredwr dereference, wrth i ni droi yn ôl at ein gliniadur unwaith eto, yw hyn yn seren i'r dde o flaen. Yn yr ystyr hwnnw, mae'n - rydych cyferbynnu hynny gyda'r gweithredwr lluosi sy'n gofyn am ddau beth, y gweithredwr dereference yn weithredwr unary. Gymhwyso Dim ond i un gwerth yn hytrach na gweithredwr deuaidd, lle rydych yn gwneud cais i ddau wahanol werthoedd. Felly, dyna beth sy'n digwydd yn y llinell hon. Rydym yn llwytho y gwerth 1 a storio i mewn i'n amrywiol dros dro gyfanrif. Mae'r llinell nesaf, byddwn yn storio'r cynnwys b i mewn - neu, yn hytrach, byddwn yn storio'r cynnwys y b yn pwyntio at i mewn i'r man lle y mae yn pwyntio i. Os byddwn yn dadansoddi'r o'r dde i'r chwith, rydym yn mynd i b dereference, ydym yn mynd i fynd i'r afael 14, rydym yn mynd i chrafangia 'r cyfanrif sydd yno, ac yna rydym yn mynd i fynd i'r cyfeiriad 10, ac rydym yn mynd i daflu'r ganlyniad i'n dereference o b i mewn i'r gofod. Flipping yn ôl i'n iPad, lle gallwn wneud hwn yn ychydig yn fwy concrid, gallai fod o gymorth os byddaf yn ysgrifennu rhifau ar bob un o'r cyfeiriadau yma. Felly, rydym yn gwybod bod yn y, yr ydym ar gyfeiriad 14, x yw yn y cyfeiriad 10. Pan fyddwn yn dechrau am b, rydym b dereference, rydyn ni'n mynd i chrafangia 'r gwerth 2. Rydym yn mynd i fanteisio ar y gwerth hwn oherwydd dyna yw gwerth sy'n byw yn y cyfeiriad 14. Ac rydym ni'n mynd i roi yn y newidyn sy'n byw yn y cyfeiriad 10, sydd yn iawn yno, sy'n cyfateb i'n x amrywiol. Felly, gallwn wneud ychydig o drosysgrifo yma lle rydym yn cael gwared ar ein 1 ac yn lle hynny rydym yn ysgrifennu 2. Felly yr holl yn dda ac yn dda yn y byd, er rydym wedi x overwritten yn awr. Rydym wedi ei storio x yn werth hen yn ein newidyn tmp. Felly, gallwn gwblhau'r cyfnewid gyda'r llinell nesaf. Flipping yn ôl at ein gliniadur. Nawr cyfan sy'n weddill yw i gymryd y cynnwys allan o'n newidyn dros dro gyfanrif ac yn eu storio yn y newidyn sy'n byw yn y cyfeiriad a b yn cynnal. Felly, rydyn ni'n mynd i b dereference yn effeithiol i gael mynediad at y newidyn hynny yw yn y cyfeiriad a b yn dal ynddo, ac rydym yn mynd i stwffio'r gwerth y tmp yn dal i mewn iddo. Flipping yn ôl at y iPad unwaith yn rhagor. Gallaf dileu'r gwerth yma, 2, ac yn lle hynny byddwn yn copïo'r hawl 1 i mewn iddo. Yna y llinell nesaf sy'n executes, wrth gwrs - os ydym yn troi yn ôl at y gliniadur - a yw hyn 6 pwynt, sef y pwynt yr oeddem am gael ein diagram llenwi'n llwyr allan. Felly flipping yn ôl at y iPad unwaith eto, dim ond er mwyn i chi weld y diagram a gwblhawyd, gallwch weld bod gennym 10 mewn, a 14 yn b, 1 mewn tmp, a 2 mewn x, a 1 mewn y. A oes unrhyw gwestiynau am hyn? A yw hyn yn gwneud mwy o synnwyr, ar ôl cerdded drwyddo? Gwneud llai o synnwyr? Gobeithio na. Iawn. Pointers yn bwnc anodd iawn. Un o'r guys ydym yn gweithio â nhw yn cael dywediad cyffredin iawn: "Er mwyn deall awgrymiadau, mae'n rhaid i chi ddeall awgrymiadau." Pa iawn yn fy marn wir. Mae'n cymryd peth amser i ddod i arfer ag ef. Gan dynnu llawer o luniau, gan dynnu llawer o ddiagramau cof fel yr un yma yn ddefnyddiol iawn, ac ar ôl i chi gerdded drwy esiampl ar ôl enghraifft ar ôl enghraifft, bydd yn dechrau gwneud synnwyr ychydig yn fwy ac ymdeimlad o ychydig yn fwy ac ymdeimlad ychydig yn fwy. Yn olaf, un diwrnod, bydd gennych y cyfan meistroli'n llwyr. Unrhyw gwestiynau cyn i ni symud ymlaen i'r broblem nesaf? Mae pob hawl. Felly, troi yn ôl i'r gliniadur. Y broblem nesaf gennym yw rhif 33 problem ar ffeil I / O. Chwyddo i mewn ar y darn ychydig. Problem 33 - Ie? [Daniel] Rwyf newydd gael gwestiwn cyflym. Mae hyn yn seren, neu seren, fe'i gelwir dereferencing pan fyddwch yn defnyddio seren o'r blaen. Beth yw ei enw pan fyddwch yn defnyddio'r ampersand o'r blaen? >> Mae'r ampersand cyn yw cyfeiriad-y gweithredwr. Felly, gadewch i ni sgrolio yn ôl i fyny. Wps. Im 'i mewn modd chwyddo felly ni allaf mewn gwirionedd sgrôl. Os ydym yn edrych ar y cod hwn yn gyflym iawn iawn yma, unwaith eto, un peth yn digwydd. Os ydym yn edrych ar y cod hwn i'r dde yma, ar y llinell hon os ydym yn gwneud yr alwad i gyfnewid, y ampersand yn unig yw dweud "yn cael y cyfeiriad lle byw x amrywiol." Pan fydd eich compiler yn casglu eich cod, mae'n rhaid iddo mewn gwirionedd yn gorfforol farcio lle mewn cof ar gyfer eich holl newidynnau i fyw. Ac felly yr hyn y gall y compiler wedyn wneud unwaith ei fod yn llunio popeth, yn gwybod, "O, yr wyf yn rhoi x yn y cyfeiriad 10. wyf yn rhoi y cyfeiriad yn 14." Gall yna llenwch y gwerthoedd hyn i chi. Felly, gallwch chi wedyn - mae'n gall wedyn yn trosglwyddo'r i mewn ac pasio a y yn ogystal. Mae'r rhain yn guys gael y cyfeiriad, ond maent hefyd, pan fyddwch yn pasio i mewn i'r swyddogaeth cyfnewid, hyn, mae gwybodaeth math y * int i'r dde yma, yn dweud wrth y casglwr, "Iawn, rydym yn mynd i gael eu dehongli cyfeiriad hwn fel cyfeiriad newidyn cyfanrif." Fel chyfeiriad int, sy'n wahanol i gyfeiriad newidyn cymeriad oherwydd bod int yn cymryd i fyny, ar beiriant 32-bit, yn cymryd fyny 4 bytes o le, tra bod gymeriad ond yn cymryd i fyny 1 beit o le. Felly mae'n bwysig gwybod hefyd beth yw - beth sy'n byw, pa fath o werth yn byw yn y cyfeiriad a gafodd eu pasio i mewn Neu y cyfeiriad yr ydych chi'n delio â nhw. Felly, yr ydych yn gwybod faint o bytes o wybodaeth i mewn gwirionedd yn llwytho o'ch RAM. Ac yna, ie, mae hyn, gweithredwr dereference fel chi yn gofyn, yn mynd ac yn cael gafael gwybodaeth mewn cyfeiriad penodol. Felly mae'n ei ddweud, gyda newidyn hwn a yma, yn trin y cynnwys a fel cyfeiriad, yn mynd i'r cyfeiriad hwnnw, ac yn tynnu allan, llwytho i mewn i'r prosesydd, llwyth mewn cofrestr y gwerthoedd gwirioneddol neu gynnwys sy'n byw yn y cyfeiriad hwnnw. Unrhyw mwy o gwestiynau? Mae'r rhain yn gwestiynau da. Mae'n llawer o derminoleg newydd hefyd. Mae hefyd yn fath o funky, gweld a a * mewn mannau gwahanol. Mae pob hawl. Felly, yn ôl i problem 33, ffeilio I / O. Roedd hyn yn un o'r problemau hynny fy mod yn meddwl un neu ddau o bethau yn digwydd. Un, mae'n bwnc gweddol newydd. Fe'i cyflwynwyd yn eithaf buan cyn y cwis, ac yna yr wyf yn meddwl ei fod yn fath o fel un o'r rhai problemau geiriau mewn mathemateg lle maent yn rhoi llawer o wybodaeth, ond nad ydych mewn gwirionedd yn darfod i fyny gorfod defnyddio tunnell ohono. Mae'r rhan gyntaf o'r broblem hon yn disgrifio beth yw ffeil CSV yn. Yn awr, ffeil CSV, yn ôl y disgrifiad, yn ffeil gwerthoedd atalnod-gwahanu. Y rheswm mae'r rhain yn i gyd yn ddiddorol, a'r rheswm chi erioed wedi eu defnyddio, yw, oherwydd, faint ydych erioed wedi defnyddio pethau fel Excel? Ffigur rhan fwyaf ohonoch wedi, yn ôl pob tebyg, neu a fydd yn eu defnyddio ar ryw adeg yn eich bywyd. Byddwch yn defnyddio rhywbeth fel Excel. Er mwyn cael y data allan o daenlen Excel neu wneud unrhyw fath o brosesu ag ef, os ydych chi eisiau i ysgrifennu rhaglen C neu Python raglen, Java rhaglen, i ddelio â'r data sydd wedi'i storio mewn 'na, un o'r ffyrdd mwyaf cyffredin i gael allan mewn ffeil CSV. A allwch chi agor Excel a phan fyddwch yn mynd i'r 'Save As' deialog, gallwch fynd allan ar ffurf ffeil CSV gwirioneddol. Defnyddiol gwybod sut i ddelio â'r pethau hyn. Mae'r ffordd y mae'n gweithio yw ei fod yn debyg i - yr wyf yn golygu, mae'n hanfod dynwared taenlen, lle, fel y gwelwn yma, yn y darn gadael-fwyaf, gennym yr holl enwau diwethaf. Felly, rydym wedi Malan, yna Hardison, ac yna Bowden, MacWilliam, ac yna Chan. Mae'r holl enwau diwethaf. Ac yna coma yn gwahanu'r enwau olaf o'r enwau cyntaf. David, Nate, Rob, Tommy, ac Zamyla. Rwyf bob amser yn cymysgu i fyny Robby a Tom. Ac yna, yn olaf, y drydedd golofn yw'r cyfeiriadau e-bost. Unwaith y byddwch yn deall hynny, gweddill y rhaglen yn eithaf syml i'w gweithredu. Beth rydym wedi'i wneud er mwyn dynwared y strwythur un yn ein C rhaglen yn cael ei rydym wedi defnyddio strwythur. Byddwn yn dechrau chwarae gyda hyn ychydig mwy yn ogystal. Gwelsom iddynt am yr ychydig cyntaf yn 3, set problem pan oeddem yn ymdrin â geiriaduron. Ond mae hyn yn strwythur staff storio enw olaf, enw cyntaf, ac e-bost. Yn union fel ein CSV ffeil storio. Felly, mae hyn yn unig yw trosi o un fformat i'r llall. Mae'n rhaid i ni droi, yn yr achos hwn, mae strwythur staff i mewn i linell, llinell atalnod-gwahanu, yn union fel 'na. Ydy hynny'n gwneud synnwyr? Rydych guys wedi cymryd yr holl cwis, felly yr wyf yn dychmygu eich bod wedi o leiaf wedi cael rhywfaint o amser i feddwl am hyn. Yn y swyddogaeth llogi, mae'r broblem yn gofyn i ni gymryd i mewn - zoom we'll i mewn ar y darn ychydig - cymryd mewn, strwythur staff a strwythur staff, gydag enw s, ac yn atodi ei chynnwys i'n staff.csv ffeil. Mae'n troi allan bod hyn yn eithaf syml i'w defnyddio. Byddwn yn fath o chwarae o gwmpas gyda swyddogaethau hyn ychydig yn fwy heddiw. Ond yn yr achos hwn, y swyddogaeth fprintf yn wir yn yr allwedd. Felly, gyda fprintf, gallwn argraffu, yn union fel chi guys wedi bod yn defnyddio printf y tymor cyfan. Gallwch printf linell i ffeil. Felly yn hytrach na dim ond gwneud yr alwad printf arferol lle byddwch yn rhoi iddo y llinyn fformat ac yna byddwch yn disodli'r holl newidynnau â'r dadleuon canlynol, gyda fprintf, eich dadl cyntaf yn lle y ffeil rydych am ei ysgrifennu. Pe baem yn edrych ar hyn yn y peiriant, er enghraifft, dyn fprintf, gallwn weld y gwahaniaeth rhwng printf a fprintf. 'N annhymerus' chwyddo i mewn yma ychydig. Felly, gyda printf, rydym yn rhoi ei fod yn llinyn fformat, ac yna y dadleuon dilynol yw'r holl newidynnau ar gyfer ailosod neu amnewid yn ein llinyn fformat. Tra gyda fprintf, y ddadl gyntaf yn wir hwn * ffeil o'r enw nant. Symud yn ôl dros yma at ein llogi, rydym eisoes wedi cael ein ffeil ffrwd * agor i ni. Dyna beth mae hyn yn llinell gyntaf ei wneud; mae'n agor y ffeil staff.csv, fydd yn agor yn Atodi modd, a'r hyn oll sydd ar ôl i ni ei wneud yw ysgrifennwch y strwythur staff at y ffeil. Ac, gadewch i ni weld, gwneud wyf am ddefnyddio'r iPad? Byddaf yn defnyddio y iPad. Mae gennym ddi-rym - gadewch i ni roi hyn ar y bwrdd er mwyn i mi ysgrifennu ychydig yn well - gwag llogi ac mae'n cymryd mewn un ddadl, strwythur staff o'r enw s. Got ein braces, rydym wedi cael ein * ffeil o'r enw ffeil, rydym wedi ein llinell fopen a roddwyd i ni, a byddaf yn ysgrifennu fel dotiau gan ei fod yn eisoes yn y pedia. Ac yna ar ein llinell nesaf, rydym yn mynd i wneud galwad i fprintf ac rydym yn mynd i basio yn y ffeil yr ydym am ei argraffu i, ac yna ein llinyn fformat sydd - 'N annhymerus' yn gadael i chi guys ddweud wrthyf sut mae'n edrych. Beth am i chi, Stella? Ydych chi'n gwybod beth yw rhan gyntaf y llinyn fformat yn edrych fel? [Stella] Nid wyf yn sicr. >> Mae croeso i chi ofyn i Jimmy. Ydych chi'n gwybod, Jimmy? [Jimmy] A fyddai'n dim ond yn para? Nid wyf yn gwybod. Dydw i ddim yn hollol siŵr. >> Iawn. Beth am, nad yw unrhyw un yn cael hyn yn gywir ar yr arholiad? Rhif pob hawl. Mae'n troi allan bod yma i gyd mae'n rhaid i ni ei wneud yw ein bod am i bob rhan o'n strwythur staff i gael eu hargraffu fel llinyn yn ein ffeil. Rydym yn unig yn defnyddio'r llinyn cymeriad amnewid dair gwaith gwahanol gan fod gennym enw olaf ddilyn gan goma, yna enw cyntaf ddilyn gan atalnod, ac yna yn olaf y cyfeiriad e-bost sy'n cael ei dilyn - nad yw'n gosod ar fy sgrîn - ond mae'n dilyn gan gymeriad Newline. Felly, yr wyf i'n mynd i ysgrifennu 'i jyst i lawr yno. Ac yna yn dilyn ein llinyn fformat, rydym yn unig yn cael y dirprwyon, yr ydym yn cael mynediad defnyddio'r nodiant dot a welsom mewn 3 set problem. Gallwn ddefnyddio s.last, s.first, a s.email i gymryd lle yn y tri gwerth yn ein llinyn fformat. Felly sut oedd hynny'n mynd? Gwneud synnwyr? Ydw? Na? O bosibl? Iawn. Y peth olaf yr ydym yn ei wneud ar ôl i ni wedi ei argraffu, ac ar ôl i ni agor ein ffeil: pryd bynnag y byddwn wedi agor ffeil, rydym bob amser yn rhaid i chi gofio ei gau. Oherwydd fel arall byddwn yn y pen draw gollwng y cof, gan ddefnyddio disgrifyddion ffeil. Felly, i gau, a swyddogaeth ydyn ni'n eu defnyddio? Daniel? [Daniel] mmap? >> Mmap, yn union. Felly, y rhan olaf o'r broblem hon oedd yn briodol cau'r ffeil, ddefnyddio'r swyddogaeth mmap, a dim ond yn edrych fel 'na. Ddim yn rhy crazy. Cool. Felly dyna problem 33 ar y cwis. Bydd gennym ffeil bendant yn fwy I / O dod i fyny. Byddwn yn gwneud ychydig yn fwy mewn darlith heddiw, neu yn adran heddiw, oherwydd dyna beth sy'n mynd i ffurfio y rhan fwyaf o'r hyn sydd ar y gweill pset. Gadewch i ni symud ymlaen o'r cwis yn y fan hon. Ydw? [Charlotte]] Pam mmap (ffeil) yn hytrach na mmap (staff.csv)? >> Ah. Oherwydd ei fod yn troi allan hynny - felly y cwestiwn, sy'n un gwych, Dyna pam, pan fyddwn yn ysgrifennu mmap, rydym yn ysgrifennu mmap (ffeil) newidyn seren yn hytrach na'r, enw ffeil staff.csv? A yw hynny'n gywir? Yeah. Felly, gadewch i ni edrych. Os byddaf yn newid yn ôl i fy laptop, a gadewch i ni edrych ar y swyddogaeth mmap. Felly, mae'r swyddogaeth mmap cau nant ac mae'n cymryd yn y pwyntydd at y nant yr ydym am ei gau, yn hytrach na'r enw ffeil gwirioneddol yr ydym am i gau. Ac mae hyn yn oherwydd y tu ôl i'r llenni, pan fyddwch yn gwneud galwad i fopen, pan fyddwch yn agor i fyny ffeil, rydych chi mewn gwirionedd dyrannu cof i gadw gwybodaeth am y ffeil. Felly, rydych wedi pwyntydd ffeil sy'n cynnwys gwybodaeth am y ffeil, fel y mae ar agor, ei faint, lle'r ydych ar hyn o bryd yn y ffeil, fel y gallwch wneud darllen ac ysgrifennu galwadau i'r lle hwnnw penodol o fewn y ffeil. Ydych yn darfod i fyny cau y pwyntydd yn hytrach na chau'r enw ffeil. Ydw? [Daniel] Felly, er mwyn defnyddio llogi, fyddech chi'n dweud - sut mae'n cael y mewnbwn defnyddiwr? A yw'r fprintf gweithredu fel GetString yn yr ystyr y bydd yn dim ond aros am y mewnbwn defnyddwyr ac yn gofyn i chi deipio hyn - neu aros i chi deipio y tri pheth i mewn? Neu a oes angen i chi ddefnyddio rhywbeth i weithredu llogi? >> Yeah. Felly nid ydym yn - y cwestiwn oedd, sut yr ydym yn cael y mewnbwn defnyddwyr er mwyn gweithredu llogi? A beth sydd gennym yma yw y galwr llogi, basiwyd yn y strwythur staff â phob un o'r data yn y strwythur yn barod. Felly fprintf yn gallu ysgrifennwch y data yn uniongyrchol at y ffeil. Does dim aros ar gyfer mewnbwn defnyddwyr. Mae'r defnyddiwr eisoes wedi rhoi mewnbwn gan priodol ei roi yn y strwythur staff. A phethau, wrth gwrs, yn torri os oes unrhyw un o'r arwyddion yn null, felly rydym yn sgrolio yn ôl i fyny yma ac rydym yn edrych ar ein strwythur. Mae gennym llinyn diwethaf, llinyn cyntaf, e-bost llinyn. Rydym bellach yn gwybod bod pawb mewn gwirionedd, o dan y cwfl, yn newidynnau * torgoch. Efallai na fydd neu a allai fod yn pwyntio i null. Efallai eu bod yn pwyntio i gof ar y domen, efallai cof ar y pentwr. Dydyn ni ddim yn gwybod, ond os bydd unrhyw un o'r arwyddion yn null, neu yn annilys, y byddwch yn sicr yn damwain ein swyddogaeth llogi. Dyna oedd rhywbeth a oedd fath o tu hwnt i gwmpas yr arholiad. Dydyn ni ddim yn poeni am hynny. Great. Iawn. Felly, yn symud ymlaen o'r cwis. Gadewch i ni gau y boi, ac rydym yn mynd i edrych ar pset 4. Felly, os ydych yn guys yn edrych ar y fanyleb pset, unwaith y gallwch gael mynediad iddo, cs50.net/quizzes, rydym yn mynd i fynd drwy rai o'r problemau heddiw adran. Rwy'n sgrolio i lawr - adran o gwestiynau yn dechrau ar y drydedd dudalen y fanyleb pset. Ac yn y rhan gyntaf yn gofyn i chi fynd i wylio'r byr ar ailgyfeirio a phibellau. A oedd yn fath o byr oer, yn dangos i chi rhai newydd, triciau llinell orchymyn oer y gallwch eu defnyddio. Ac yna mae gennym ychydig o gwestiynau i chi yn ogystal. Mae'r cwestiwn cyntaf am ffrydiau, y printf yn ysgrifennu at ball, rydym yn fath o cyffwrdd ar ychydig bach funud yn ôl. Mae hyn yn fprintf ein bod yn trafod dim ond yn cymryd mewn ffeil * nant fel ei ddadl. mmap cymryd mewn ffeil * ffrwd yn ogystal, a gwerth dychwelyd fopen yn rhoi i chi ffeil ffrwd * yn ogystal. Y rheswm nad ydym wedi gweld hynny o'r blaen pan rydym wedi delio â printf oherwydd printf mae ffrwd diofyn. A'r ffrwd diofyn y mae'n ysgrifennu byddwch yn cael gwybod amdanynt yn y tymor byr. Felly, yn bendant yn edrych arno. Yn adran heddiw, rydym yn mynd i siarad ychydig am GDB, ers y fwy cyfarwydd rydych yn ag ef, y mwy o ymarfer a gewch ag ef, y well byddwch yn i mewn gwirionedd yn hela i lawr chwilod yn eich cod eich hun. Mae hyn yn cyflymu'r broses o debugging yn aruthrol. Felly, trwy ddefnyddio printf, bob tro y byddwch yn gwneud hynny mae'n rhaid i chi ail-grynhoi eich cod, rhaid i chi ei redeg eto, weithiau rhaid i chi symud yr alwad printf o gwmpas, esbonia i cod, 'i jyst yn cymryd amser. Ein nod yw ceisio argyhoeddi chi fod â GDB, gallwch ei hanfod printf unrhyw beth ar unrhyw adeg yn ystod eich cod ac ydych chi byth yn rhaid i chi ail-grynhoi iddo. Dydych chi byth yn rhaid i chi ddechrau a chadw dyfalu ble i printf nesaf. Y peth cyntaf i'w wneud yw i gopïo y llinell hon ac yn cael y cod adran oddi ar y we. Rwy'n anfon copi o'r llinell o god sy'n dweud, "http://cdn.cs50.net wget". Rydw i'n mynd i gopïo. Rydw i'n mynd i fynd i fy offer, chwyddo allan fel y gallwch weld beth rwy'n ei wneud, ludo i mewn yno, a phan daro Enter, y gorchymyn wget yn llythrennol yn cael y we. Mae'n mynd i dynnu i lawr y ffeil oddi ar y Rhyngrwyd, ac mae'n mynd i gadw ar y cyfeiriadur cyfredol. Nawr, os wyf yn rhestru fy cyfeiriadur ar hyn o bryd gallwch weld fod gen ffeil hon section5.zip dde i mewn 'na. Y ffordd i ddelio â'r dyn yw unzip hynny, y gallwch ei wneud yn y llinell orchymyn, yn union fel hyn. Section5.zip. Bydd hynny'n unzip hynny, yn creu y ffolder i mi, chwyddo holl gynnwys, eu rhoi i mewn 'na. Felly nawr gallaf fynd yn 5 fy adran cyfeiriadur gan ddefnyddio'r gorchymyn cd. Cliriwch y sgrîn gan ddefnyddio clir. Felly, yn glir y sgrin. Nawr mae gen i terfynell glân 'n glws i ddelio â hwy. Nawr, os wyf yn rhestru'r holl ffeiliau a welaf yn y cyfeiriadur hwn, gwelwch fy mod i wedi cael 4 ffeil: buggy1, buggy2, buggy3, a buggy4. Rwyf hefyd wedi cael eu cyfatebol. Ffeiliau c. Nid ydym yn mynd i edrych ar y. Ffeiliau c am y tro. Yn hytrach, rydym yn mynd i'w defnyddio pan fyddwn yn agor i fyny GDB. Rydym wedi eu cadw o gwmpas fel bod gennym fynediad at y cod ffynhonnell wirioneddol pan fyddwn ni'n defnyddio GDB, ond y nod hwn yn rhan o'r adran hon yw i botsian o gwmpas gyda GDB a gweld sut y gallwn ei ddefnyddio i chyfrif i maes beth sy'n mynd o'i le gyda phob un o'r pedair rhaglen bygi. Felly, rydym yn jyst yn mynd i gwmpas yr ystafell yn gyflym iawn, ac rwy'n mynd i ofyn i rywun i redeg un o'r rhaglenni buggy, ac yna byddwn yn mynd fel grŵp drwy GDB, a gawn ni weld beth y gallwn ei wneud i ddatrys y rhaglenni hyn, neu o leiaf nodi'r hyn sy'n mynd o'i le ym mhob un ohonynt. Gadewch i ni ddechrau dros yma gyda Daniel. A fyddwch yn rhedeg buggy1? Gadewch i ni weld beth sy'n digwydd. [Daniel] Mae'n dweud mae 'na nam cais. >> Yeah. Yn union. Felly, os wyf yn rhedeg buggy1, i mi gael nam seg. Ar y pwynt hwn, gallwn fynd ac agor buggy1.c, geisio chyfrif i maes beth sy'n mynd o'i le, ond un o'r pethau mwyaf atgas am y camgymeriad fai seg yw nad yw'n dweud wrthych ar ba linell y pethau rhaglen mewn gwirionedd aeth o'i le a dorrodd. Rydych fath o rhaid i ni edrych ar y cod a chyfrif i maes defnyddio dyfalu a gwirio neu printf i weld beth sy'n mynd o'i le. Un o'r pethau mwyaf cŵl am GDB yw ei fod yn iawn, iawn hawdd at chyfrif i maes y llinell y mae eich ddamweiniau rhaglen. Mae'n gwbl werth yr ymdrech i ddefnyddio, hyd yn oed os dim ond ar gyfer hynny. Felly, i lesewch i fyny GDB, yr wyf teipio GDB, ac yna byddaf yn rhoi llwybr i'r gweithredadwy yr wyf am ei redeg. Yma dwi'n teipio gdb ./buggy1. Hit Enter. Yn rhoi i mi yr holl wybodaeth hon hawlfraint, ac i lawr yma byddwch yn gweld y llinell hon sy'n dweud, "Darllen symbolau o / cartref / jharvard/section5/buggy1. " Ac os aiff popeth yn iawn, byddwch yn gweld ei argraffu neges sy'n edrych fel hyn. Bydd yn darllen symbolau, bydd yn dweud "Rydw i'n darllen symbolau gan eich ffeil gweithredadwy," ac yna bydd yn cael y "gwneud" neges dros yma. Os ydych yn gweld rhywfaint o amrywiad arall o hyn, neu os ydych yn gweld na allai ddod o hyd i'r symbolau neu rywbeth fel 'na, beth mae hynny'n ei olygu yw eich bod nid yn unig wedi llunio eich gweithredadwy yn iawn. Pan fyddwn yn llunio rhaglenni ar gyfer defnyddio gyda GDB, mae'n rhaid i ni ddefnyddio'r baner arbennig-g, ac sy'n cael ei wneud gan ddiofyn os ydych yn llunio eich rhaglenni, dim ond drwy deipio gwneud neu wneud bygi neu wneud adennill, unrhyw un o'r rheiny. Ond os ydych yn casglu â llaw gyda Clang, yna bydd rhaid i chi fynd i mewn ac maent yn cynnwys y-g faner. Ar y pwynt hwn, nawr bod gennym GDB ein brydlon, mae'n eithaf syml i redeg y rhaglen. Gallwn naill ai deipio rhedeg, neu gallwn jyst deipio r. Gall gorchmynion GDB y rhan fwyaf o fod yn talfyrru. Fel arfer, i ddim ond un neu lythyrau cwpl, sydd yn eithaf 'n glws. Saad Felly, os ydych yn teipio r a tharo Enter, beth sy'n digwydd? [Saad] Cawn SIGSEGV, wall, ac yna hyn i gyd gobbledygook. >> Yeah. Fel rydym yn gweld ar y sgrin ar hyn o bryd, ac fel Saad dywedodd, pan fyddwn yn teipio redeg neu r a tharo Enter, rydym yn dal i gael y bai seg un. Felly defnyddio GDB yn datrys ein problem. Ond mae'n rhoi i ni gobbledygook, ac mae'n troi allan fod y gobbledygook mewn gwirionedd yn dweud wrthym lle mae'n digwydd. Er mwyn dosrannu y darn ychydig, y peth cyntaf yw swyddogaeth y mae popeth yn mynd o'i le. Mae hyn __ strcmp_sse4_2, ac mae'n dweud wrthym ei fod yn digwydd yn y ffeil a elwir yn sysdeps/i386, hyn i gyd, unwaith eto, math o lanast - ond llinell 254. Dyna fath o galed i dosrannu. Fel arfer, pan fyddwch yn gweld pethau fel hyn, hynny'n golygu ei fod yn SEG ffawtio yn un o'r llyfrgelloedd system. Felly rywbeth i'w wneud â strcmp. Rydych guys wedi gweld strcmp o'r blaen. Ddim yn rhy wallgof, ond mae hyn yn golygu bod strcmp wedi torri neu bod yna broblem gyda strcmp? Beth yn eich barn chi, Alexander? [Alexander] A yw hynny - yn 254 y llinell? A'r - nid yw'r deuaidd, ond nid yw'n eu nenfydau, ac yna mae iaith arall ar gyfer pob swyddogaeth. A yw bod 254 yn y swyddogaeth honno, neu -? >> Mae'n llinell 254. Mae'n edrych fel yn hyn. Ffeil, felly mae cod cynulliad yn ôl pob tebyg. Ond, yr wyf yn dyfalu y peth pwysicach yw, oherwydd ein bod wedi gotten nam seg, ac mae'n edrych fel ei fod yn dod oddi wrth y swyddogaeth strcmp, mae hyn yn awgrymu, felly, bod strcmp yn cael ei dorri? Ni ddylai, gobeithio. Felly, dim ond oherwydd bod gennych wall yn un o'r swyddogaethau system, fel arfer mae hynny'n golygu eich bod nid yn unig wedi galw yn gywir. Y peth cyflymaf ei wneud i chyfrif i maes beth sy'n digwydd mewn gwirionedd ar pan fyddwch yn gweld rhywbeth gwirion fel hyn, pryd bynnag y byddwch yn gweld nam seg, yn enwedig os oes gennych raglen sydd wedi defnyddio mwy na dim ond y prif, yw defnyddio olrheiniad. I crynhowch olrheiniad drwy ysgrifennu bt, yn hytrach na'r gair olrheiniad llawn. Ond Charlotte, beth sy'n digwydd pan fyddwch yn teipio bt a daro Chofnoda? [Charlotte] Mae'n dangos i mi dwy linell, 0 llinell a llinell 1. >> Yeah. Llinell Felly 0 a llinell 1. Mae'r rhain yn y fframiau pentwr gwirioneddol a oedd ar hyn o bryd yn chwarae pan fydd eich rhaglen chwalu. Gan ddechrau o'r ffrâm topmost, ffrâm 0, a mynd i'r gwaelod-fwyaf, sef ffrâm 1. Mae ein ffrâm topmost yn y ffrâm strcmp. Gallwch feddwl am hyn yn debyg i'r broblem honno yr oeddem yn ei wneud ar y cwis gyda'r awgrymiadau, lle rydym wedi cyfnewid ffrâm pentwr ar ben ffrâm pentwr prif a chawsom y newidynnau sy'n cyfnewid yn defnyddio ar ben y newidynnau y prif defnyddio. Dyma ein ddamwain ddigwyddodd yn ein swyddogaeth strcmp, a gafodd ei alw gan ein prif swyddogaeth, ac olrheiniad yn rhoi i ni nid yn unig y swyddogaethau y mae pethau wedi methu, ond mae hefyd yn dweud wrthym lle mae popeth yn galw o. Felly os wyf am symud dros ychydig yn fwy i'r dde, gallwn weld bod yeah, roedden ni ar linell 254 o'r ffeil hon strcmp-sse4.s. Ond yr alwad ei wneud ar buggy1.c, llinell 6. Felly mae hynny'n golygu y gallwn ei wneud - yw y gallwn yn unig yn mynd gwirio allan i weld beth oedd yn digwydd ar yn buggy1.c, llinell 6. Unwaith eto, mae yna gwpl o ffyrdd i wneud hyn. Un yw i adael allan o GDB neu os oes gennych eich cod agor mewn ffenestr arall a chroesgyfeirio. Mae hynny, ynddo'i hun, yn bur ddefnyddiol oherwydd yn awr os ydych chi yn oriau swyddfa a bod gennych nam seg a bod eich TF wedi meddwl lle mae popeth yn torri, gallwch ddweud, "O, llinell 6. Nid wyf yn gwybod beth sy'n mynd ymlaen, ond rhywbeth am llinell 6 yn achosi fy rhaglen i dorri. " Y ffordd arall o wneud hyn yw y gallwch chi arfer hon archa a elwir yn rhestr GDB. Gallwch hefyd crynhowch â l. Felly, os ydym yn taro l, beth ydym yn ei gael yma? Rydym yn cael criw cyfan o stwff od. Dyma'r cod cynulliad gwirioneddol sydd yn strcmp_sse4_2. Mae hyn yn edrych yn garedig o funky, a'r rheswm ein bod yn cael hyn oherwydd ar hyn o bryd, GDB wedi ni yn ffrâm 0. Felly, unrhyw bryd rydym yn edrych ar newidynnau, unrhyw adeg rydym yn edrych ar god ffynhonnell, rydym yn edrych ar y cod ffynhonnell pertains ar y ffrâm pentwr rydym ar hyn o bryd mewn Felly, er mwyn cael unrhyw beth ystyrlon, mae'n rhaid i ni symud i ffrâm pentwr sy'n gwneud mwy o synnwyr. Yn yr achos hwn, byddai'r ffrâm pentwr prif gwneud synnwyr ychydig yn fwy, oherwydd dyna oedd mewn gwirionedd yn y cod a ysgrifennodd. Nid y cod strcmp. Y ffordd y gallwch chi symud rhwng fframiau, yn yr achos hwn, gan fod gennym ddau, mae gennym 0 ac 1, chi wneud hynny gyda'r fyny ac i lawr gorchmynion. Os byddaf yn symud i fyny un ffrâm, nawr rwy'n yn y ffrâm pentwr prif. Gallaf symud i lawr i fynd yn ôl i lle roeddwn, mynd i fyny eto, mynd i lawr eto, ac ewch i fyny eto. Os ydych chi erioed wedi gwneud eich rhaglen yn GDB, byddwch yn cael damwain, byddwch yn cael y olrheiniad, a byddwch yn gweld ei fod mewn rhai ffeil nad ydych yn gwybod beth sy'n mynd ymlaen. Yr ydych yn ceisio rhestr, nid yw'r cod yn edrych yn gyfarwydd i chi, cymerwch olwg ar eich fframiau a chyfrif i maes ble rydych chi. Rydych fwy na thebyg yn y ffrâm pentwr anghywir. Neu o leiaf ydych chi mewn ffrâm pentwr nad yw'n un y gallwch chi wir yn debug. Nawr ein bod yn y ffrâm pentwr briodol, rydym yn y prif, nawr gallwn ddefnyddio'r gorchymyn rhestr at chyfrif i maes beth yr oedd y rheilffordd. A allwch ei weld, mae'n ei argraffu i ni iawn yma. Ond gallwn daro restru'r gyd yr un fath, a rhestr yn rhoi i ni yr allbrint hwn 'n glws y cod ffynhonnell wirioneddol sy'n digwydd yma. Yn benodol, gallwn edrych yn llinell 6. Gallwn weld beth sy'n mynd ymlaen yma. Ac mae'n edrych fel ein bod yn gwneud cymhariaeth llinyn rhwng y llinyn "CS50 creigiau" a argv [1]. Rhywbeth am hyn yn chwilfriwio. Felly Missy, a oes gennych unrhyw syniadau ynghylch beth y gellid mynd ymlaen yma? [Missy] Nid wyf yn gwybod pam ei fod yn chwilfriwio. >> Dydych chi ddim yn gwybod pam ei fod yn chwilfriwio? Jimmy, unrhyw syniadau? [Jimmy] Nid wyf yn hollol siŵr, ond y tro diwethaf rydym yn defnyddio llinyn cymharu, neu strcmp, roedd gennym fel tri achos gwahanol o dan ei. Nid oedd gennym ==, nid wyf yn credu, ar y dde yn y llinell gyntaf. Yn hytrach, mae'n cael ei rhannu'n dri, ac roedd un yn == 0, un yn <0, yr wyf yn meddwl, ac roedd un yn> 0. Felly, efallai rhywbeth fel 'na? >> Yeah. Felly, mae mater hwn o rydym yn ei wneud y gymhariaeth yn gywir? Stella? Unrhyw syniadau? [Stella] Nid wyf yn sicr. >> Ddim yn siwr. Daniel? Meddyliau? Iawn. Mae'n troi allan yr hyn sy'n digwydd i'r dde dyma yw pan fyddwn yn rhedeg y rhaglen ac rydym yn cael y bai seg, pan fyddwch yn rhedeg y rhaglen am y tro cyntaf, Daniel, wnaethoch chi roi unrhyw ddadleuon llinell orchymyn? [Daniel] Rhif >> Rhif Yn yr achos hwnnw, beth yw gwerth argv [1]? >> Nid oes unrhyw werth. >> Iawn. Wel, nid oes gwerth llinyn priodol. Ond mae rhywfaint o werth. Beth yw gwerth sy'n cael ei storio mewn 'na? >> A werth garbage? >> Mae'n naill ai gwerth garbage neu, yn yr achos hwn, ddiwedd y rhesi argv yn dod i ben bob amser gyda null. Felly beth mewn gwirionedd yn cael eu storio yno yn null. Y ffordd arall i ddatrys hyn, yn hytrach na meddwl ei drywydd, yw ceisio ei brintio. Dyma lle oeddwn yn dweud bod defnyddio GDB yn wych, oherwydd gallwch argraffu'r holl newidynnau, yr holl werthoedd yr ydych eisiau ddefnyddio'r gorchymyn 'n hylaw p-dandi. Felly, os wyf yn teipio p ac yna yr wyf deipio gwerth newidyn neu enw newidyn, dweud, argc, gwelaf fod argc yw 1. Os ydw i eisiau argraffu argv [0], gallaf wneud hynny yn union fel 'na. Ac fel y gwelsom, argv [0] bob amser yn enw eich rhaglen, bob amser yn enw'r gweithredadwy. Yma, gwelwch ei fod yn cael yr enw llwybr llawn. Gallaf hefyd argraffu argv [1] a gweld beth sy'n digwydd. Yma, rydym yn cael y math hwn o werth cyfriniol. Rydym yn cael y 0x0. Cofiwch ar ddechrau'r tymor pan fyddwn yn siarad am rifau hecsadegol? Neu fod cwestiwn bach ar ddiwedd pset 0 am sut i gynrychioli 50 yn hecs? Mae'r ffordd yr ydym yn ysgrifennu rhifau hecs yn CS, nid yn unig i ddrysu ein hunain gyda rhifau degol, yw ein bod bob amser yn rhagddodiad 0x iddynt. Felly, mae hyn rhagddodiad 0x bob amser yn unig yn golygu dehongli'r rhif canlynol fel rhif hecsadegol, nid fel llinyn, nid fel rhif degol, nid fel rhif deuaidd. Gan fod nifer 5-0 yn rhif dilys yn hecsadegol. Ac mae'n rhif mewn degol, 50. Felly, mae hyn yn unig yw sut yr ydym yn ddadamwyso. Felly, 0x0 dull 0 hecsadegol, sydd hefyd degol 0, deuaidd 0. Dim ond y 0 werth. Mae'n troi allan bod hyn yn beth null yw, mewn gwirionedd, yn y cof. Null yn unig yw 0. Yma, yr elfen storio yn argv [1] yn null. Felly, rydym yn ceisio gymharu ein "CS50 creigiau" llinyn i llinyn null. Felly dereferencing null, yn ceisio cael mynediad pethau ar null, rhai yn arfer mynd i achosi rhyw fath o wall neu bethau drwg eraill i ddigwydd. Ac mae'n troi allan nad strcmp yn gwirio i weld p'un a ydych wedi pasio mewn gwerth sy'n null. Yn hytrach, 'i jyst mynd yn ei flaen, yn ceisio gwneud ei peth, ac os yw'n seg diffygion, mae'n SEG diffygion, ac mae'n eich problem. Mae'n rhaid i chi fynd drwsio. Really yn gyflym, sut rydym yn atgyweiria hon broblem? Charlotte? [Charlotte] Gallwch wirio gan ddefnyddio os yw. Felly, os argv [1] yn null, == 0, yna dychwelyd 1, neu rywbeth [annealladwy]. >> Yeah. Felly dyna un ffordd wych i wneud hynny, fel y gallwn wirio i weld, y gwerth rydym am i basio i mewn strcmp, argv [1], a yw'n null? Os yw'n null, yna gallwn ddweud yn iawn, erthylu. Mae ffordd fwy cyffredin o wneud hyn yw i ddefnyddio gwerth argc. Gallwch weld dde yma ar ddechrau prif rydym yn hepgor y prawf cyntaf yr ydym yn ei wneud fel rheol pan fyddwn yn defnyddio dadleuon llinell orchymyn, a fydd yn profi a yw ein gwerth argc yw'r hyn yr ydym yn ei ddisgwyl. Yn yr achos hwn, rydym yn disgwyl o leiaf dwy ddadl, enw'r rhaglen ac un arall. Oherwydd ein bod chi ar fin i ddefnyddio'r ail ddadl fan hyn. Felly, cael rhyw fath o brawf ymlaen llaw, cyn ein galwad strcmp byddai profion ai peidio argv o leiaf 2, hefyd yn gwneud yr un math o beth. Gallwn weld os sy'n gweithio drwy redeg y rhaglen eto. Gallwch bob amser ailgychwyn eich rhaglen o fewn GDB, sydd yn neis iawn. Gallwch redeg, a phan fyddwch yn pasio mewn dadleuon at eich rhaglen, byddwch yn mynd heibio iddynt pan fyddwch yn alwad rhedeg, nid pan yr ydych yn llwytho i fyny GDB. Os gwnewch hyn gallwch gadw galw ar eich rhaglen gyda dadleuon gwahanol bob tro. Felly rhedwch, neu unwaith eto, gallaf deipio r, a gadewch i ni weld beth fydd yn digwydd os byddwn deipio "helo". Bydd bob amser yn gofyn i chi os ydych am ei gychwyn o'r dechrau eto. Fel arfer, ydych am ei gychwyn o'r dechrau eto. Ac ar y pwynt hwn, yn ailddechrau eto, y bydd yn argraffu allan y rhaglen yr ydym yn ei gynnal, buggy1, gyda'r ddadl hello, ac y bydd yn argraffu hyn safonol, mae'n dweud, "Byddwch yn cael D," wyneb trist. Ond doedden ni ddim yn SEG fai. Dywedodd y broses honno exited fel arfer. Felly, sy'n edrych yn eithaf da. Dim bai mwy o seg, rydym yn ei wneud yn y gorffennol, felly mae'n edrych fel oedd yn wir y byg bai seg ein bod yn cael. Yn anffodus, mae'n dweud wrthym ein bod yn cael D. Gallwn fynd yn ôl ac edrych ar y cod a gweld beth oedd yn digwydd yno at chyfrif i maes beth oedd - pam ei fod yn dweud wrthym ein bod yn cael D. Gadewch i ni weld, dyma oedd hyn printf dweud eich bod yn cael D. Os ydym yn teipio rhestr, fel eich bod yn cadw rhestr teipio, yn cadw ailadrodd i lawr drwy eich rhaglen, felly bydd yn dangos i chi y llinellau cyntaf eich rhaglen. Yna, bydd yn dangos i chi y llinellau nesaf, ac mae'r darn nesaf a'r darn nesaf. A bydd yn parhau i geisio mynd i lawr. Ac yn awr byddwn yn mynd i "llinell rhif 16 allan o amrediad." Oherwydd ei fod dim ond 15 o linellau. Os ydych yn cyrraedd y pwynt hwn ac yn eich meddwl, "Beth ddylwn i ei wneud?" gallwch ddefnyddio 'r archa help. Defnyddiwch cymorth ac yna ei rhoi enw'r gorchymyn. A ydych yn gweld y GDB yn rhoi i ni i gyd y math hwn o bethau. Mae'n dweud, "Heb unrhyw ddadl, yn rhestru deg o linellau mwy ar ôl neu o gwmpas y rhestr flaenorol. Rhestr - yn rhestru deg llinellau blaen - " Felly, gadewch i ni geisio defnyddio minws rhestr. A bod yn rhestru'r 10 llinell blaenorol; gallwch chi chwarae o gwmpas gyda rhestr ychydig. Gallwch wneud rhestr, rhestr -, gallwch hyd yn oed roi rhestru nifer, fel rhestr 8, a bydd yn rhestru'r 10 llinell o gwmpas llinell 8. A allwch chi weld beth sy'n mynd ymlaen yma yw eich bod wedi cael syml os arall. Os ydych chi deipio i mewn CS50 creigiau, y bydd yn argraffu allan "Byddwch yn cael A." Fel arall bydd yn argraffu allan "Byddwch yn cael D." Bummer dref. Mae pob hawl. Ydw? [Daniel] Felly, pan fyddaf yn ceisio gwneud CS50 creigiau heb y dyfyniadau, ei fod yn dweud "Rydych yn cael D." Angen arnaf y dyfyniadau i'w gael i weithio; pam hynny? >> Yeah. Mae'n troi allan y pryd - mae hyn yn un arall tidbit fach hwyl - pan fyddwch yn rhedeg y rhaglen, os ydym yn rhedeg ac rydym deipio i mewn CS50 creigiau, yn union fel Daniel yn dweud a wnaeth, ac rydych daro Enter, mae'n dal i ddweud ein bod yn cael D. A'r cwestiwn yw, pam? Ac mae'n troi allan bod ein terfynell a GDB dosrannu rhain fel dwy ddadl ar wahân. Oherwydd pan mae 'na le, mae hynny'n ymhlyg yn a ddaeth i ben y ddadl cyntaf; y ddadl nesaf ar fin dechrau. Y ffordd i gyfuno rhai yn ddau, neu ddrwg, yn un ddadl, yw defnyddio'r dyfyniadau. Felly yn awr, os ydym yn ei roi mewn dyfynodau ac yn rhedeg eto, rydym yn cael A. Felly, dim ond i ailadrodd, dim dyfyniadau, CS50 a chreigiau yn cael eu dosrannu fel dwy ddadl ar wahân. Gyda dyfyniadau, mae'n parsed fel un ddadl yn gyfan gwbl. Gallwn weld hyn gyda torbwynt. Hyd yn hyn rydym wedi bod yn rhedeg ein rhaglen, ac mae wedi bod yn rhedeg hyd nes naill ai yn SEG diffygion neu 'drawiadau' gwall neu hyd nes ei fod wedi terfynu ac mae'r holl wedi bod yn gwbl iawn. Nid yw hyn o reidrwydd y peth mwyaf defnyddiol, oherwydd weithiau gennych gwall yn eich rhaglen, ond nid yw'n achosi wall. Dyw hi ddim yn achosi eich rhaglen i atal neu unrhyw beth fel 'na. Y ffordd i gael GDB i oedi eich rhaglen ar bwynt penodol yw pennu torbwynt. Gallwch naill ai wneud hyn drwy osod torbwynt ar enw swyddogaeth neu gallwch osod torbwynt ar linell arbennig o god. Rwy'n hoffi i osod breakpoints ar enwau swyddogaeth, oherwydd - hawdd i'w gofio, ac os ydych mewn gwirionedd yn mynd i mewn ac yn newid eich cod ffynhonnell i fyny ychydig bach, yna bydd eich torbwynt mewn gwirionedd yn aros yn yr un lle o fewn eich cod. Ond os ydych yn defnyddio rhifau llinell, ac mae'r niferoedd yn newid llinell oherwydd eich bod yn ychwanegu neu ddileu rhai cod, yna eich breakpoints i gyd yn sgriwio llwyr i fyny. Un o'r pethau mwyaf cyffredin gallaf ei wneud yw gosod torbwynt ar y prif swyddogaeth. Yn aml byddaf yn lesewch i fyny GDB, byddaf yn teipio prif b, pwyswch Enter, a bydd hynny'n gosod torbwynt ar y prif swyddogaeth a dim ond yn dweud, "saib y rhaglen cyn gynted ag y byddwch yn dechrau rhedeg," a bod y ffordd, pan fyddaf yn rhedeg fy rhaglen gyda, dyweder, CS50 creigiau fel dau dadleuon a tharo Enter, mae'n mynd at y prif swyddogaeth ac mae hefyd yn atal i'r dde wrth y llinell cyntaf, dde cyn mae'n gwerthuso swyddogaeth strcmp. Ers i mi i'n stopio'r, yn awr y gallaf ddechrau newid y gwasarn o gwmpas a gweld beth sy'n mynd ymlaen gyda phob un o'r newidynnau gwahanol sy'n cael eu pasio i mewn i fy rhaglen. Yma gallaf argraffu argc a gweld beth sy'n mynd ymlaen. Gweler bod argc yw 3, am ei fod yn cael 3 gwerth gwahanol ynddo. Mae'n cael enw'r rhaglen, mae'n cael y ddadl gyntaf a'r ail ddadl. Gallwn argraffu rhai y tu allan drwy edrych ar argv [0], argv [1], a argv [2]. Felly nawr gallwch hefyd weld pam yr alwad hon strcmp yn mynd i fethu, oherwydd eich bod yn gweld ei fod yn rhannu y CS50 a'r creigiau i mewn i ddwy ddadl ar wahân. Ar y pwynt hwn, unwaith y byddwch wedi taro torbwynt, gallwch barhau i gamu trwy eich rhaglen linell wrth linell, yn hytrach na dechrau eich rhaglen eto. Felly, os nad ydych am i ddechrau eich rhaglen eto a dim ond yn parhau ymlaen o fan hyn, gallwch ddefnyddio'r gorchymyn yn parhau ac y bydd yn parhau i redeg y rhaglen hyd y diwedd. Yn union fel y gwnaeth yma. Fodd bynnag, os wyf yn ailgychwyn y rhaglen, CS50 creigiau, mae'n taro fy torbwynt eto, a'r tro hwn, os nad wyf am i jyst yn mynd yr holl ffordd drwy weddill y rhaglen, Gallaf defnyddiwch y gorchymyn nesaf, yr wyf hefyd crynhowch â n. A bydd hyn yn camu drwy'r llinell rhaglen drwy linell. Felly, gallwch wylio wrth i bethau gweithredu, fel newidynnau newid, wrth i bethau yn cael eu diweddaru. Sydd yn eithaf 'n glws. Y peth oer arall yn hytrach nag ailadrodd yr un gorchymyn drosodd a drosodd a throsodd, os ydych yn unig daro Enter - felly dyma byddwch yn gweld nad wyf wedi teipio mewn unrhyw beth - os Fi jyst daro Enter, bydd yn ailadrodd y gorchymyn blaenorol, neu 'r archa GDB blaenorol yr wyf newydd ei rhoi i mewn Gallaf gadw taro Bwydo i mewn a bydd yn cadw camu trwy fy linell wrth linell cod. Byddwn yn eich annog guys i fynd edrych ar y rhaglenni buggy eraill yn ogystal. Nid oes gennym amser i fynd drwy bob un ohonynt heddiw yn adran. Mae'r cod ffynhonnell yno, fel y gallwch math o weld beth sy'n mynd ymlaen y tu ôl i'r llenni os ydych yn mynd yn sownd mewn gwirionedd, ond o leiaf, dim ond ymarfer llesáu i fyny GDB, rhedeg y rhaglen nes ei fod yn torri ar chi, cael y olrheiniad, figuring allan beth fydd swyddogaeth y ddamwain oedd yn, yr hyn y llinell oedd ar, argraffu rhai gwerthoedd amrywiol, dim ond er mwyn i chi gael blas ar ei gyfer, oherwydd bydd hynny'n wir yn eich helpu i fynd ymlaen. Ar y pwynt hwn, rydym yn mynd i roi'r gorau allan o GDB, yr ydych yn defnyddio rhoi'r gorau iddi neu dim ond q. Os yw eich rhaglen yn y canol o redeg o hyd, ac nid yw wedi exited, bydd bob amser yn gofyn i chi, "Ydych chi'n siŵr eich bod am roi'r gorau iddi?" Alli jyst daro ie. Nawr rydyn ni'n mynd i edrych ar y broblem nesaf sydd gennym, sef y rhaglen gath. Os ydych yn gwylio y tymor byr ar ailgyfeirio a phibellau, byddwch yn gweld bod Tommy yn defnyddio'r rhaglen hon bod y bôn argraffu holl allbwn o ffeil ar y sgrin. Felly, os wyf yn rhedeg cath, mae hyn mewn gwirionedd yn rhaglen adeiladedig i mewn i'r peiriant, ac os oes gennych Macs gallwch wneud hyn ar eich Mac hefyd, os ydych yn agor i fyny derfynnell. Ac rydym - cath, gadewch i ni ddweud, cp.c, a daro Chofnoda. Beth oedd hyn, os byddwn yn sgrolio i fyny ychydig a gweld lle rydym yn rhedeg y llinell, neu os ydym yn rhedeg y gorchymyn cath, yn llythrennol argraffu yn unig allan y cynnwys cp.c i'n sgrin. Gallwn gynnal eto a gallwch eu rhoi mewn ffeiliau lluosog at ei gilydd. Felly, gallwch chi ei wneud cp.c cath, ac yna gallwn hefyd concatenate y ffeil cat.c, sef y rhaglen rydym chi ar fin i ysgrifennu, a bydd yn argraffu ffeiliau ddau gefn wrth gefn at ein sgrin. Felly, os ydym yn sgrolio i fyny ychydig bach, rydym yn gweld bod pan fyddwn yn rhedeg hyn, cp.c cath cat.c, gyntaf, argraffu y ffeil cp, ac yna islaw iddo, ei hargraffu allan y ffeil cat.c dde i lawr yma. Rydym yn mynd i ddefnyddio hyn i ychydig o gael ein traed gwlyb. Chwarae o gwmpas gyda argraffu syml i'r derfynell, yn gweld sut mae hynny'n gweithio. Os ydych yn guys yn agor i fyny gyda gedit cat.c, pwyswch Enter, gallwch weld y rhaglen yr ydym chi ar fin i ysgrifennu. Rydym wedi cynnwys y plât boeler 'n glws, felly nid oes rhaid i ni dreulio amser yn teipio i gyd hynny. Rydym hefyd yn edrych ar y nifer o ddadleuon basio i mewn Rydym yn argraffu neges ddefnydd 'n glws. Dyma'r math o beth sydd, unwaith eto, fel yr ydym wedi bod yn siarad am, mae bron fel cof cyhyrau. Dim ond cofiwch gadw gwneud yr un math o bethau a bob amser yn argraffu rhyw fath o neges defnyddiol fel bod pobl yn gwybod sut i redeg eich rhaglen. Gyda cath, mae'n eithaf syml; ni ​​jyst yn mynd i fynd drwy bob un o'r gwahanol ddadleuon bod eu trosglwyddo i ein rhaglen, ac rydym yn mynd i argraffu eu cynnwys allan i'r sgrin un ar y tro. Er mwyn argraffu ffeiliau allan i'r sgrin, rydyn ni'n mynd i wneud rhywbeth tebyg iawn i'r hyn a wnaethom ar ddiwedd y cwis. Ar ddiwedd y cwis, sy'n llogi rhaglen, roedd yn rhaid i agor i fyny ffeil, ac yna roedd rhaid i ni argraffu iddo. Yn yr achos hwn, rydym yn mynd i agor i fyny ffeil, ac rydym yn mynd i ddarllen ohono yn lle hynny. Yna rydym yn mynd i argraffu, yn hytrach na i ffeil, rydyn ni'n mynd i argraffu ar y sgrin. Felly, argraffu ar y sgrin, os ydych wedi gwneud popeth o'r blaen gyda printf. Felly nid yw hynny'n rhy crazy. Ond darllen ffeil yn fath o 'n annaearol. Byddwn yn mynd drwy hynny ychydig ar y tro. Os ydych yn guys mynd yn ôl at y broblem olaf ar eich cwis, problem 33, y llinell gyntaf ein bod ni'n mynd i'w wneud yma, agor y ffeil, yn debyg iawn i'r hyn a wnaethom yno. Felly Stella, beth mae hynny'n ei olwg llinell fel, pan fyddwn yn agor ffeil? [Stella] * FILE Cyfalaf, file - >> Iawn. >> - Yn hafal i fopen. >> Yup. Pa yn yr achos hwn? Mae'n yn y sylw. >> Mae yn y sylw? argv [i] a r? >> Yn union. Hawl ar. Felly Stella yn hollol gywir. Dyma beth y llinell edrych fel. Rydym yn mynd i gael ffeil amrywiol nant, ei storio mewn * FILE, felly mae'r holl gapiau, Bydd FILE, *, ac enw'r newidyn hwn fod yn ffeil. Gallem ei alw'n beth bynnag rydym yn hoffi. Gallem ei alw'n first_file, neu file_i, beth bynnag hoffem. Ac yna enw'r ffeil ei phasio i mewn ar y llinell orchymyn i'r rhaglen hon. Felly, mae'n cael ei storio yn argv [i,] ac yna rydym yn mynd i agor y ffeil yn y modd darllen. Nawr ein bod wedi agor y ffeil, beth yw'r peth yr ydym bob amser yn rhaid i chi gofio gwneud pryd bynnag y byddwn wedi agor ffeil? Ei gau. Felly Missy, sut rydyn ni'n cau'r ffeil? [Missy] mmap (ffeil) >> mmap (ffeil). Yn union. Great. Iawn. Os ydym yn edrych ar hyn i wneud sylwadau i'r dde yma, mae'n ei ddweud, "Open argv [i] ac argraffu ei gynnwys i stdout." Safon allan yn enw rhyfedd. Stdout yn unig yw ein ffordd ni o ddweud rydym am ei argraffu i'r derfynell; yr ydym am ei argraffu at y nant allbwn safonol. Gallwn mewn gwirionedd yn cael gwared ar y sylw iawn yma. Rydw i'n mynd i gopïo a gludo ers dyna beth a wnaethom. Ar y pwynt hwn, yn awr mae'n rhaid i ni ddarllen y darn ffeil gan bit. Rydym wedi trafod un neu ddau o ffyrdd o ffeiliau darllen. Pa rai yw eich ffefrynnau hyd yn hyn? Pa ffyrdd ydych chi wedi gweld neu a ydych yn cofio, i ddarllen ffeiliau? [Daniel] fread? >> Fread? Felly fread yn un. Jimmy, ydych chi'n gwybod unrhyw rai eraill? [Jimmy] Rhif >> Iawn. Nope. Charlotte? Alexander? Unrhyw rai eraill? Iawn. Felly, y rhai eraill yn fgetc, yn un y byddwn yn defnyddio llawer. Mae hefyd yn fscanf; chi guys gweld patrwm yma? Maent i gyd yn dechrau gyda f. Unrhyw beth i wneud gyda ffeil. Mae fread, fgetc, fscanf. Mae'r rhain i gyd o swyddogaethau darllen. Ar gyfer ysgrifennu gennym fwrite, mae gennym fputc yn hytrach na fgetc. Rydym hefyd wedi fprintf hoffi a welsom ar y cwis. Gan fod hyn yn broblem sy'n golygu darllen o ffeil, rydym yn mynd i ddefnyddio un o'r tair swyddogaeth. Nid ydym yn mynd i ddefnyddio swyddogaethau hyn i lawr yma. Mae'r swyddogaethau hyn yn cael eu gweld i gyd yn y safon I / O llyfrgell. Felly, os ydych yn edrych ar frig y rhaglen hon, gallwch weld ein bod wedi cynnwys eisoes ffeil pennawd ar gyfer y safon I / O llyfrgell. Os ydym am i chyfrif i maes pa un yr ydym am ei ddefnyddio, gallwn bob amser yn agor i fyny 'r tudalennau dyn. Felly gallwn deipio stdio dyn a darllen popeth am y mewnbwn stdio a swyddogaethau allbwn yn C. A gallwn eisoes weld oh, edrych. Mae'n sôn am fgetc, mae'n sôn am fputc. Felly gallwch ddrilio i lawr ychydig ac edrych ar, dyweder, fgetc ac edrych ar ei dudalen dyn. Gallwch weld ei bod yn mynd ynghyd â criw cyfan o swyddogaethau eraill: fgetc, fgets, getc, getchar, yn cael, ungetc, ac mae ei mewnbwn o gymeriadau a llinynnau. Felly dyma sut yr ydym yn darllen yn y cymeriadau a llinynnau o ffeiliau o fewnbwn safonol, sydd yn ei hanfod gan y defnyddiwr. A dyma sut yr ydym yn ei wneud mewn C. gwirioneddol Felly, nid yw hyn yn defnyddio'r GetString a swyddogaethau GetChar a ddefnyddiwyd gennym o'r llyfrgell CS50. Rydym yn mynd i wneud y broblem hon mewn dwy ffordd fel y gallwch weld dwy ffordd wahanol o wneud hynny. Mae'r swyddogaeth fread bod Daniel grybwyllwyd a fgetc yn ffyrdd da i wneud hynny. Rwy'n credu fgetc yn ychydig yn haws, oherwydd ei fod dim ond, fel y gwelwch, un ddadl, y * FILE ein bod yn ceisio i ddarllen y cymeriad o, ac mae ei werth dychwelyd yn int. Ac mae hyn yn ychydig yn ddryslyd, dde? Oherwydd ein bod ni'n cael gymeriad, felly pam nad yw'r ffurflen hon golosg? Chi guys gennych unrhyw syniadau ar pam nad yw hyn yn dychwelyd golosg? [Atebion Missy, annealladwy] >> Yeah. Felly Missy yn hollol gywir. Os yw'n ASCII, yna gallai hyn cyfanrif yn cael ei fapio i torgoch gwirioneddol. Gallai fod yn nod ASCII, ac mae hynny'n iawn. Dyna'n union beth sy'n digwydd. Rydym yn defnyddio int dim ond oherwydd ei fod wedi darnau mwy. Mae'n fwy na golosg, ein torgoch dim ond 8 did, bod 1 beit ar ein 32-bit peiriannau. Ac mae int Mae gwerth pob un o'r 4 bytes 'o le. Ac mae'n troi allan bod y ffordd fgetc yn gweithio, os ydym yn sgroliwch i lawr yn ein crynodeb ar y dudalen hon dyn ychydig bach, sgrolio holl ffordd i lawr. Mae'n troi allan eu bod yn defnyddio'r gwerth arbennig o'r enw EOF. Mae'n gyson arbennig fel y gwerth dychwelyd y swyddogaeth fgetc pryd bynnag y byddwch yn taro ar ddiwedd y ffeil neu os byddwch yn cael gwall. Ac mae'n troi allan y byddai gwneud y cymariaethau hyn gyda EOF yn briodol, ydych am gael y swm ychwanegol o wybodaeth sydd gennych mewn int yn hytrach na defnyddio newidyn torgoch. Er bod fgetc yn effeithiol cael cymeriad o ffeil, ydych eisiau cofio ei fod yn dychwelyd rhywbeth sydd o int fath i chi. Wedi dweud hynny, mae'n weddol hawdd i'w ddefnyddio. Mae'n mynd i roi i ni cymeriad, felly i gyd mae'n rhaid i ni ei wneud yw parhau i ofyn y ffeil, "Rhowch i mi y cymeriad nesaf, yn rhoi i mi y cymeriad nesaf, yn rhoi i mi y cymeriad nesaf," nes inni gyrraedd ddiwedd y ffeil. A bydd hynny'n tynnu mewn un cymeriad ar y tro gan ein ffeil, ac yna gallwn wneud fel y mynnom ag ef. Gallwn ei storio, gallwn ei ychwanegu at llinyn, gallwn ei hargraffu. A oes unrhyw un o hynny. Chwyddo yn ôl allan ac yn mynd yn ôl at ein rhaglen cat.c, os ydym yn mynd i ddefnyddio fgetc, gallai sut yr ydym yn ymdrin â'r llinell nesaf o god? Rydym yn mynd i ddefnyddio - bydd fread gwneud rhywbeth ychydig yn wahanol. A'r tro hwn, rydym yn jyst yn mynd i ddefnyddio fgetc i gael un cymeriad ar y tro. I brosesu ffeiliau cyfan, a allai hyn sydd gennym i'w wneud? Faint o gymeriadau sydd mewn ffeil? Mae yna lawer. Felly, eich bod eisiau i gael un ac yna gael un arall a chael un arall a chael un arall. Pa fath o algorithm yn eich barn chi fyddai'n rhaid i ni ddefnyddio yma? Pa fath o -? [Alexander] A am ddolen? >> Yn union. Rhyw fath o ddolen. A ar gyfer dolen mewn gwirionedd fawr, yn yr achos hwn. Ac fel chi yn dweud, mae'n swnio fel petaech eisiau ddolen dros y ffeil cyfan, cael cymeriad ar y tro. Unrhyw awgrymiadau ar yr hyn a allai edrych fel? [Alexander, annealladwy] >> Iawn, dim ond dweud wrthyf yn Saesneg beth rydych yn ceisio ei wneud? [Alexander, annealladwy] Felly, yn yr achos hwn, mae'n swnio fel rydym yn jyst yn ceisio at ddolen dros y ffeil gyfan. [Alexander] Felly, fi > Mae maint -? Amcana maint y ffeil, dde? Mae maint - we'll dim ond ysgrifennu fel hyn. Maint y ffeil am y tro, i + +. Felly, mae'n troi allan fod y ffordd yr ydych yn gwneud hyn drwy ddefnyddio fgetc, ac mae hyn yn newydd, yw nad oes unrhyw ffordd hawdd i ychydig gael y maint o ffeil gyda'r math hwn "sizeof" o adeiladu eich bod chi wedi ei weld o'r blaen. Pan fyddwn yn defnyddio'r swyddogaeth fgetc, rydym yn cyflwyno rhyw fath o newydd, cystrawen ffynci i hyn ar gyfer dolen, lle yn hytrach na defnyddio dim ond cownter sylfaenol i fynd cymeriad gan cymeriad, rydym yn mynd i dynnu un cymeriad ar y tro, un cymeriad ar y tro, ac mae'r ffordd yr ydym yn gwybod ein bod ar y diwedd nid yw'n pan fyddwn wedi cyfrif nifer penodol o gymeriadau, ond pan fydd y cymeriad rydym yn tynnu allan yn y diwedd arbennig o gymeriad ffeil. Felly, gallwn wneud hyn - yr wyf yn galw hyn yn ch, ac rydym yn mynd i ymgychwyn ei gyda'n alwad gyntaf i gael y cymeriad cyntaf allan o'r ffeil. Felly, mae hyn yn rhan dde yma, mae hyn yn mynd i gael gymeriad allan o'r ffeil ac yn ei storio yn y ch amrywiol. Rydym yn mynd i ddal i wneud hyn nes inni gyrraedd ddiwedd y ffeil, yr ydym yn ei wneud drwy brofi ar gyfer y cymeriad beidio â bod yn gyfartal i'r cymeriad EOF arbennig. Ac yna yn hytrach na gwneud ch + +, a fyddai'n dim ond cynyddiad gwerth, felly os ydym yn darllen y tu allan A y ffeil, cyfalaf A, dyweder, ch + + Byddai rhoi i ni b, ac yna byddem yn cael c ac yna d. Na yn glir yr hyn yr ydym ei eisiau. Yr hyn yr ydym am ei gael yma yn y rhan olaf yn cael ei rydym yn awyddus i gael y cymeriad nesaf o'r ffeil. Felly, gallai sut yr ydym yn cael y cymeriad nesaf o'r ffeil? Sut ydym yn cael y nod cyntaf o'r ffeil? [Myfyrwyr] fgetfile? >> Fgetc, neu, mae'n ddrwg gennyf, yr oeddech yn gywir. I gamsillafu yn iawn yno. Felly yeah. Yma yn hytrach na gwneud ch + +, ni jyst yn mynd i alw fgetc (ffeil) unwaith eto a storio'r canlyniad yn ein amrywiol ch un. [Gwestiwn Myfyrwyr, annealladwy] >> Dyma lle y guys FILE * yn arbennig. Mae'r ffordd y maent yn gweithio yw eu bod - pan fyddwch yn agor - pan fyddwch yn gwneud yr alwad fopen, y * FILE yn effeithiol yn gwasanaethu fel pwyntydd i ddechrau'r ffeil. Ac yna bob tro y byddwch yn ffonio fgetc, mae'n symud un cymeriad trwy'r ffeil. Felly, pryd bynnag y byddwch yn galw hyn, rydych yn incrementing y pwyntydd ffeil gan un cymeriad. A phan fyddwch fgetc eto, yr ydych chi'n symud cymeriad arall ac un arall cymeriad ac un arall ac un arall cymeriad cymeriad. [Gwestiwn Myfyrwyr, annealladwy] >> A that's - yeah. Mae'n fath o hud yma o dan y cwfl. 'Ch jyst cadw incrementing drwodd. Ar y pwynt hwn, rydych yn gallu mewn gwirionedd yn gweithio gyda chymeriad. Felly, gallai sut yr ydym yn argraffu hwn at y sgrîn, yn awr? Gallwn ddefnyddio'r peth printf ag y byddwn yn defnyddio o'r blaen. Ein bod ni wedi bod yn defnyddio pob semester. Gallwn alw printf, a gallwn basio yn y cymeriad yn union fel 'na. Ffordd arall o wneud hyn yw yn hytrach na defnyddio printf a gorfod gwneud hyn llinyn fformat, gallwn hefyd ddefnyddio un o swyddogaethau eraill. Gallwn ddefnyddio fputc, sy'n argraffu cymeriad at y sgrîn, ac eithrio os edrychwn ar fputc - gadewch i mi chwyddo allan ychydig. Rydym yn gweld beth braf yn y mae'n ei gymryd yng nghymeriad ein bod yn darllen gan ddefnyddio fgetc, ond yna mae'n rhaid i ni roi cynnig ffrwd i argraffu iddo. Gallwn hefyd ddefnyddio'r swyddogaeth putchar, fydd yn rhoi yn uniongyrchol i allan safonol. Felly, mae criw cyfan o opsiynau gwahanol y gallwn eu defnyddio ar gyfer argraffu. Maen nhw i gyd yn safon I / O llyfrgell. Pryd bynnag y byddwch eisiau argraffu - felly printf, yn ddiofyn, yn argraffu i safon arbennig o nant, sef bod stdout. Felly gallwn dim ond cyfeirio ato fel math o hud y gwerth hwn, stdout yma. Wps. Rhowch y colon tu allan. Mae hyn yn llawer o newydd, gwybodaeth ffynci yma. Mae llawer o hyn yn iawn idiomatig, yn yr ystyr bod hyn yn cod sy'n cael ei ysgrifennu fel hyn dim ond oherwydd ei fod yn lân i ddarllen, yn hawdd i'w ddarllen. Mae yna nifer o wahanol ffyrdd i wneud hynny, llawer o wahanol swyddogaethau y gallwch eu defnyddio, ond rydym yn tueddu i ddim ond dilyn y patrymau un drosodd a throsodd. Felly peidiwch â synnu os ydych yn gweld cod fel hyn yn dod i fyny eto ac eto. Mae pob hawl. Ar y pwynt hwn, mae angen i ni dorri ar gyfer y diwrnod. Diolch am ddod. Diolch am wylio, os ydych ar-lein. A welwn ni chi wythnos nesaf. [CS50.TV]