[Powered by Google Translate] [SEKSYON 5: GEN MWENS konfòtab]
[Nate Hardison, Inivèsite Harvard]
[Sa a se CS50.] [CS50.TV]
Se konsa, akeyi tounen, guys.
Byenveni nan seksyon 5 la.
Nan pwen sa a, li te gen ranpli egzamen 0 ak te wè ki jan ou te fè,
èspere ke ou santi ou reyèlman bon paske mwen te trè enpresyone pa nòt yo nan seksyon sa a.
Pou espektatè i sou entènèt nou an, nou te gen yon koup nan kesyon
sou de pwoblèm ki sot pase yo sou mete nan pwoblèm - oswa sou egzamen an, olye.
Se konsa, nou ap ale nan ale sou moun ki vrèman rapid pou ke tout moun wè sa ki te pase
ak ki jan yo ale nan solisyon an reyèl olye ke jis gade solisyon nan tèt li.
Nou pwal ale sou koup la dènye nan pwoblèm reyèlman byen vit, 32 ak 33.
Jis, ankò, se konsa ke telespektatè yo sou entènèt ka wè sa.
>> Si ou ale nan pwoblèm ou an 32, ki se nan paj 13,
13 soti nan 16, pwoblèm 32 se tout sou echanj.
Li te sou tout échanjé de nonb antye.
Li nan pwoblèm nan ki nou ta fin janbe yon koup de fwa nan konferans.
Ak nan isit la, sa nou te mande ou fè a se yon tras memwa rapid.
Pou ranpli nan valè yo nan varyab yo jan yo sou chemine a
kòm kòd la ale nan fonksyon sa a swap.
An patikilye, ki sa nou ap chèche a - I'm pral mete sa a iPad desann -
an patikilye, ki sa nou ap chèche a se liy sa a resansman 6 isit la menm.
Epi li resansman 6 pou jis continuité ak pwoblèm nan anvan yo.
Ki sa nou vle fè se montre oswa mete lejann sou eta a nan memwa
kòm li se nan moman an lè nou egzekite nan nimewo sa a liy, 6,
ki se efektivman yon retou nan fonksyon swap nou isit la menm.
Si nou desann isit la, nou te wè ki adrès ki nan tout bagay nan memwa te founi pou nou.
Sa a se trè kle; nou pral tounen vin jwenn li nan jis moman yon.
Lè sa a, desann isit la nan pati anba a, nou te gen yon dyagram memwa ti kras ke nou ap ale nan, al gade nan.
Mwen gen aktyèlman fè sa a soti sou iPad m 'yo.
Se konsa, mwen pral altène retounen ak lide ant iPad a ak kòd sa a jis pou referans.
>> Ann kòmanse. Premyèman, kite a konsantre sou koup la nan premye liy nan prensipal isit la menm.
Pou yo kòmanse, nou ap ale nan inisyalize x nan 1 ak y nan 2.
Se konsa, nou gen de varyab nonb antye relatif yo, yo ap tou de yo pral mete sou pil la.
Nou pral mete yon 1 ak yon 2 nan yo.
Se konsa, si mwen baskile sou nan iPad m 'yo, èspere ke, kite la wè -
Apple TV mirwar, epi gen nou ale. Oke.
Se konsa, si mwen baskile sou nan iPad m 'yo,
Mwen vle inisyalize x nan 1 ak y nan 2.
Nou fè sa byen tou senpleman pa ekri yon 1 nan bwat ki make x
ak yon 2 nan bwat ki make y. Ase senp.
Se konsa, kounye a kite a tounen nan konpitè pòtatif li a, wè sa ki k ap pase answit.
Se konsa, liy sa a pwochen se kote bagay sa yo jwenn difisil.
Nou pase adrès ki nan x ak adrès ki nan y kòm paramèt yo a ak b fonksyon an swap.
Adrès postal la nan x ak adrès ki nan y yo se bagay ke nou pa ka kalkile
san refere li a sa yo bal pwen dwa desann isit la.
Ak erezman, de premye pwen yo bal di nou ekzakteman ki sa repons yo ye.
Adrès postal la nan x nan memwa se 10, ak adrès la nan y nan memwa se 14.
Se konsa, sa yo se valè yo ke jwenn ki te pase nan kòm yon ak b moute tèt nan fonksyon swap nou an.
Se konsa, ankò, oblije chanje tounen nan dyagram nou an, mwen ka ekri yon 10 nan yon
ak yon 14 nan b.
Koulye a, pwen sa a se kote nou kontinye ak swap la.
Se konsa, ranvèrsan tounen nan konpitè pòtatif li a ankò,
nou wè ke fason an swap a travay se mwen dèreferans premye a ak magazen rezilta a nan tan.
Se konsa, operatè a dèreferans di, "Hey. Trete sa ki nan varyab yon kòm yon adrès.
Ale nan kèlkeswa sa ki estoke nan ki adrès li, ak chaj li. "
Ki sa ou chaje soti nan varyab la ki pral dwe estoke nan varyab tan nou an.
Ranvèrsan tounen nan iPad la.
Si nou ale nan adrese 10, nou konnen adrès 10 se x nan varibl
paske nou te di a pwen bal nou an ki adrès la x nan memwa se 10.
Se konsa, nou ka ale la, jwenn valè a nan li, ki se 1, menm jan nou wè sou iPad nou an,
ak chaj ki nan tan.
Yon fwa ankò, sa a se pa sa ki final la.
Nou pral mache nan epi n ap jwenn nan eta final nou an nan pwogram nan nan fen an.
Men, kounye a, nou gen menm valè a 1 ki estoke nan tan.
>> Ak gen nan yon kesyon rapid sou isit la.
[Alexander] Èske operatè a dèreferans - sa a jis dwa nan zetwal nan devan nan varyab la?
>> Wi. Se konsa, operatè a dèreferans, menm jan nou baskile tounen nan konpitè pòtatif nou yon lòt fwa ankò,
se sa a zetwal dwa nan devan.
Nan sans sa, li se - ou contrast li ak operatè a miltiplikasyon
ki egzije pou de bagay; operatè a dèreferans se yon operatè unèr.
Jis aplike nan yon sèl valè kòm opoze a yon operatè binè,
ki kote ou aplike nan de valè diferan.
Se konsa, sa a, se sa k ap pase nan liy sa a.
Nou chaje valè a 1 ak ki estoke l 'nan varyab tanporè nou antye ki pè.
Liy nan pwochen, nou sere sa ki nan b nan -
oswa, olye, nou sere sa ki ki B se lonje dwèt nan plas la kote yon se lonje dwèt yo.
Si nou analize sa a de dwat a gòch, nou pral b dèreferans,
nou pral adrese 14, nou pral gen tan pwan nonb antye relatif la ki ki gen la,
ak Lè sa a, nou pral pou yo ale nan adrès la 10,
ak nou pral voye jete rezilta a nan dèreferans nou an b nan espas sa a.
Ranvèrsan tounen nan iPad nou an, kote nou kapab fè sa-a yon ti kras plis konkrè,
li ta ka ede si mwen ekri nonb sou tout de adrès sa yo isit la.
Se konsa, nou konnen ke nan y, nou se nan adrès 14, x se nan adrès 10.
Lè nou kòmanse nan b, nou b dèreferans, nou pwal gen tan pwan valè a 2.
Nou pral gen tan pwan sa a valè paske sa se valè a ki ap viv nan adrès 14.
Epi nou ap ale nan mete l 'nan varyab la ki viv nan adrès 10,
ki se dwa a, ki koresponn ak x varyab nou an.
Se konsa, nou ka fè yon ti kras nan ranplasan isit la
kote nou debarase m de 1 nou yo ak olye nou ekri yon 2.
Se konsa, tout nan byen ak bon nan mond lan, menm si nou te x efase kounye a.
Nou te estoke fin vye granmoun valè x la nan varyab tan nou an.
Se konsa, nou ka ranpli swap a ak liy kap vini an.
Ranvèrsan tounen nan konpitè pòtatif nou an.
Koulye a, tout sa ki rete se pran sa ki soti nan varyab tanporè nou nonb antye relatif
li epi sere yo nan varyab la ki viv nan adrès la ki B se kenbe.
Se konsa, nou ap ale nan efektivman b dèreferans jwenn aksè nan varyab la
ki se nan adrès la ki b kenbe nan li,
epi nou ap ale nan bagay valè a ki tan an kenbe nan li.
Ranvèrsan tounen nan iPad a yon fwa plis.
Mwen ka efase sa a valè isit la, 2,
ak olye nou pral kopye dwa pou 1 nan li.
Lè sa a, liy lan pwochen ki ègzekutra, nan kou -
si nou baskile tounen nan konpitè pòtatif li a - se sa a 6 pwen,
ki se pwen an nan ki nou te vle gen dyagram nou ranpli konplètman.
Se konsa, ranvèrsan tounen nan iPad a yon fwa plis, jis pou ou kapab wè dyagram an fini,
ou ka wè ke nou gen yon 10 nan yon, yon 14 nan b, yon 1 nan tan, yon 2 nan x, ak yon 1 nan y.
Èske gen nenpòt kesyon sou sa a?
sa a pou ka fè plis sans, li te gen te mache nan tout li?
Fè mwens sans? Èspere ke pa. Oke.
>> Endikasyon yo se yon sijè trè difisil.
Youn nan mesye yo nou travay avèk gen yon pwovèb trè komen:
"Pou konprann endikasyon, ou dwe premye konprann endikasyon."
Ki Mwen panse ke se yon bagay ki vre. Li fè sa pran yon pandan y ap jwenn itilize li.
Desen anpil bagay nan foto, desen anpil bagay nan dyagram memwa tankou sa a yon sèl yo ki itil anpil,
ak apre ou fin mache nan egzanp apre egzanp apre egzanp,
li pral kòmanse fè yon ti kras pi plis sans ak yon ti kras plis sans ak yon ti kras sans plis.
Finalman, yon sèl jou, ou pral gen tout bagay sa yo nèt metrize.
Nenpòt kesyon avan nou deplase sou pwoblèm nan apre? Tout dwa.
Se konsa, baskile tounen nan konpitè pòtatif li a.
Pwoblèm nan pwochen nou gen se nimewo pwoblèm 33 nan dosye Mwen / O.
Rale nan sou sa a yon ti jan.
Pwoblèm 33 - Wi?
>> [Danyèl] Mwen te jis te gen yon kesyon rapid. Sa a zetwal, oswa asterisk a,
sa yo rele dereferencing lè w itilize yon asterisk anvan.
Ki sa ki nan li rele lè w itilize comercial a anvan?
>> Comercial la anvan se adrès la-a operatè.
Se konsa, kite a woulo liv tounen moute.
Wouch. Mwen nan mòd rale Se konsa, mwen pa kapab reyèlman woulo liv.
Si nou gade nan sa a kòd vrèman byen vit dwa isit la,
ankò, menm bagay k ap pase.
Si nou gade nan sa a kòd dwa isit la, sou liy sa a kote nou fè apèl la boukante,
comercial a se jis di "jwenn adrès la nan ki lavi x varyab."
Lè du ou compiles kòd ou a,
li te aktyèlman fizikman make soti yon kote nan memwa pou tout nan varyab ou a ap viv la.
Se konsa, sa ki du a kapab Lè sa a, fè yon fwa li a konpile tout bagay,
li konnen, "O, mwen mete x nan adrès 10. Mwen mete y nan adrès 14."
Li ka Lè sa a, ranpli nan valè sa yo pou ou.
Se konsa, ou ka Lè sa a, - li ka Lè sa a, pase sa a nan ak pas & y nan kòm byen.
Nèg sa yo jwenn adrès la, men yo menm tou yo, lè ou pase yo nan fonksyon an swap,
enfòmasyon sa a kalite, sa a * int dwa isit la, di du a,
"Oke, nou ap pral entèprete adrès sa a kòm yon adrès nan yon varyab antye ki pè."
Kòm yon adrès nan yon int, ki se diferan de adrès ki nan yon varyab karaktè
paske yon int pran moute, sou yon machin 32-ti jan, pran moute 4 bytes nan espas,
Lè nou konsidere ke yon karaktè sèlman pran moute 1 multiple nan espas.
Se konsa, li enpòtan yo konnen tou sa ki - sa ki ap viv, ki kalite valè
ap viv nan adrès la ke yo kouri pase pous
Oswa adrès la ke w ap fè fas ak.
Nan fason sa a, ou konnen ki jan anpil bytes nan enfòmasyon yo aktyèlman chaje soti nan RAM ou a.
Lè sa a,, se wi, sa a operatè dèreferans, tankou ou te mande,
ale ak jwenn aksè a enfòmasyon nan yon adrès patikilye.
Se konsa, li di, ak sa a varyab yon isit la, trete sa ki nan yon kòm yon adrès,
ale nan ki adrès, e rale mete deyò, chaje nan processeur a, chaj nan yon rejis
valè yo reyèl oswa sa ki andedan yo ki ap viv nan ki adrès ou.
Nenpòt piplis kesyon? Sa yo se kesyon bon.
Li se yon anpil nan nouvo tèminoloji tou.
Li la tou kalite fenki, wè & ak * nan diferan kote.
>> Tout dwa.
Se konsa, tounen nan pwoblèm 33, ranpli I / O.
Sa a te youn nan moun ki pwoblèm ke mwen panse ke yon koup nan bagay sa yo rive.
Youn nan, li nan yon sijè jistis nouvo.
Li te prezante trè byento anvan egzamen an,
ak Lè sa a, Mwen panse se te kalite tankou youn nan sa yo pwoblèm mo nan matematik
kote yo ba ou yon anpil enfòmasyon, men ou aktyèlman pa fini gen yo sèvi ak yon tòn nan li.
Pati a nan premye pwoblèm sa a se ki dekri ki sa yon dosye CSV se.
Koulye a, yon dosye CSV, selon deskripsyon an, se yon vigil-ekreme valè dosye-a.
Rezon ki fè yo sa yo, se nan tout enteresan, ak rezon ki fè ou janm sèvi ak yo,
se, paske, ki jan anpil nan nou te janm itilize bagay tankou Excel?
Figi pi fò nan ou te, pwobableman, oswa pral sèvi ak nan kèk pwen nan lavi ou.
Ou ap sèvi ak yon bagay tankou Excel.
Yo nan lòd jwenn done yo soti nan yon calcul Excel oswa fè nenpòt sòt de pwosesis ak li,
si ou te vle ekri yon pwogram C oswa Piton pwogram, Java pwogram nan,
fè fas ak done yo ou te ki estoke nan la,
youn nan fason yo jwenn li soti ki pi komen se nan yon dosye CSV.
Epi ou ka louvri moute Excel ak ki lè ou ale nan 'Save a kòm' dyalòg,
ou ka jwenn deyò yon dosye CSV vrè.
>> Sou la men konnen ki jan fè fas ak bagay sa yo.
Nan fason li ap travay se ke li nan menm jan ak - Mwen vle di, li nan esansyèlman miman yon calcul,
, kote, tankou nou wè isit la, nan pyès la trè kite-pi plis,
nou gen tout non yo dènye.
Se konsa, nou gen Malan, Lè sa a, Hardison, ak Lè sa a, Bowden, MacWilliam, ak Lè sa a, Chan.
Tout non yo dènye. Lè sa a, yon vigil separe non yo dènye nan non yo an premye.
David, Nate, Rob, Tommy, ak Zamyla.
Mwen toujou melanje moute Robby ak Tom.
Lè sa a,, finalman, kolòn nan twazyèm se adrès ki imel.
Yon fwa ou konprann ke, tout rès la nan pwogram nan se jistis dwat a aplike.
Ki sa nou te fè yo nan lòd yo mime estrikti sa a menm nan pwogram C nou
se nou te itilize yon estrikti.
Nou pral kòmanse jwe ak sa yo plis yon ti kras tou.
Nou te wè yo pou ti jan nan premye ti kras nan seri pwoblèm 3, lè nou te fè fas ak diksyonè yo.
Men, sa a struct anplwaye estoke yon non sot pase yo, yon non premye, ak imel yon.
Jis tankou dosye CSV nou te estoke.
Se konsa, sa a se jis konvèti soti nan yon fòma nan yon lòt.
Nou gen konvèti, nan ka sa a, yon struct anplwaye nan yon liy,
yon liy vigil-separe, jis tankou sa.
ki fè sans? Ou nèg gen tout te pran egzamen an,
Se konsa, mwen imajine ou gen omwen te gen kèk tan panse sou sa a.
>> Nan fonksyon anboche, pwoblèm nan mande nou pran nan - rale we'll nan sa a sou yon ti jan -
pran nan yon estrikti anplwaye yo, yon struct anplwaye yo, ak non an,
ak sa li yo kole nan dosye staff.csv nou an.
Li sanble ke sa a se jistis dwat yo itilize.
Nou pral kalite jwe otou ak sa yo fonksyon yon ti jan ti kras pi plis jounen jodi a.
Men, nan ka sa a, fonksyon an fprintf se reyèlman kle a.
Se konsa, avèk fprintf, nou ka enprime, jis tankou ou nèg yo te lè l sèvi avèk printf tèm sa a tout antye.
Ou kapab printf yon liy nan yon dosye.
Se konsa, olye pou yo jis fè abityèl apèl la printf kote ou ba li fisèl la fòma
ak Lè sa a, ou ranplase tout varyab yo ak agiman sa yo,
ak fprintf, agiman trè premye ou a se olye dosye a ou vle yo pou yo ekri.
Si nou tout nou te fè yon gade nan sa a nan aparèy la, pou egzanp, nonm fprintf,
nou ka wè diferans ki genyen ant printf ak fprintf.
Mwen pral rale nan isit la yon ti jan.
Se konsa, avèk printf, nou bay li yon fisèl fòma, ak Lè sa a, agiman yo ki vin apre
yo tout varyab yo pou ranplasman oswa sibstitisyon nan fisèl fòma nou an.
Lè nou konsidere ke ak fprintf, agiman an premye se vre sa a * dosye yo rele yon kouran.
>> Moving tounen sou isit la yo anboche nou an,
nou te deja gen kouran dosye * nou louvri pou nou.
Sa a ki sa liy sa a premye fè; li ouvè dosye a staff.csv,
li ouvè li nan mòd ajoutra, ak tout sa ki nan rete pou nou fè se
ekri estrikti nan anplwaye nan dosye a.
Ak, kite la wè, èske mwen vle sèvi ak iPad la?
Mwen pral sèvi ak iPad la. Nou gen anile - Se pou nou mete sa a sou tab la pou m ka ekri yon ti kras pi byen -
anile anboche epi li pran nan yon sèl agiman, yon estrikti anplwaye yo rele an.
Got aparèy òtopedik nou an, nou te gen * dosye nou yo rele ranpli,
nou gen liy fopen nou ban nou,
epi mwen pral jis ekri li kòm pwen depi li nan deja nan pedya la.
Lè sa a, sou liy pwochen nou yo, nou pwal fè yon apèl fprintf
e nou pral pase nan dosye a ke nou vle enprime a,
ak Lè sa a, fisèl fòma nou an, ki -
Mwen pral kite ou nèg di m 'sa li sanble.
Kouman sou ou, Stella? ou konnen ki sa premye pati nan fisèl la fòma sanble?
[Stella] Mwen pa si. >> Ezite mande Jimmy.
ou konnen, Jimmy?
[Jimmy] Èske sa t jis pou sot pase a? Mwen pa konnen. Mwen pa antyèman asire w.
>> Okay. Kouman sou, t 'okenn moun jwenn sa a kòrèk nan egzamen an?
No Tout dwa.
Li sanble ke isit la tout sa nou dwe fè se nou vle chak pati nan estrikti anplwaye nou
yo dwe enprime soti kòm yon fisèl nan dosye nou yo.
Nou jis itilize karaktè a sibstitisyon fisèl twa fwa diferan paske nou genyen yon non dènye
ki te swiv pa vigil, lè sa a yon non premye ki te swiv pa yon vigil,
yo, epi finalman a adrès imel la ki swiv - ki se pa
Fitting sou ekran m '- men li la ki te swiv pa yon karaktè newline.
Se konsa, mwen pral ekri li jis anba isit la.
Lè sa a, swiv fisèl fòma nou an,
nou jis gen sibstitisyon yo, ki nou jwenn aksè lè l sèvi avèk notasyon an dot
ke nou te wè nan seri pwoblèm 3.
Nou ka sèvi ak s.last, s.first, ak s.email
pran plas nan twa valè sa yo nan fisèl fòma nou an.
Se konsa, kouman t 'ki ale? Fè sans?
Wi? Pa gen? Li posib? Oke.
>> Bagay la final ke nou fè apre nou te enprime ak apre nou te louvri dosye nou an:
chak fwa nou te louvri yon dosye li an, nou toujou gen sonje yo fèmen l '.
Paske otreman nou pral fini koule memwa a,
lè l sèvi avèk moute deskriptè dosye-a.
Se konsa, yo fèmen l ', ki fonksyon nou itilize? Danyèl?
[Danyèl] fkloz? >> Fkloz, egzakteman.
Se konsa, pati nan sot pase yo nan pwoblèm sa a te byen fèmen dosye a, lè l sèvi avèk fonksyon an fkloz,
ki jis sanble tankou sa.
Pa twò fou.
Fre.
Se konsa, sa a, se pwoblèm 33 sou egzamen an.
Nou pwal genyen definitivman plis dosye mwen / O ap vini yo.
Nou pral fè yon ti jan ti kras pi plis nan konferans jodi a, oswa nan seksyon jodi a,
paske sa a, se sa k ap pase yo fòme èstime nan sa a pset kap vini yo.
Kite yo deplase sou soti nan egzamen an nan pwen sa. Wi?
>> [Charlotte]] Poukisa fkloz (ranpli) olye pou yo fkloz (staff.csv)?
>> Ah. Paske li sanble ke - pou kesyon an, ki se yon yon sèl gwo,
Se pou rezon sa, lè nou ekri fkloz, èske nou ekri fkloz (ranpli) varyab zetwal
kòm yo te opoze ak non an ranpli, staff.csv? Èske sa kòrèk? Yeah.
Se konsa, kite a pran yon gade. Si m 'chanje tounen nan konpitè pòtatif m' yo,
epi kite pou yo gade nan fonksyon an fkloz.
Se konsa, fonksyon an fkloz fèmen yon kouran epi li pran nan konsèy la kouran an ke nou vle fèmen,
kòm yo te opoze ak non an dosye aktyèl ke nou vle fèmen.
Ak sa a se paske dèyè sèn nan, lè ou fè yon apèl fopen,
lè ou louvri moute yon dosye li an, w ap aktyèlman allocation memwa nan magazen enfòmasyon sou dosye a.
Se konsa, ou gen konsèy dosye ki gen enfòmasyon sou dosye a,
tankou li nan ouvè, gwosè li, kote ou ye a kounye a nan dosye a,
pou ke ou ka fè li ak ekri apèl nan plas sa a an patikilye nan dosye a.
Ou fini fèmen konsèy la olye pou yo fèmen non an dosye-a.
>> Wi? [Danyèl] Se konsa, yo nan lòd yo itilize anboche, ou ta di - li montre kouman li pran konsèy nan itilizatè?
fprintf aji tankou GetString nan sans ke li pral jis tann pou D 'nan itilizatè
epi mande ou nan tape sa a - oswa rete tann pou ou pou w tape twa bagay sa yo nan?
Oswa ou bezwen sèvi ak yon bagay yo aplike anboche?
>> Yeah. Se konsa, nou pa - kesyon an te, ki jan nou jwenn opinyon nan itilizatè
yo nan lòd yo aplike anboche? Ak sa nou genyen isit la se moun ki rele a nan anboche,
ki te pase nan sa a struct anplwaye ak tout done yo ki estoke nan struct la deja.
Se konsa, fprintf se kapab jis ekri sa done dirèkteman nan dosye a.
Gen nan pa gen tann pou D 'itilizatè.
Nan itilizatè a ke yo deja bay opinyon la pa byen mete l 'nan sa a struct anplwaye yo.
Ak bagay sa yo, nan kou, ta kraze si nenpòt nan moun sa endikasyon yo te nil,
pou nou woulo liv tounen moute isit la epi nou gade struct nou an.
Nou gen fisèl sot pase yo, fisèl premye, email fisèl.
Nou kounye a konnen ke tout moun sa yo reyèlman, anba kapo machin lan, se varyab * Char.
Ki ka oswa ka pa dwe lonje dwèt nil.
Yo kapab ap lonje dwèt sou memwa pil wòch la,
petèt memwa sou pil la.
Nou pa vrèman konnen, men si nenpòt nan sa yo endikasyon yo se nil, oswa envalid,
ki ki pral definitivman aksidan fonksyon anboche nou yo.
Se te yon bagay ki te kalite ki depase limit la nan egzamen an.
Nou pa mangonmen sou sa.
Great. Oke. Se konsa, deplase sou soti nan egzamen an.
>> Se pou nou fèmen sa a Guy, e nou pral fè yon gade nan pset 4.
Se konsa, si ou gade mesye nan espèk a pset, yon fwa ou kapab jwenn aksè nan li, cs50.net/quizzes,
nou pral yo ale nan yon kèk nan pwoblèm yo seksyon jodi a.
Mwen defile desann - seksyon nan kesyon ap kòmanse nan paj la tyè nan espèk a pset.
Ak pati nan premye mande w ale yo epi gade kout la sou Redireksyon ak tiyo.
Ki te kalite yon kout fre, montre w kèk nouvo, ke trik nouvèl fre liy lòd ke ou ka itilize.
Lè sa a, nou te gen kèk kesyon pou ou kòm byen.
Kesyon sa a premye sou larivyè, kote printf ekri pa default,
nou kalite manyen sou jis ti jan yon ti kras yon ti moman de sa.
Sa a fprintf ke nou te jis diskite sou pran nan yon kouran * dosye kòm agiman li yo.
fkloz pran nan yon kouran * dosye kòm byen,
ak valè retou a nan fopen ba ou yon kouran * dosye kòm byen.
Rezon ki fè nou pa t 'wè sa yo anvan lè nou te te fè fas ak printf
se paske printf gen yon kouran default.
Ak default kouran an yo ki li ekri
ou pral jwenn enfòmasyon sou nan kout la.
Se konsa, definitivman pran yon gade nan li.
>> Nan seksyon jodi a, nou pwal pale yon ti kras sou gdb,
depi plis abitye a ou yo ki la avèk li, pratik an plis ou jwenn ak li,
pi byen kapab a ou pral aktyèlman Hunt desann pinèz nan kòd pwòp ou yo.
Sa a vitès pwosesis la nan debogaj moute èkstrèmeman.
Se konsa, lè l sèvi avèk printf, chak fwa ou fè sa ou gen compile kòd ou a,
w gen kouri l 'ankò, pafwa ou gen pou avanse pou pi apèl la printf alantou li,
kòmantè soti kòd, li jis pran yon ti tan.
Objektif nou se eseye ak konvenk ou ke avèk gdb, ou kapab esansyèlman
printf anyen nan nenpòt ki pwen nan kòd ou, epi ou pa janm gen compile li.
Ou pa janm gen yo kòmanse epi kenbe devine ki kote yo printf kap vini an.
Premye bagay yo fè se kopi liy sa a epi pou yo jwenn kòd la seksyon koupe nan entènèt la.
Mwen kopye liy sa a nan kòd ki di, "http://cdn.cs50.net wje".
Mwen pral kopi li.
Mwen pral janbe lòt bò nan aparèy m 'yo, rale soti pou ou kapab wè sa m ap fè li,
kole li nan la, epi lè mwen frape Antre, lòd sa a wje literalman se yon sit entènèt jwenn.
Li k ap pase ki rale desann sa a ranpli koupe nan entènèt la,
ak li a pral sove li nan anyè aktyèl la.
Koulye a, si mwen lis anyè mwen ye kounye a ou ka wè ke mwen te gen sa a ranpli section5.zip dwa nan la.
Fason a fè fas avèk ke nèg se ouvriers li,
ki ou ka fè nan liy lan bay lòd, jis tankou sa a.
Section5.zip.
Sa pral ouvriers li, kreye folder nan pou m ',
gonfle tout sa ki, mete yo nan la.
Se konsa, koulye a, mwen ka ale nan anyè seksyon mwen 5 lè l sèvi avèk yo lòd, ki cd.
Klè ekran an lè l sèvi avèk ki klè. Se konsa, klè ekran an.
Koulye a, mwen te gen yon bèl tèminal pwòp kontra avèk.
>> Koulye a, si mwen lis tout dosye yo pou m 'wè nan lis sa a yo,
ou wè sa a mwen te gen kat dosye: buggy1, buggy2, buggy3, ak buggy4.
Mwen te tou te resevwa korespondan. Yo dosye c.
Nou pa pwal fè yon gade nan. Dosye yo c pou kounye a.
Olye de sa, nou pwal sèvi ak yo lè nou louvri moute gdb.
Nou te kenbe yo nan yon fason pou nou gen aksè a kòd la sous aktyèl lè nou ap sèvi ak gdb,
men objektif la nan pati sa a nan seksyon an se Tinker otou ak gdb
ak wè kòman nou ka sèvi ak li nan figi soti sa k ap pase mal ak chak nan sa yo kat pwogram buggy.
Se konsa, nou jis ap ale nan toutotou sal la reyèlman byen vit,
ak mwen pral mande yon moun nan kouri youn nan pwogram ki buggy,
ak Lè sa a, nou pral ale tankou yon gwoup nan gdb, epi nou pral wè sa nou kapab fè ranje pwogram sa yo,
oswa nan omwen idantifye sa k ap pase sa ki mal nan chak nan yo.
Ann kòmanse sou isit la ak Danyèl. Èske w ap kouri buggy1? Ann gade pou wè sa k ap pase.
[Danyèl] Li di, genyen yon fòt aplikasyon. >> Yeah. Egzakteman.
Se konsa, si mwen kouri buggy1, mwen jwenn yon fay segman.
Nan pwen sa a, mwen t 'ka ale ak louvri moute buggy1.c,
eseye ak figi soti sa k ap pase sa ki mal,
men se yon sèl nan bagay sa yo sou sa a erè fòt segman ki pi insuportabl
se ke li pa di ou sou sa ki liy nan bagay sa yo pwogram aktyèlman ale mal ak te kraze yo.
Ou kalite gen fè yon gade nan kòd la
ak figi soti lè l sèvi avèk devine epi tcheke oswa printf yo wè sa k ap pase sa ki mal.
Youn nan bagay ki koul sou gdb se ke li nan reyèlman, reyèlman fasil
figi l liy lan nan ki aksidan pwogram ou an.
Li nan totalman vo li sèvi ak li, menm si jis pou sa.
Se konsa, bòt moute gdb, mwen tape gdb, ak Lè sa a, mwen ba ou li chemen ki mennen nan ègzèkutabl a ke mwen vle kouri.
Isit la mwen sezisman gdb ./buggy1.
Frape Antre nan. Ki ban m 'tout bagay sa a copyright enfòmasyon,
, li desann isit la ou pral wè liy sa a ki di, "Lekti senbòl soti nan / home /
jharvard/section5/buggy1. "
Men, si tout bagay ale byen, ou pral wè l 'enprime soti yon mesaj ki sanble tankou sa a.
Li pral li senbòl, sa ap di "M ap li senbòl nan dosye ègzèkutabl ou an,"
ak Lè sa a, li pral gen sa a "fè" mesaj sou isit la.
Si ou wè kèk varyasyon lòt kote nan sa a, oswa ou wè li pa t 'kapab jwenn senbòl yo
oubyen yon bagay tankou sa, ki sa sa vle se ke ou jis pa te konpile ègzèkutabl ou byen.
Lè nou konpile pwogram pou itilize ak gdb, nou gen yo sèvi ak ki drapo espesyal-g,
Epi sa a, fè pa default si ou konpile pwogram ou an, jis pa sezisman fè
oswa fè buggy oswa fè retabli yo, nenpòt nan moun sa.
Men, si w ap konpile manyèlman ak sonnen, lè sa a ou pral gen yo ale nan ak ki gen ladan-g drapo.
>> Nan pwen sa a, kounye a ke nou gen èd memwa gdb nou an,
li nan trè senp nan kouri pwogram nan.
Nou ka swa tape kouri, oubyen nou ka jis tape r.
Pifò kòmandman gdb kapab abreje.
Anjeneral jis youn oswa yon lèt koup, ki se trè bèl.
Se konsa, Saad, si ou tape r ak frape Antre, ki sa ki k ap pase?
[Saad] mwen te resevwa SIGSEGV, fòt segmentation, ak Lè sa a, tout jagon sa a.
>> Yeah.
Tankou nou ap wè sou ekran an dwa kounye a, ak tankou Saad te di,
lè nou tape kouri oswa r ak frape Antre, nou toujou jwenn fay la segman menm.
Se konsa, lè l sèvi avèk gdb pa rezoud pwoblèm nou yo.
Men, li ba nou kèk jagon, epi li vire soti ke sa a jagon
aktyèlman di nou ki kote li k ap pase.
Analizan sa a yon ti kras ti jan, sa a ti jan premye se fonksyon an nan ki tout bagay k ap pase sa ki mal.
Genyen nan sa a __ strcmp_sse4_2, epi li di nou ke li kap pase nan sa a ranpli
rele sysdeps/i386, tout sa a, ankò, kalite yon dezòd - men liy 254.
Sa a kalite difisil yo analizan. Anjeneral lè ou wè bagay tankou sa a,
sa vle di ke li nan segman frakti nan youn nan bibliyotèk yo sistèm.
Se konsa, yon bagay fè ak strkan. Ou nèg te wè strkan anvan.
Pa twò fou, men sa sa vle di ke strkan se kase oubyen ki gen nan yon pwoblèm ak strkan?
Ki sa ou panse, Alexander?
[Alexander] Eske se sa ke - se 254 liy lan? Ak - pa binè a, men li pa plafon yo, nan
ak Lè sa a, gen nan yon lòt lang pou chak fonksyon. Se ke 254 nan ki fonksyon, oswa -?
>> Li nan liy 254. Li sanble ke nan sa a. Dosye a, se konsa li a kòd asanble pwobableman.
>> Men, mwen devine bagay la plis ijan se, paske nou te vinn yon fay segman,
ak li sanble li a vini soti nan fonksyon an strkan,
sa a vle di, lè sa a, se ke strkan kase?
Li ta dwe pa, èspere ke. Se konsa, jis paske ou gen yon fay segmentation
nan youn nan fonksyon yo sistèm, tipikman ki vle di ke ou jis pa yo te rele li yo kòrèkteman.
Bagay la pi rapid pou fè pou konnen ki sa ki aktyèlman pral sou
lè ou wè yon bagay fou tankou sa a, nenpòt lè ou wè yon fay segman,
espesyalman si w gen yon pwogram ki la lè l sèvi avèk pi plis pase jis prensipal yo,
se sèvi ak yon baktras.
Mwen abreje baktras pa ekri BT, kòm opoze a pawòl Bondye a baktras plen.
Men, Charlotte, sa ki pase lè ou tape b ak frape Antre?
[Charlotte] Li montre m 'de liy, 0 liy ak liy 1.
>> Yeah. Se konsa, liy 0 ak liy 1.
Sa yo se ankadreman yo chemine aktyèl ki te kounye a nan jwe lè pwogram ou an te fè aksidan.
Kòmanse nan ankadreman an topmost, ankadreman 0, epi ale nan anba pi plis la-a, ki se ankadreman 1.
Ankadreman topmost nou se ankadreman an strkan.
Ou ka panse a sa a kòm menm jan ak sa pwoblèm nou te jis ap fè sou egzamen an ak endikasyon yo,
kote nou te boukante ankadreman chemine sou tèt ankadreman chemine prensipal yo,
epi nou te gen varyab yo ki swap te lè l sèvi avèk sou tèt varyab yo ki prensipal te lè l sèvi avèk.
Isit la aksidan nou te rive nan fonksyon strkan nou an, ki te aple pa fonksyon prensipal nou an,
ak baktras an, ap ban nou pou nou pa sèlman fonksyon yo nan ki bagay sa yo echwe,
men li la tou di nou kote tout bagay te rele nan.
Se konsa, si mwen woulo liv sou yon ti kras pi plis sou bò dwat la,
nou ka wè ki yeah, nou tout nou te sou liy 254 sa a ranpli strkan-sse4.s.
Men, te rele nan te fè nan buggy1.c, liy 6.
Se konsa, sa vle di nou ka fè - se nou ka jis ale tcheke deyò ak wè sa ki te pral sou
nan buggy1.c, liy 6.
Yon fwa ankò, gen yon fason koup fè sa. Youn nan se sòti soti nan gdb
oswa ki gen kòd ou a louvri nan yon lòt fenèt ak referans kwa.
Sa, nan ak tèt li, se bèl sou la men paske koulye a si w ap nan lè biwo louvri
ak ou te gen yon fay segman ak tf ou a mande ki kote tout bagay te kraze,
ou ka jis di, "Oh, liy 6. Mwen pa konnen sa k ap pase sou li a,
men yon bagay sou liy 6 ki lakòz pwogram mwen yo chire. "
Nan lòt fason fè li se ou ka itilize lòd sa a yo rele lis nan gdb.
Ou kapab tou abreje l 'ak l.
Se konsa, si nou frape l, ki sa nou jwenn isit la?
Nou jwenn yon pakèt antye nan bagay etranj.
Sa a se kòd la asanble aktyèl
ki nan strcmp_sse4_2.
Sa a sanble kalite fenki,
ak rezon an nou ap vin sa a se paske kounye a,
Gdb gen nou nan ankadreman 0.
>> Se konsa, nenpòt lè nou gade varyab, nenpòt ki lè nou gade nan kòd sous,
nou ap chèche nan kòd sous ki konsène ankadreman an pil nou ap kounye a pous
Se konsa, nan lòd jwenn anyen serye, nou bezwen
ale nan yon ankadreman chemine ki fè sans pi plis.
Nan ka sa a, ankadreman an pil prensipal ta fè yon ti kras plis sans,
paske sa ki te aktyèlman kòd la ke nou te ekri.
Pa kòd la strkan.
Nan fason ou kapab deplase ant ankadreman li yo, nan ka sa a, paske nou gen de,
nou gen 0 ak 1,
ou fè sa ak moute a ak kòmandman desann.
Si mwen demenaje moute yon sèl ankadreman,
kounye a mwen nan ankadreman an pil prensipal la.
Mwen kapab deplase desann pou tounen nan kote mwen te ye a,
moute ankò, desann ankò, epi ale kanpe ankò.
Si ou janm fè pwogram ou an nan gdb, ou jwenn yon aksidan, ou jwenn baktras a,
epi ou wè ke li nan nan kèk dosye ke ou pa konnen ki sa k ap pase.
Ou eseye lis, kòd la pa gade abitye nou la a,
pran yon gade nan ankadreman ou ak konnen ki kote ou ye a.
W ap pwobableman nan ankadreman an pil ki mal.
Oswa omwen w ap nan yon ankadreman chemine ki se pa yon sèl ke ou ka reyèlman dbug.
Kounye a ke nou ap nan ankadreman an pil ki apwopriye, nou ap nan prensipal yo,
kounye a nou kapab itilize yo lòd, ki lis konnen sa ki liy lan te ye.
Epi ou ka wè l '; li enprime li pou nou isit la menm.
Men, nou ka frape lis tout menm bagay la tou, ak lis sa a ba nou kopi enprime bèl
nan kòd la sous aktyèl ki k ap pase nan isit la.
>> An patikilye, nou ka gade nan liy 6.
Nou ka wè sa k ap pase sou isit la.
Ak li sanble nou ap fè yon konparezon fisèl
ant fisèl "CS50 wòch yo" ak argv [1].
Yon bagay sou sa a te ekraze.
Se konsa, Missy, ou gen nenpòt panse sou sa ki ta ka ale sou isit la?
[Missy] Mwen pa konnen poukisa li la ekraze. >> Ou pa konnen poukisa li la ekraze?
Jimmy, nenpòt panse?
[Jimmy] mwen pa antyèman asire w, men dènye tan an nou itilize fisèl konpare,
oswa strkan, nou te gen tankou twa ka diferan anba l '.
Nou pa t 'gen yon ==, mwen pa kwè, dwa nan ki liy an premye.
Olye de sa li te separe an twa, ak yon te == 0,
yon sèl te <0, mwen panse ke, ak yon te> 0.
Se konsa, petèt yon bagay tankou sa? >> Yeah. Se konsa, gen nan pwoblèm sa a
nan n'ap fè konparezon an kòrèkteman?
Stella? Nenpòt panse?
[Stella] Mwen pa si. >> Pa sèten. Danyèl? Panse? Oke.
Li vire soti sa k ap pase dwa isit la se lè nou kouri pwogram nan
epi nou te resevwa fay la segman, lè ou kouri pwogram nan pou premye fwa, Danyèl,
ou te ba li nenpòt agiman liy komand yo ye?
[Danyèl] No >> No Nan ka sa a, ki sa ki valè a nan argv [1]?
>> Pa gen okenn valè. Dwa >>.
Oke, pa gen okenn valè fisèl ki apwopriye yo.
Men, gen kèk valè. Ki valè ki vin estoke nan genyen?
>> Yon valè fatra? >> Li nan swa yon valè fatra, oubyen, nan ka sa a,
se nan fen etalaj la argv toujou sispann ak nil.
Se konsa, sa ki aktyèlman te resevwa ki estoke nan gen nil.
Nan lòt fason yo rezoud sa a, olye ke panse a li,
se eseye enprime li soti.
Sa a se kote mwen te di ke lè l sèvi avèk gdb se gwo,
paske ou kapab enprime soti tout varyab yo, tout valè yo ke w vle
lè l sèvi avèk sa a sou la men-élégan p lòd.
Se konsa, si mwen tape p ak Lè sa a, mwen tape valè a nan yon varyab oswa non an nan yon varyab,
di, arg, mwen wè ke arg se 1.
Si m 'vle enprime soti argv [0], mwen ka fè sa jis tankou sa.
Li te tankou nou te wè, argv [0] se toujou non an nan pwogram ou an,
toujou non an nan ègzèkutabl la.
La a ou wè li nan te resevwa non an chemen plen.
Mwen ka tou enprime soti argv [1] ak wè sa ki rive.
>> Isit la nou te resevwa sa a kalite valè mistik.
Nou te jwenn sa a 0x0.
Sonje nan kòmansman an nan tèm nan lè nou te pale osijè de nimewo ekzadesimal?
Oswa ke kesyon ti kras nan fen pset 0 sou jan yo ka reprezante 50 nan Egzagòn?
Wout la nou ekri nonb Egzagòn nan CS, jis yo pa gen konfizyon tèt nou
avèk chif desimal, se nou toujou prefiks yo ak 0x.
Se konsa, sa a prefiks 0x toujou jis vle di entèprete nimewo ki anba la a kòm yon nimewo ekzadesimal,
pa tankou yon kòd, pa kòm yon nonb desimal, pa kòm yon nimewo binè.
Depi nimewo a 5-0 se yon nimewo valid nan ekzadesimal.
Ak li nan yon nimewo nan desimal, 50.
Se konsa, sa a se jis ki jan nou disambiguate.
Se konsa, 0x0 vle di ekzadesimal 0, ki se tou desimal 0, binè 0.
Se jis nan 0 a valè.
Li sanble ke sa a se sa nil se, aktyèlman, nan memwa.
Nil se jis 0.
Isit la, eleman an ki estoke nan argv [1] se nil.
Se konsa, nou ap eseye konpare nou "CS50 wòch" fisèl nan yon fisèl nil.
Se konsa, dereferencing nil, ap eseye gen aksè a bagay sa yo nan nil,
sa yo yo, se tipikman pral lakòz kèk sòt de fòt segmentation oswa lòt move bagay rive.
Epi li sanble ke strkan pa tcheke wè
si ou pa ou te ki te pase nan yon valè ki nan nil.
Olye de sa, li jis ale pi devan, eseye fè bagay li yo,
ak li si li segman fot, li segman fot, epi li pwoblèm ou. Ou gen ale fikse li.
Vrèman byen vit, ki jan ta ka nou ranje pwoblèm sa a? Charlotte?
[Charlotte] Ou ka tcheke lè l sèvi avèk si.
Se konsa, si argv [1] se nil, == 0, Lè sa a, retounen 1, oswa yon bagay [enkonpreansibl].
>> Yeah. Se konsa, sa a, se yon sèl bon fason fè li, kòm nou ka tcheke yo wè,
valè a nou ap sou yo pase nan strkan, argv [1], se li nil?
Si nil li a, Lè sa a, nou ka di oke, avote.
>> Yon fason ki pi komen fè sa a se sèvi ak valè a arg.
Ou ka wè isit la nan kòmansman an nan prensipal yo,
nou manke ki tès premye ke nou tipikman fè lè nou itilize agiman liy lòd,
ki se li teste si wi ou non valè arg nou an, se sa nou atann.
Nan ka sa a, nou ap tann omwen de agiman,
non an nan pwogram nan plis yon lòt.
Paske nou sou yo sèvi ak agiman nan dezyèm isit la menm.
Se konsa, gen kèk sòt de tès davans, anvan rele strkan nou
ke tès si ou pa argv se omwen 2, ta fè tou sòt nan menm nan bagay sa yo.
Nou ka wè si ki travay pa kouri pwogram nan ankò.
Ou ka toujou rekòmanse pwogram ou an nan lespas gdb, ki se reyèlman bèl.
Ou ka kouri, ak ki lè ou pase nan agiman nan pwogram ou an,
ou pase yo nan Lè ou rele kouri, pa lè ou bòt moute gdb.
Nan fason sa a ou kapab kenbe envoke pwogram ou an ak agiman diferan chak fwa.
Se konsa, kouri, oswa ankò, mwen ka tape r, e kite yo wè sa ki rive si nou tape "alo".
Li ap toujou mande ou si ou vle kòmanse li depi nan konmansman an ankò.
Anjeneral, ou vle kòmanse li depi nan konmansman an ankò.
Ak nan pwen sa a, li rdemaraj l 'ankò, li simagri soti
pwogram lan ke nou ap kouri, buggy1, ak agiman sa hello,
epi li simagri sa a soti estanda; li di, "Ou jwenn yon D," tris fas.
Men, nou pa t 'segman fay. Li te di ke pwosesis soti nan nòmalman.
Se konsa, ki sanble trè bon.
San se pa fòt plis segman, nou te fè li sot pase yo,
Se konsa li sanble nou te depoze pinèz la fòt segman ki nou te resevwa.
Malerezman, li di nou ke nou ap vin yon D.
>> Nou kapab ale retounen lakay yo epi gade nan kòd la ak wè sa ki te pral sou la
konnen sa ki te - pou ki sa li te vle di nou ke nou te resevwa yon D.
Ann gade pou wè, isit la sa a te printf di ke ou te resevwa yon D.
Si nou tape lis, jan ou kenbe ou tape lis, li kenbe iteration desann nan pwogram ou an,
se konsa li pral montre w premye liy ki kèk nan pwogram ou an.
Lè sa a, li pral montre w pwochen liy yo kèk, ak moso nan pwochen ak moso nan pwochen.
Epi li pral kontinye eseye desann ale.
Epi, koulye a nou pral jwenn nan "liy nimerik 16 se deyò limit yo,."
Paske li sèlman gen 15 liy yo.
Si w ap resevwa pwen sa a ak ou mande, "Ki sa m 'fè?" ou ka itilize yo lòd, ki èd.
Sèvi ak ede ak Lè sa a, bay li non an nan yon lòd.
Epi ou wè gdb a ap ban nou tout sa a sòt de bagay.
Li di, "Ki pa gen okenn agiman, bay lis dis plis liy apre oswa alantou lis la anvan yo.
Lis - bay lis liy ki dis anvan - "
Se konsa, kite a eseye lè l sèvi avèk mwens lis.
E ke bay lis liy ki 10 anvan; ou ka jwe otou ak lis yon ti jan.
Ou kapab fè lis, lis -, ou ka menm bay lis yon nimewo, tankou lis 8,
epi li pral lis liy ki alantou 10 liyn 8.
Epi ou ka wè sa k ap pase sou isit la se ou te gen yon senp si lòt bagay.
Si ou tape nan CS50 wòch, li simagri soti "Ou jwenn yon A."
Otreman li simagri soti "Ou jwenn yon D."
Bummer lavil la. Tout dwa. Wi?
>> [Danyèl] Se konsa, lè Mwen te eseye fè CS50 wòch san yo pa quotes yo,
li di "Ou ka resevwa yon D."
Mwen te bezwen quotes yo jwenn li nan travay; poukisa se sa?
>> Yeah. Li sanble ke lè - sa a se yon lòt kroustiyan plezi ti kras -
lè ou kouri pwogram nan, si nou kouri li epi nou tape nan CS50 wòch,
jis tankou Danyèl te di li te fè, epi ou frape Antre,
li toujou ap di nou jwenn yon D.
Ansanm ak kesyon an se, poukisa sa a ye?
Epi li vire soti ke tou de tèminal nou yo ak gdb analizan sa yo kòm de prèv ki apa a.
Paske lè gen nan yon espas, ki nan enplisit kòm
agiman an premye te fini; agiman nan pwochen se sou yo kòmanse.
Fason a konbine sa yo nan de, oswa regrèt sa, nan yon sèl agiman,
se sèvi ak quotes yo.
Se konsa, koulye a, si nou mete l 'nan quotes epi kouri l' ankò, nou jwenn yon A.
Se konsa, jis rezume, pa gen okenn quotes, CS50 ak wòch yo parcouru kòm de prèv ki apa a.
Avèk quotes, li te parcouru kòm youn agiman tout ansanm.
>> Nou ka wè sa a ak yon breakpoint.
Se konsa, lwen nou te te kouri pwogram nou an, ak li a te kouri
jiskaske swa li segman fot oswa frape yon erè
oswa jiskaske li te soti nan ak tout te gen totalman amann.
Sa a se pa nesesèman bagay ki pi itil, paske pafwa
ou gen yon erè nan pwogram ou an, men li pa nan sa ki lakòz yon fay segmentation.
Li pa nan sa ki lakòz pwogram ou yo sispann oswa yon bagay tankou sa.
Chemen an jwenn gdb poz pwogram ou an nan yon pwen an patikilye
se yo mete yon breakpoint.
Ou kapab swa fè sa a pa fikse yon breakpoint sou yon non fonksyon
oswa ou ka mete yon breakpoint sou yon liy patikilye nan kòd.
Mwen renmen yo mete breakpoints sou non fonksyon, paske - fasil a sonje,
epi si ou ale aktyèlman nan epi chanje kòd sous ou a moute yon ti jan,
Lè sa a, breakpoint ou a pral aktyèlman rete nan plas la menm nan kòd ou a.
Lè nou konsidere ke si w ap itilize nimewo liy, ak nimewo yo liy chanje
paske ou ajoute oswa efase kèk kòd, lè sa a breakpoints nou, yo tout totalman vise yo.
Youn nan bagay ki mwen fè ki pi komen se mete yon breakpoint sou fonksyon prensipal la.
Souvan mwen pral bòt moute gdb, mwen pral tape b prensipal yo, frape Antre, e ke pral mete yon breakpoint
sou fonksyon prensipal ki jis di, "pran yon poz pwogram nan le pli vit ke ou kòmanse kouri,"
ak fason sa a, lè m 'kouri pwogram mwen an avèk, di, CS50 wòch kòm de prèv
ak frape Antre, li vin fonksyon prensipal epi li sispann dwa nan liy an trè premye,
dwa anvan li evalye fonksyon an strkan.
>> Depi mwen Sarepta, koulye a mwen ka kòmanse mucking otou ak wè sa k ap pase sou
ak tout nan varyab yo diferan ke yo te pase nan pwogram mwen an.
Men mwen ka enprime soti arg ak wè sa ki ap pase.
Wè ke arg se 3, paske li te resevwa nan 3 valè diferan nan li.
Li nan te resevwa non an nan pwogram nan, li nan te resevwa agiman an premye epi bay agiman, dezyèm lan.
Nou ka enprime sa yo soti nan gade argv [0], argv [1], ak argv [2].
Se konsa, kounye a ou ka tou wè poukisa sa a rele strkan ki pral echwe,
paske ou wè ke li t 'fann moute CS50 a ak wòch yo nan de agiman ki apa a.
Nan pwen sa a, yon fwa ou te frape yon breakpoint, ou ka kontinye nan etap nan pwogram ou an
liy pa liy, kòm opoze a kòmanse pwogram ou an ankò.
Se konsa, si ou pa vle kòmanse pwogram ou an ankò, li jis kontinye sou soti isit la,
ou ka itilize lòd yo kontinye epi kontinye ap kouri pwogram nan nan fen an.
Jis tankou li te fè isit la.
Men tou, si mwen rekòmanse pwogram nan, CS50 wòch, li frape breakpoint mwen ankò,
ak tan sa a, si mwen pa vle jis ale tout wout la nan rès la nan pwogram nan,
M ka sèvi ak yo lòd, ki pwochen, ki mwen menm mwen te abreje avèk n.
Ak sa a pral etap nan liy lan pwogram nan liy.
Se konsa, ou ka gade kòm bagay sa yo egzekite, kòm varyab chanjman, kòm bagay sa yo jwenn ajou.
Ki se trè bèl.
Bagay a lòt fre se olye ke repete lòd la menm sou yo ak sou yo ak sou ankò,
si ou jis frape Antre nan - se konsa isit la ou wè mwen pa t 'tape nan anyen -
si mwen jis frape Antre, li pral repete yo lòd, ki anvan,
oswa yo lòd, ki gdb anvan ke mwen jis mete pous
Mwen kapab kenbe frape Antre epi li pral kenbe kite nan liy kòd mwen pa liy.
Mwen ta ankouraje w nèg ale tcheke deyò pwogram yo buggy lòt yo tou.
Nou pa gen tan jwenn nan tout nan yo jodi a nan seksyon.
Kòd la sous ki gen la, se konsa ou kapab kalite wè sa k ap pase sou
dèyè sèn nan, si ou jwenn vrèman kole,
men omwen nan anpil, jis pratike Demarest moute gdb,
kouri pwogram nan jiskaske li kraze sou ou,
ap resevwa baktras a, lè n ap kalkile konnen ki sa ki fonksyone aksidan an te nan,
sa ki liy li te sou li a, enprime soti kèk valè varyab,
jis konsa ou jwenn yon santi yo pou li, paske ki pral reyèlman ede ou pwal pi devan.
Nan pwen sa a, nou ap ale nan kite soti nan gdb, ki ou lè l sèvi avèk kite oswa jis q.
Si pwogram ou a se nan mitan an nan kouri toujou, epi li pa te soti nan,
l ap toujou mande ou, "Èske ou w ke ou reyèlman vle kite fimen?"
Ou ka jis frape wi.
>> Koulye a, nou pwal fè yon gade nan pwoblèm nan pwochen nou gen, ki se pwogram nan chat.
Si ou gade kout la sou Redireksyon ak tiyo, ou pral wè ke Tommy itilize pwogram sa a
ki fondamantalman simagri tout randman de yon fichie nan yon ekran an.
Se konsa, si mwen kouri chat, sa a se aktyèlman yon pwogram bati-an aparèy la,
epi si w gen Macs ou ka fè sa sou Mac ou twò, si ou louvri moute tèminal.
E nou - chat, kite la di, cp.c, ak frape Mete.
Ki sa sa te fè, si nou woulo liv moute yon ti jan epi wè ki kote nou kouri liy lan,
oswa kote nou kouri yo lòd, ki chat, li literalman jis enprime deyò sa ki nan cp.c ekran nou an.
Nou ka kouri l 'ankò, epi ou ka mete nan dosye miltip yo ansanm.
Se konsa, ou ka fè cp.c chat, ak Lè sa a, nou ka tou anchene dosye a cat.c,
ki se pwogram lan nou ap sou yo ekri,
epi li pral enprime tou de dosye tounen nan Retounen nan ekran nou an.
Se konsa, si nou woulo liv moute yon ti jan, nou wè ke lè nou kouri sa a cp.c chat, cat.c,
premye li soti enprime dosye a cp, ak Lè sa a, pi ba a li, li soti enprime dosye a cat.c dwa desann isit la.
Nou pral itilize sa-a jis jwenn pye nou, mouye.
Jwe otou ak enprime senp yo tèminal la, al wè ki jan ki travay.
Si ou nèg louvri moute ak jdi cat.c, frape Antre,
ou ka wè pwogram nan ke nou se sou ekri.
Nou te enkli sa a plak kasrol bèl, konsa nou pa bezwen pase tan ou tape tout sa ki soti.
Nou menm tou nou tcheke ki kantite agiman pase pous
Nou enprime soti yon mesaj l 'bèl.
>> Sa a se sòt nan nan bagay ki, ankò, tankou nou ve yo te ap pale de,
li nan prèske tankou memwa nan misk.
Senpleman sonje kenbe ap fè sòt nan menm nan bagay
ak toujou enprime soti kèk sòt de mesaj itil
pou ke moun yo konnen ki jan yo kouri pwogram ou an.
Avèk chat, li la trè senp; nou ap jis pral ale nan tout nan agiman yo diferan
ki te pase nan pwogram nou an, epi nou pral enprime
sa yo soti nan ekran an yon sèl nan yon moman.
Yo nan lòd yo enprime dosye soti nan ekran an, nou pwal fè yon bagay trè menm jan
nan sa nou te fè sa nan fen egzamen an.
Nan fen egzamen an, ki anboche pwogram nan, nou te louvri moute yon dosye li an,
ak Lè sa a, nou te enprime li.
Nan ka sa a, nou ap ale nan louvri moute yon dosye yo, epi nou ap ale nan li soti nan li olye.
Lè sa a, nou pral enprime, olye pou yo nan yon dosye li an, nou pral enprime ekran an.
Se konsa, enprime ekran an ou te fè anvan tout ak printf.
Se konsa, sa a, se pa twò fou.
Men, lekti yon dosye se kalite etranj.
Nou pral pase nan ki ti jan yon ti kras nan yon tan.
Si ou nèg tounen nan pwoblèm dènye sou egzamen ou an, pwoblèm 33,
liy nan premye ke nou ap ale nan fè isit la, louvri dosye a, se trè menm jan ak sa nou te fè a.
Se konsa, Stella, sa ki fè ke gade liy tankou, lè nou louvri yon dosye?
[Stella] Kapital DOSYE *, dosye - >> Okay. >> - Ki egal a fopen. >> Wi.
Ki nan ka sa a se? Li nan nan kòmantè a.
>> Li nan nan kòmantè a? argv [mwen] epi r?
>> Egzakteman. Dwa sou. Se konsa, Stella a totalman dwa.
Sa a se sa liy lan sanble.
Nou pwal yo ka resevwa yon varyab kouran ranpli, sere l 'nan yon * DOSYE, se konsa tout kaskèt,
DOSYE, *, ak non sa a varyab pral dosye-a.
Nou te ka rele li tou sa nou renmen. Nou te ka rele li first_file, oswa file_i, kèlkeswa sa nou ta renmen.
Lè sa a, te non an nan dosye a ki te pase nan sou liy lan bay lòd nan pwogram sa a.
Se konsa li ki estoke nan argv [mwen, a] ak Lè sa a, nou ap pral ouvè sa a dosye ki nan li mòd.
Kounye a ke nou te louvri dosye a, sa ki nan bagay la ke nou toujou gen sonje fè
chak fwa nou te louvri yon dosye? Fèmen li.
Se konsa, Missy, ki jan nou fèmen yon dosye?
[Missy] fkloz (ranpli) >> fkloz (ranpli). Egzakteman.
Great. Oke. Si nou gade nan sa a fè kòmantè dwa isit la,
li di, "Open argv [mwen] epi enprime sa li yo stdou."
>> Creole soti se yon non etranj. Stdou se jis fason nou nan li di
nou vle enprime li nan tèminal la; nou vle enprime li nan kouran an pwodiksyon estanda.
Nou ka aktyèlman debarase m de sa a kòmantè dwa isit la.
Mwen pral kopi li ak keratin li depi lè sa a sa nou te fè sa.
Nan pwen sa a, kounye a nou gen li ti jan nan dosye pa ti jan.
Nou te diskite yon koup nan fason nan lekti dosye.
Kilès kòmandman sa yo yo se favorites ou a byen lwen tèlman?
Ki fason ou wè oswa ou sonje, li dosye?
[Danyèl] frèd? >> Frèd? Se konsa, frèd a se youn. Jimmy, ou konnen nenpòt lòt moun?
[Jimmy] No >> Okay. Non. Charlotte? Alexander? Nenpòt lòt moun? Oke.
Se konsa, yo menm ki lòt yo fgetc, se yon sèl ki nou pral sèvi ak yon anpil.
Genyen tou fskanf; ou nèg wè yon modèl isit la?
Yo tout yo kòmanse avèk f. Anyen fè ak yon dosye.
Genyen nan frèd, fgetc, fskanf. Sa yo se tout nan fonksyon li yo.
Pou ekri nou gen fwrite, nou gen fputc olye pou yo fgetc.
Nou menm tou nou te fprintf renmen nou te wè sou egzamen an.
Depi sa a se yon pwoblèm ki enplike nan lekti ki sòti nan yon dosye li an,
nou pral sèvi ak youn nan twa sa yo fonksyon.
Nou pa pwal yo sèvi ak sa yo fonksyon desann isit la.
Fonksyon sa yo, yo tout yo te jwenn nan bibliyotèk la estanda mwen / O.
Se konsa, si ou gade nan tèt la nan pwogram sa a,
ou ka wè ke nou te deja enkli dosye a header pou bibliyotèk la estanda mwen / O.
Si nou vle konnen ki youn nou vle itilize,
nou ka toujou louvri moute paj sa yo moun.
Se konsa, nou ka tape stdio nonm
pou li epi li tout sou D 'a stdio ak fonksyon pwodiksyon nan C.
Epi nou ka deja wè oh, gade. Li nan mansyone fgetc, li te mansyone fputc.
Se konsa, ou ka fè egzèsis desann yon ti jan ak gade nan, di, fgetc
ak gade nan paj nonm li yo.
Ou ka wè ke li ale ansanm ak yon pakèt antye nan lòt fonksyon:
fgetc, fje, getc, getchar, ap resevwa, ungetc, ak D 'li yo nan karaktè ak fisèl.
Se konsa, sa a se ki jan nou li nan karaktè ak fisèl nan dosye soti nan opinyon estanda,
ki se esansyèlman soti nan itilizatè lan.
Ak sa a se jan nou fè li nan aktyèl C.
Se konsa, sa a se pa sa lè l sèvi avèk GetString la ak fonksyon GetChar
ke nou te itilize nan bibliyotèk la CS50.
Nou pwal fè pwoblèm sa a nan yon koup nan fason
pou ke ou ka wè de fason diferan nan fè li.
Tou de fonksyon an frèd ki Danyèl mansyone ak fgetc se yon bon fason fè li.
Mwen panse ke fgetc se yon ti kras pi fasil, paske li gen sèlman, jan ou wè la a,
yon sèl agiman, a * DOSYE ke nou ap eseye li karaktè ki soti nan,
ak valè retounen li yo se yon int.
Ak sa a se yon ti kras konfizyon, dwa?
>> Paske nou ap vin yon karaktè, konsa poukisa pa fè sa a retounen yon Char?
Ou nèg gen nenpòt lide sou poukisa sa a pa ta ka retounen yon Char?
[Missy repons, enkonpreansibl] >> Yeah. Se konsa, Missy nan totalman dwa.
Si li nan ASCII, lè sa a ta ka sa a nonm antye dwe mappé nan yon Char vrè.
Te kapab yon karaktè ASCII, ak sa a, se dwa.
Sa a se egzakteman sa k ap pase.
Nou ap sèvi ak yon int tou senpleman paske li gen plis miyèt moso.
Li nan pi gwo pase yon Char; Char nou yo sèlman gen 8 Bits, ki 1 multiple sou 32-bit machin nou yo.
Ak yon int gen vo tout bytes 4 'nan espas.
Epi li vire soti nan fason sa a nan fgetc travay,
si nou desann nan Rezime nou yo nan paj sa a nonm yon ti jan,
woulo liv tout wout la desann. Li sanble ke yo itilize sa a valè espesyal ki rele èof.
Li se yon konstan espesyal kòm valè a retounen nan fonksyon an fgetc
chak fwa ou frape nan fen dosye a, oswa si ou jwenn yon erè.
Epi li sanble ke yo fè konparezon sa yo ak èof byen,
ou vle gen ki kantite lajan siplemantè nan enfòmasyon ki di ou gen nan yon int
kòm opoze a lè l sèvi avèk yon varyab Char.
Menm si fgetc se efektivman jwenn yon karaktè ki sòti nan yon dosye li an,
ou vle sonje ke li ap retounen yon bagay ki nan int kalite ba ou.
Sa te di, li nan jistis fasil yo itilize.
Li nan pral bay nou yon karaktè, konsa tou tout sa nou dwe fè se kontinye mande dosye a,
"Ban mwen karaktè kap vini an, ban m 'karaktè kap vini an, ban m' karaktè nan pwochen,"
jiskaske nou jwenn nan fen a nan dosye a.
Ak ki pral rale nan yon karaktè nan yon moman nan dosye nou an,
ak Lè sa a, nou ka fè tou sa nou renmen ak li.
Nou ka magazen li, nou ka ajoute li nan yon fisèl, nou ka enprime li.
Fè nenpòt nan sa.
>> Zoum tounen soti ak pral tounen nan pwogram cat.c nou an,
si nou ap ale nan sèvi ak fgetc,
ki jan ta ka nou ap apwoche liy sa a pwochen nan kòd?
Nou pral sèvi ak - frèd ap fè yon bagay yon ti kras diferan.
Ak tan sa a, nou jis ap pwal itilize fgetc jwenn yon karaktè nan yon tan.
Nan pwosesis yon dosye tout, ki sa ki ta ka nou dwe fè?
Konbyen karaktè enprimri ki gen nan yon dosye?
Gen yon anpil. Se konsa, ou pwobableman vle jwenn youn
ak Lè sa a, jwenn yon lòt epi pou yo jwenn yon lòt epi pou yo jwenn yon lòt.
Ki kalite algorithm ou panse nou ta ka gen yo sèvi ak isit la?
Ki kalite -? [Alexander] A pou riban? >> Egzakteman.
Gen kèk kalite riban.
A pou riban se aktyèlman gwo, nan ka sa a.
Li te tankou ou tap di, li son tankou ou vle yon riban sou dosye a tout antye,
jwenn yon karaktè nan yon tan.
Nenpòt sijesyon sou sa ki ki ta ka sanble?
[Aleksann, enkonpreansibl]
>> Okay, jis fè m 'konnen nan lang angle ki sa ou ap eseye fè? [Aleksann, enkonpreansibl]
Se konsa, nan ka sa a, li son tankou nou ap jis ap eseye riban sou dosye a tout antye.
[Alexander] Se konsa, mwen > Gwosè a nan -?
Mwen devine gwosè a nan dosye a, dwa? Gwosè a - we'll jis ekri li tankou sa a.
Kantite moun ki nan dosye pou tan an ke yo te, mwen + +.
Se konsa, li sanble ke nan fason ou sa a lè l sèvi avèk fgetc, e sa se nouvo,
se ke gen nan pa gen fason fasil jis jwenn gwosè a nan yon dosye
ak sa a "sizof" di ki kalite konstwi ke ou te wè anvan.
Lè nou itilize ki fonksyon fgetc, nou ap entwodwi kèk kalite
nouvo, fenki sentaks sa a pou riban, kote olye pou yo lè l sèvi avèk jis yon kontwa debaz
ale karaktè pa karaktè yo, nou ap ale nan rale yon karaktè nan yon moman,
yon karaktè nan yon moman, ak wout la nou konnen nou se nan fen a
se pa sa lè nou te konte yon sèten kantite karaktè,
Men, lè pèsonaj la nou rale mete deyò se ke fen espesyal nan karaktè dosye-a.
Se konsa, nou ka fè sa lè - Mwen rele sa a ch, epi nou ap ale nan inisyalize li
ak premye rele nou jwenn karaktè nan premye soti nan dosye a.
Se konsa, nan pati sa a isit la, sa a se pral jwenn yon karaktè soti nan dosye a
epi estoke l 'nan ch la varyab.
Nou pwal kontinye ap fè sa jiskaske nou jwenn nan fen a nan dosye a,
ki nou fè nan fè tès pou pèsonaj la pa te egal a ki karaktè èof espesyal.
Lè sa a, olye de fè ch + +, ki ta jis kantite valè a,
Se konsa, si nou li yon soti A nan dosye a, yon kapital A, di,
ch + + ap ban nou b, ak Lè sa a, nou ta jwenn c ak Lè sa a, d.
Sa a se klèman pa ki sa nou vle. Ki sa nou vle isit la
nan sa a ti jan pase a se nou vle jwenn karaktè nan pwochen nan dosye a.
>> Se konsa, kouman ta ka nou jwenn karaktè nan pwochen nan dosye a?
Ki jan nou jwenn karaktè nan premye nan dosye a?
[Elèv] fgetfile? >> Fgetc, oswa, regrèt, ou yo te totalman dwa.
Mwen mal ekri li dwa a. Se konsa, yeah.
Isit la olye pou yo fè ch + +,
nou ap jis pral rele fgetc (ranpli) ankò
epi estoke rezilta a nan varyab menm ch nou an.
[Kesyon elèv, enkonpreansibl]
>> Sa a se kote mesye sa yo * DOSYE se espesyal.
Chemen an, yo travay se yo - lè w ou fèk louvri - lè w ou fèk fè ki rele fopen,
a * DOSYE efektivman sèvi kòm yon konsèy nan konmansman an nan dosye a.
Lè sa a, chak fwa ou rele fgetc, l ap deplase yon karaktè nan dosye a.
Se konsa, chak fwa ou rele sa a, w ap incrementing konsèy la dosye pa youn karaktè.
Ak ki lè ou fgetc ankò, w ap deplase li yon lòt karaktè
ak yon lòt karaktè ak yon lòt karaktè ak karaktè lòt.
[Kesyon elèv, enkonpreansibl] >> Epi that's - yeah.
Li nan kalite sa a majik anba kapo machin lan.
Ou jis kenbe incrementing nan.
Nan pwen sa a, ou ap kapab aktyèlman travay avèk yon karaktè.
Se konsa, kouman ta ka nou enprime sa a soti nan ekran an, kounye a?
Nou ka sèvi ak menm bagay la printf ke nou itilize anvan.
Ke nou ve yo te lè l sèvi avèk tout semès la.
Nou ka rele printf,
epi nou ka pase nan pèsonaj la jis tankou sa.
Yon lòt fason fè li se olye ke lè l sèvi avèk printf epi ki gen fè sa fisèl fòma,
nou ka tou itilize youn nan fonksyon yo lòt.
Nou ka sèvi ak fputc, ki simagri yon karaktè ekran an,
eksepte si nou gade nan fputc - kite m 'rale soti yon ti jan.
Nou wè sa ki nan bon se li pran nan pèsonaj la ke nou li soti lè l sèvi avèk fgetc,
men Lè sa a, nou gen bay li yon kouran nan enprime a.
Nou ka tou itilize fonksyon an putchar, ki pral mete dirèkteman nan soti estanda.
Se konsa, gen yon pakèt antye nan opsyon diferan ke nou ka itilize pou enprime.
Yo ap tout nan bibliyotèk la estanda mwen / O.
Nenpòt lè ou vle enprime - pou printf, pa default, pral enprime estanda a espesyal soti kouran,
ki se ki stdou.
Se konsa, nou ka jis gade nan li kòm kalite sa a valè majik, stdou nan isit la.
Wouch. Mete virgules deyò a.
>> Sa a se yon anpil nan nouvo, enfòmasyon fenki nan isit la.
Yon anpil nan sa a se trè idyomatik an, nan sans ke sa a se kòd
sa ki ekri nan fason sa a jis paske li nan pwòp li, fasil li.
Gen anpil fason diferan nan fè l ', anpil fonksyon diferan ou ka itilize,
men nou yo gen tandans jis swiv sa yo modèl menm sou yo ak sou.
Se konsa, pa dwe etone si ou wè kòd tankou sa a k'ap moute ankò epi ankò.
Tout dwa. Nan pwen sa a, nou bezwen kraze pou jounen an.
Mèsi pou vini yo. Mèsi pou l ap gade si ou se sou entènèt. Epitou, n ap wè ou an semèn pwochèn.
[CS50.TV]