1 00:00:00,000 --> 00:00:02,730 [Powered by Google Translate] [ADRAN 5: LLAI CYSURUS] 2 00:00:02,730 --> 00:00:05,180 [Nate Hardison, Prifysgol Harvard] 3 00:00:05,180 --> 00:00:08,260 [Mae hyn yn CS50.] [CS50.TV] 4 00:00:08,260 --> 00:00:11,690 Felly croesawu yn ôl, guys. 5 00:00:11,690 --> 00:00:16,320 Croeso i adran 5. 6 00:00:16,320 --> 00:00:20,220 Ar y pwynt hwn, ar ôl cwblhau cwis 0 a ar ôl gweld sut rydych chi wedi ei wneud, 7 00:00:20,220 --> 00:00:25,770 gobeithio y byddwch yn teimlo'n wirioneddol dda oherwydd fy mod yn falch iawn gan y sgoriau yn yr adran hon. 8 00:00:25,770 --> 00:00:28,050 Ar gyfer ein gwylwyr ar-lein, rydym wedi cael ychydig o gwestiynau 9 00:00:28,050 --> 00:00:33,680 am y ddwy flynedd ddiwethaf problemau ar y set problem - neu ar y cwis, yn hytrach. 10 00:00:33,680 --> 00:00:39,690 Felly, rydym yn mynd i fynd dros y rhai yn gyflym iawn fel bod pawb yn gweld yr hyn a ddigwyddodd 11 00:00:39,690 --> 00:00:45,060 a sut i fynd drwy'r ateb gwirioneddol yn hytrach na dim ond edrych ar yr ateb ei hun. 12 00:00:45,060 --> 00:00:50,330 Rydym yn mynd i fynd dros yr ychydig o broblemau yn gyflym iawn, 32 a 33. 13 00:00:50,330 --> 00:00:53,240 Dim ond, eto, fel bod y gwylwyr ar-lein yn gweld hyn. 14 00:00:53,240 --> 00:00:59,080 >> Os ydych yn droi at eich problem 32, sydd ar dudalen 13, 15 00:00:59,080 --> 00:01:02,730 13 allan o 16, problem 32 yw popeth am gyfnewid. 16 00:01:02,730 --> 00:01:05,010 Roedd yn ymwneud â chyfnewid dau rif cyfan. 17 00:01:05,010 --> 00:01:08,740 Dyma'r broblem yr ydym wedi mynd dros ychydig o weithiau mewn darlith. 18 00:01:08,740 --> 00:01:13,590 Ac yn y fan hon, yr hyn rydym yn gofyn i chi ei wneud yw olrhain cof gyflym. 19 00:01:13,590 --> 00:01:17,000 I lenwi'r gwerthoedd y newidynnau fel y maent ar y simnai 20 00:01:17,000 --> 00:01:20,250 fel y cod yn mynd drwy'r swyddogaeth cyfnewid. 21 00:01:20,250 --> 00:01:24,500 Yn benodol, yr hyn rydym yn edrych ar - I'm mynd i roi hyn iPad i lawr - 22 00:01:24,500 --> 00:01:29,650 yn arbennig, yr hyn rydym ni'n edrych arno yw y llinell hon rhif 6 dde yma. 23 00:01:29,650 --> 00:01:36,740 Ac mae'n rhif 6 am ychydig contiguity â'r broblem blaenorol. 24 00:01:36,740 --> 00:01:41,720 Yr hyn yr ydym eisiau ei wneud yw dangos neu labelu cyflwr cof 25 00:01:41,720 --> 00:01:46,090 fel y mae ar yr adeg pan rydym yn gweithredu hyn 6 rhif llinell, 26 00:01:46,090 --> 00:01:52,540 sydd i bob pwrpas yn dychwelyd o ein swyddogaeth gyfnewid iawn yma. 27 00:01:52,540 --> 00:01:59,450 Os byddwn yn sgrolio i lawr yma, gwelsom fod y cyfeiriadau o bopeth yn y cof ei ddarparu i ni. 28 00:01:59,450 --> 00:02:02,540 Mae hyn yn allweddol iawn; byddwn yn dod yn ôl ato mewn dim ond hyn o bryd. 29 00:02:02,540 --> 00:02:09,240 Ac yna i lawr yma yn y gwaelod, cawsom diagram cof bach ein bod ni'n mynd i gyfeirio atynt. 30 00:02:09,240 --> 00:02:12,490 Rwyf wedi gwneud mewn gwirionedd hyn ar fy iPad. 31 00:02:12,490 --> 00:02:20,720 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. 32 00:02:20,720 --> 00:02:26,540 >> Gadewch i ni ddechrau. Yn gyntaf, gadewch i ni ganolbwyntio ar yr ychydig cyntaf o linellau o brif iawn yma. 33 00:02:26,540 --> 00:02:30,220 I ddechrau, rydym yn mynd i ymgychwyn x i 1 a y i 2. 34 00:02:30,220 --> 00:02:33,040 Felly, rydym wedi ddau newidyn cyfanrif, maen nhw'n ddau yn mynd i gael ei roi ar y corn. 35 00:02:33,040 --> 00:02:36,050 Rydym yn mynd i roi 1 a 2 mewn iddynt. 36 00:02:36,050 --> 00:02:43,150 Felly, os wyf yn troi drosodd i fy iPad, gobeithio, gadewch i ni weld - 37 00:02:43,150 --> 00:02:48,660 Apple TV adlewyrchu, a dyna ni. Iawn. 38 00:02:48,660 --> 00:02:51,670 Felly, os wyf yn troi drosodd i fy iPad, 39 00:02:51,670 --> 00:02:56,220 Rwyf am i ymgychwyn x i 1 a y i 2. 40 00:02:56,220 --> 00:03:00,580 Rydym yn gwneud hynny yn eithaf syml drwy ysgrifennu 1 yn y blwch wedi'i farcio x 41 00:03:00,580 --> 00:03:07,730 a 2 yn y blwch wedi'i farcio y. Eithaf syml. 42 00:03:07,730 --> 00:03:11,620 Felly nawr gadewch i ni fynd yn ôl i'r gliniadur, gweld beth fydd yn digwydd nesaf. 43 00:03:11,620 --> 00:03:15,810 Felly, mae hyn llinell nesaf yw lle mae pethau'n mynd yn anodd. 44 00:03:15,810 --> 00:03:28,110 Rydym yn pasio y cyfeiriad x a chyfeiriad y fel y paramedrau a a b at y swyddogaeth cyfnewid. 45 00:03:28,110 --> 00:03:32,380 Mae'r cyfeiriad x a chyfeiriad y pethau na allwn gyfrifo 46 00:03:32,380 --> 00:03:36,360 heb gyfeirio at y pwyntiau bwled i'r dde i lawr yma. 47 00:03:36,360 --> 00:03:39,750 Ac yn ffodus, y ddau bwynt bwled cyntaf yn dweud wrthym yn union beth yr atebion yn cael eu. 48 00:03:39,750 --> 00:03:44,740 Mae'r cyfeiriad x mewn cof yw 10, a chyfeiriad y yn y cof yw 14. 49 00:03:44,740 --> 00:03:51,870 Felly dyna'r gwerthoedd sy'n cael eu pasio i mewn fel a b atodol yn ein swyddogaeth cyfnewid. 50 00:03:51,870 --> 00:04:00,760 Felly, unwaith eto, gan newid yn ôl at ein diagram, gallaf ysgrifennu 10 mewn 51 00:04:00,760 --> 00:04:07,400 a 14 yn b. 52 00:04:07,400 --> 00:04:11,610 Yn awr, y pwynt yw lle rydym yn bwrw ymlaen â'r cyfnewid. 53 00:04:11,610 --> 00:04:14,520 Felly flipping yn ôl i'r gliniadur eto, 54 00:04:14,520 --> 00:04:21,079 rydym yn gweld bod y ffordd y mae'r cyfnewid yn gweithio yw fy mod dereference cyntaf a siop y canlyniad yn y tmp. 55 00:04:21,079 --> 00:04:27,650 Felly, y gweithredwr dereference yn dweud, "Hey. Trin y cynnwys amrywio a fel cyfeiriad. 56 00:04:27,650 --> 00:04:33,830 Ewch i beth bynnag yn cael ei storio yn y cyfeiriad hwnnw, ac yn ei lwytho. " 57 00:04:33,830 --> 00:04:41,720 Beth allwch chi ei llwytho allan o'r newidyn yn mynd i gael eu storio yn ein newidyn tmp. 58 00:04:41,720 --> 00:04:45,150 Flipping yn ôl i'r iPad. 59 00:04:45,150 --> 00:04:51,690 Os ydym yn mynd i'r afael 10, rydym yn gwybod y cyfeiriad hwnnw 10 yw'r x varible 60 00:04:51,690 --> 00:04:55,480 gan y dywedwyd wrthym gan ein pwynt bwled sy'n cyfeiriad x yn y cof yw 10. 61 00:04:55,480 --> 00:05:00,180 Felly, gallwn ni fynd yno, yn cael y gwerth ohono, sef 1, fel y gwelwn ar ein iPad, 62 00:05:00,180 --> 00:05:06,300 a llwytho hynny i tmp. 63 00:05:06,300 --> 00:05:08,250 Unwaith eto, nid yw hyn yn cynnwys terfynol. 64 00:05:08,250 --> 00:05:14,350 Rydym yn mynd i gerdded trwy'r a byddwn yn cyrraedd ein cyflwr olaf y rhaglen ar y diwedd. 65 00:05:14,350 --> 00:05:17,210 Ond ar hyn o bryd, mae gennym y gwerth 1 storio yn tmp. 66 00:05:17,210 --> 00:05:19,210 >> Ac mae cwestiwn cyflym dros yma. 67 00:05:19,210 --> 00:05:23,980 [Alexander] A yw'r gweithredwr dereference - dim ond yr hawl seren o flaen y newidyn? 68 00:05:23,980 --> 00:05:27,600 >> Ydy. Felly, y gweithredwr dereference, wrth i ni droi yn ôl at ein gliniadur unwaith eto, 69 00:05:27,600 --> 00:05:33,780 yw hyn yn seren i'r dde o flaen. 70 00:05:33,780 --> 00:05:37,460 Yn yr ystyr hwnnw, mae'n - rydych cyferbynnu hynny gyda'r gweithredwr lluosi 71 00:05:37,460 --> 00:05:42,400 sy'n gofyn am ddau beth, y gweithredwr dereference yn weithredwr unary. 72 00:05:42,400 --> 00:05:46,130 Gymhwyso Dim ond i un gwerth yn hytrach na gweithredwr deuaidd, 73 00:05:46,130 --> 00:05:48,810 lle rydych yn gwneud cais i ddau wahanol werthoedd. 74 00:05:48,810 --> 00:05:52,080 Felly, dyna beth sy'n digwydd yn y llinell hon. 75 00:05:52,080 --> 00:05:58,390 Rydym yn llwytho y gwerth 1 a storio i mewn i'n amrywiol dros dro gyfanrif. 76 00:05:58,390 --> 00:06:05,800 Mae'r llinell nesaf, byddwn yn storio'r cynnwys b i mewn - 77 00:06:05,800 --> 00:06:12,630 neu, yn hytrach, byddwn yn storio'r cynnwys y b yn pwyntio at i mewn i'r man lle y mae yn pwyntio i. 78 00:06:12,630 --> 00:06:17,690 Os byddwn yn dadansoddi'r o'r dde i'r chwith, rydym yn mynd i b dereference, 79 00:06:17,690 --> 00:06:23,580 ydym yn mynd i fynd i'r afael 14, rydym yn mynd i chrafangia 'r cyfanrif sydd yno, 80 00:06:23,580 --> 00:06:26,900 ac yna rydym yn mynd i fynd i'r cyfeiriad 10, 81 00:06:26,900 --> 00:06:34,240 ac rydym yn mynd i daflu'r ganlyniad i'n dereference o b i mewn i'r gofod. 82 00:06:34,240 --> 00:06:40,080 Flipping yn ôl i'n iPad, lle gallwn wneud hwn yn ychydig yn fwy concrid, 83 00:06:40,080 --> 00:06:44,070 gallai fod o gymorth os byddaf yn ysgrifennu rhifau ar bob un o'r cyfeiriadau yma. 84 00:06:44,070 --> 00:06:53,820 Felly, rydym yn gwybod bod yn y, yr ydym ar gyfeiriad 14, x yw yn y cyfeiriad 10. 85 00:06:53,820 --> 00:07:00,180 Pan fyddwn yn dechrau am b, rydym b dereference, rydyn ni'n mynd i chrafangia 'r gwerth 2. 86 00:07:00,180 --> 00:07:08,320 Rydym yn mynd i fanteisio ar y gwerth hwn oherwydd dyna yw gwerth sy'n byw yn y cyfeiriad 14. 87 00:07:08,320 --> 00:07:15,700 Ac rydym ni'n mynd i roi yn y newidyn sy'n byw yn y cyfeiriad 10, 88 00:07:15,700 --> 00:07:19,160 sydd yn iawn yno, sy'n cyfateb i'n x amrywiol. 89 00:07:19,160 --> 00:07:21,810 Felly, gallwn wneud ychydig o drosysgrifo yma 90 00:07:21,810 --> 00:07:35,380 lle rydym yn cael gwared ar ein 1 ac yn lle hynny rydym yn ysgrifennu 2. 91 00:07:35,380 --> 00:07:39,560 Felly yr holl yn dda ac yn dda yn y byd, er rydym wedi x overwritten yn awr. 92 00:07:39,560 --> 00:07:44,890 Rydym wedi ei storio x yn werth hen yn ein newidyn tmp. 93 00:07:44,890 --> 00:07:50,210 Felly, gallwn gwblhau'r cyfnewid gyda'r llinell nesaf. 94 00:07:50,210 --> 00:07:53,030 Flipping yn ôl at ein gliniadur. 95 00:07:53,030 --> 00:07:58,150 Nawr cyfan sy'n weddill yw i gymryd y cynnwys allan o'n newidyn dros dro gyfanrif 96 00:07:58,150 --> 00:08:05,630 ac yn eu storio yn y newidyn sy'n byw yn y cyfeiriad a b yn cynnal. 97 00:08:05,630 --> 00:08:10,230 Felly, rydyn ni'n mynd i b dereference yn effeithiol i gael mynediad at y newidyn 98 00:08:10,230 --> 00:08:14,340 hynny yw yn y cyfeiriad a b yn dal ynddo, 99 00:08:14,340 --> 00:08:19,190 ac rydym yn mynd i stwffio'r gwerth y tmp yn dal i mewn iddo. 100 00:08:19,190 --> 00:08:23,280 Flipping yn ôl at y iPad unwaith yn rhagor. 101 00:08:23,280 --> 00:08:31,290 Gallaf dileu'r gwerth yma, 2, 102 00:08:31,290 --> 00:08:41,010 ac yn lle hynny byddwn yn copïo'r hawl 1 i mewn iddo. 103 00:08:41,010 --> 00:08:43,059 Yna y llinell nesaf sy'n executes, wrth gwrs - 104 00:08:43,059 --> 00:08:47,150 os ydym yn troi yn ôl at y gliniadur - a yw hyn 6 pwynt, 105 00:08:47,150 --> 00:08:52,500 sef y pwynt yr oeddem am gael ein diagram llenwi'n llwyr allan. 106 00:08:52,500 --> 00:08:58,940 Felly flipping yn ôl at y iPad unwaith eto, dim ond er mwyn i chi weld y diagram a gwblhawyd, 107 00:08:58,940 --> 00:09:06,610 gallwch weld bod gennym 10 mewn, a 14 yn b, 1 mewn tmp, a 2 mewn x, a 1 mewn y. 108 00:09:06,610 --> 00:09:11,000 A oes unrhyw gwestiynau am hyn? 109 00:09:11,000 --> 00:09:14,640 A yw hyn yn gwneud mwy o synnwyr, ar ôl cerdded drwyddo? 110 00:09:14,640 --> 00:09:24,850 Gwneud llai o synnwyr? Gobeithio na. Iawn. 111 00:09:24,850 --> 00:09:28,230 >> Pointers yn bwnc anodd iawn. 112 00:09:28,230 --> 00:09:33,420 Un o'r guys ydym yn gweithio â nhw yn cael dywediad cyffredin iawn: 113 00:09:33,420 --> 00:09:36,590 "Er mwyn deall awgrymiadau, mae'n rhaid i chi ddeall awgrymiadau." 114 00:09:36,590 --> 00:09:40,530 Pa iawn yn fy marn wir. Mae'n cymryd peth amser i ddod i arfer ag ef. 115 00:09:40,530 --> 00:09:45,360 Gan dynnu llawer o luniau, gan dynnu llawer o ddiagramau cof fel yr un yma yn ddefnyddiol iawn, 116 00:09:45,360 --> 00:09:49,480 ac ar ôl i chi gerdded drwy esiampl ar ôl enghraifft ar ôl enghraifft, 117 00:09:49,480 --> 00:09:54,450 bydd yn dechrau gwneud synnwyr ychydig yn fwy ac ymdeimlad o ychydig yn fwy ac ymdeimlad ychydig yn fwy. 118 00:09:54,450 --> 00:10:01,560 Yn olaf, un diwrnod, bydd gennych y cyfan meistroli'n llwyr. 119 00:10:01,560 --> 00:10:13,800 Unrhyw gwestiynau cyn i ni symud ymlaen i'r broblem nesaf? Mae pob hawl. 120 00:10:13,800 --> 00:10:18,840 Felly, troi yn ôl i'r gliniadur. 121 00:10:18,840 --> 00:10:23,300 Y broblem nesaf gennym yw rhif 33 problem ar ffeil I / O. 122 00:10:23,300 --> 00:10:26,350 Chwyddo i mewn ar y darn ychydig. 123 00:10:26,350 --> 00:10:28,710 Problem 33 - Ie? 124 00:10:28,710 --> 00:10:32,110 >> [Daniel] Rwyf newydd gael gwestiwn cyflym. Mae hyn yn seren, neu seren, 125 00:10:32,110 --> 00:10:35,590 fe'i gelwir dereferencing pan fyddwch yn defnyddio seren o'r blaen. 126 00:10:35,590 --> 00:10:38,820 Beth yw ei enw pan fyddwch yn defnyddio'r ampersand o'r blaen? 127 00:10:38,820 --> 00:10:43,140 >> Mae'r ampersand cyn yw cyfeiriad-y gweithredwr. 128 00:10:43,140 --> 00:10:45,880 Felly, gadewch i ni sgrolio yn ôl i fyny. 129 00:10:45,880 --> 00:10:49,310 Wps. Im 'i mewn modd chwyddo felly ni allaf mewn gwirionedd sgrôl. 130 00:10:49,310 --> 00:10:52,780 Os ydym yn edrych ar y cod hwn yn gyflym iawn iawn yma, 131 00:10:52,780 --> 00:10:54,980 unwaith eto, un peth yn digwydd. 132 00:10:54,980 --> 00:10:59,180 Os ydym yn edrych ar y cod hwn i'r dde yma, ar y llinell hon os ydym yn gwneud yr alwad i gyfnewid, 133 00:10:59,180 --> 00:11:10,460 y ampersand yn unig yw dweud "yn cael y cyfeiriad lle byw x amrywiol." 134 00:11:10,460 --> 00:11:14,460 Pan fydd eich compiler yn casglu eich cod, 135 00:11:14,460 --> 00:11:20,590 mae'n rhaid iddo mewn gwirionedd yn gorfforol farcio lle mewn cof ar gyfer eich holl newidynnau i fyw. 136 00:11:20,590 --> 00:11:24,910 Ac felly yr hyn y gall y compiler wedyn wneud unwaith ei fod yn llunio popeth, 137 00:11:24,910 --> 00:11:31,110 yn gwybod, "O, yr wyf yn rhoi x yn y cyfeiriad 10. wyf yn rhoi y cyfeiriad yn 14." 138 00:11:31,110 --> 00:11:34,640 Gall yna llenwch y gwerthoedd hyn i chi. 139 00:11:34,640 --> 00:11:44,740 Felly, gallwch chi wedyn - mae'n gall wedyn yn trosglwyddo'r i mewn ac pasio a y yn ogystal. 140 00:11:44,740 --> 00:11:50,730 Mae'r rhain yn guys gael y cyfeiriad, ond maent hefyd, pan fyddwch yn pasio i mewn i'r swyddogaeth cyfnewid, 141 00:11:50,730 --> 00:11:55,690 hyn, mae gwybodaeth math y * int i'r dde yma, yn dweud wrth y casglwr, 142 00:11:55,690 --> 00:12:01,350 "Iawn, rydym yn mynd i gael eu dehongli cyfeiriad hwn fel cyfeiriad newidyn cyfanrif." 143 00:12:01,350 --> 00:12:05,900 Fel chyfeiriad int, sy'n wahanol i gyfeiriad newidyn cymeriad 144 00:12:05,900 --> 00:12:09,930 oherwydd bod int yn cymryd i fyny, ar beiriant 32-bit, yn cymryd fyny 4 bytes o le, 145 00:12:09,930 --> 00:12:13,310 tra bod gymeriad ond yn cymryd i fyny 1 beit o le. 146 00:12:13,310 --> 00:12:17,310 Felly mae'n bwysig gwybod hefyd beth yw - beth sy'n byw, pa fath o werth 147 00:12:17,310 --> 00:12:20,340 yn byw yn y cyfeiriad a gafodd eu pasio i mewn 148 00:12:20,340 --> 00:12:22,020 Neu y cyfeiriad yr ydych chi'n delio â nhw. 149 00:12:22,020 --> 00:12:29,020 Felly, yr ydych yn gwybod faint o bytes o wybodaeth i mewn gwirionedd yn llwytho o'ch RAM. 150 00:12:29,020 --> 00:12:31,780 Ac yna, ie, mae hyn, gweithredwr dereference fel chi yn gofyn, 151 00:12:31,780 --> 00:12:37,200 yn mynd ac yn cael gafael gwybodaeth mewn cyfeiriad penodol. 152 00:12:37,200 --> 00:12:42,820 Felly mae'n ei ddweud, gyda newidyn hwn a yma, yn trin y cynnwys a fel cyfeiriad, 153 00:12:42,820 --> 00:12:47,880 yn mynd i'r cyfeiriad hwnnw, ac yn tynnu allan, llwytho i mewn i'r prosesydd, llwyth mewn cofrestr 154 00:12:47,880 --> 00:12:56,340 y gwerthoedd gwirioneddol neu gynnwys sy'n byw yn y cyfeiriad hwnnw. 155 00:12:56,340 --> 00:12:59,620 Unrhyw mwy o gwestiynau? Mae'r rhain yn gwestiynau da. 156 00:12:59,620 --> 00:13:01,650 Mae'n llawer o derminoleg newydd hefyd. 157 00:13:01,650 --> 00:13:09,800 Mae hefyd yn fath o funky, gweld a a * mewn mannau gwahanol. 158 00:13:09,800 --> 00:13:13,180 >> Mae pob hawl. 159 00:13:13,180 --> 00:13:18,530 Felly, yn ôl i problem 33, ffeilio I / O. 160 00:13:18,530 --> 00:13:22,540 Roedd hyn yn un o'r problemau hynny fy mod yn meddwl un neu ddau o bethau yn digwydd. 161 00:13:22,540 --> 00:13:25,400 Un, mae'n bwnc gweddol newydd. 162 00:13:25,400 --> 00:13:30,590 Fe'i cyflwynwyd yn eithaf buan cyn y cwis, 163 00:13:30,590 --> 00:13:33,400 ac yna yr wyf yn meddwl ei fod yn fath o fel un o'r rhai problemau geiriau mewn mathemateg 164 00:13:33,400 --> 00:13:39,720 lle maent yn rhoi llawer o wybodaeth, ond nad ydych mewn gwirionedd yn darfod i fyny gorfod defnyddio tunnell ohono. 165 00:13:39,720 --> 00:13:44,060 Mae'r rhan gyntaf o'r broblem hon yn disgrifio beth yw ffeil CSV yn. 166 00:13:44,060 --> 00:13:50,620 Yn awr, ffeil CSV, yn ôl y disgrifiad, yn ffeil gwerthoedd atalnod-gwahanu. 167 00:13:50,620 --> 00:13:55,300 Y rheswm mae'r rhain yn i gyd yn ddiddorol, a'r rheswm chi erioed wedi eu defnyddio, 168 00:13:55,300 --> 00:14:00,800 yw, oherwydd, faint ydych erioed wedi defnyddio pethau fel Excel? 169 00:14:00,800 --> 00:14:03,240 Ffigur rhan fwyaf ohonoch wedi, yn ôl pob tebyg, neu a fydd yn eu defnyddio ar ryw adeg yn eich bywyd. 170 00:14:03,240 --> 00:14:06,430 Byddwch yn defnyddio rhywbeth fel Excel. 171 00:14:06,430 --> 00:14:10,940 Er mwyn cael y data allan o daenlen Excel neu wneud unrhyw fath o brosesu ag ef, 172 00:14:10,940 --> 00:14:17,240 os ydych chi eisiau i ysgrifennu rhaglen C neu Python raglen, Java rhaglen, 173 00:14:17,240 --> 00:14:20,070 i ddelio â'r data sydd wedi'i storio mewn 'na, 174 00:14:20,070 --> 00:14:23,170 un o'r ffyrdd mwyaf cyffredin i gael allan mewn ffeil CSV. 175 00:14:23,170 --> 00:14:26,850 A allwch chi agor Excel a phan fyddwch yn mynd i'r 'Save As' deialog, 176 00:14:26,850 --> 00:14:32,840 gallwch fynd allan ar ffurf ffeil CSV gwirioneddol. 177 00:14:32,840 --> 00:14:35,890 >> Defnyddiol gwybod sut i ddelio â'r pethau hyn. 178 00:14:35,890 --> 00:14:42,010 Mae'r ffordd y mae'n gweithio yw ei fod yn debyg i - yr wyf yn golygu, mae'n hanfod dynwared taenlen, 179 00:14:42,010 --> 00:14:47,590 lle, fel y gwelwn yma, yn y darn gadael-fwyaf, 180 00:14:47,590 --> 00:14:49,910 gennym yr holl enwau diwethaf. 181 00:14:49,910 --> 00:14:54,670 Felly, rydym wedi Malan, yna Hardison, ac yna Bowden, MacWilliam, ac yna Chan. 182 00:14:54,670 --> 00:14:59,470 Mae'r holl enwau diwethaf. Ac yna coma yn gwahanu'r enwau olaf o'r enwau cyntaf. 183 00:14:59,470 --> 00:15:02,970 David, Nate, Rob, Tommy, ac Zamyla. 184 00:15:02,970 --> 00:15:06,850 Rwyf bob amser yn cymysgu i fyny Robby a Tom. 185 00:15:06,850 --> 00:15:10,940 Ac yna, yn olaf, y drydedd golofn yw'r cyfeiriadau e-bost. 186 00:15:10,940 --> 00:15:18,500 Unwaith y byddwch yn deall hynny, gweddill y rhaglen yn eithaf syml i'w gweithredu. 187 00:15:18,500 --> 00:15:23,850 Beth rydym wedi'i wneud er mwyn dynwared y strwythur un yn ein C rhaglen 188 00:15:23,850 --> 00:15:27,510 yn cael ei rydym wedi defnyddio strwythur. 189 00:15:27,510 --> 00:15:30,520 Byddwn yn dechrau chwarae gyda hyn ychydig mwy yn ogystal. 190 00:15:30,520 --> 00:15:35,790 Gwelsom iddynt am yr ychydig cyntaf yn 3, set problem pan oeddem yn ymdrin â geiriaduron. 191 00:15:35,790 --> 00:15:40,290 Ond mae hyn yn strwythur staff storio enw olaf, enw cyntaf, ac e-bost. 192 00:15:40,290 --> 00:15:44,500 Yn union fel ein CSV ffeil storio. 193 00:15:44,500 --> 00:15:47,950 Felly, mae hyn yn unig yw trosi o un fformat i'r llall. 194 00:15:47,950 --> 00:15:54,630 Mae'n rhaid i ni droi, yn yr achos hwn, mae strwythur staff i mewn i linell, 195 00:15:54,630 --> 00:15:59,060 llinell atalnod-gwahanu, yn union fel 'na. 196 00:15:59,060 --> 00:16:01,500 Ydy hynny'n gwneud synnwyr? Rydych guys wedi cymryd yr holl cwis, 197 00:16:01,500 --> 00:16:07,680 felly yr wyf yn dychmygu eich bod wedi o leiaf wedi cael rhywfaint o amser i feddwl am hyn. 198 00:16:07,680 --> 00:16:16,410 >> Yn y swyddogaeth llogi, mae'r broblem yn gofyn i ni gymryd i mewn - zoom we'll i mewn ar y darn ychydig - 199 00:16:16,410 --> 00:16:22,480 cymryd mewn, strwythur staff a strwythur staff, gydag enw s, 200 00:16:22,480 --> 00:16:30,900 ac yn atodi ei chynnwys i'n staff.csv ffeil. 201 00:16:30,900 --> 00:16:34,230 Mae'n troi allan bod hyn yn eithaf syml i'w defnyddio. 202 00:16:34,230 --> 00:16:37,430 Byddwn yn fath o chwarae o gwmpas gyda swyddogaethau hyn ychydig yn fwy heddiw. 203 00:16:37,430 --> 00:16:44,510 Ond yn yr achos hwn, y swyddogaeth fprintf yn wir yn yr allwedd. 204 00:16:44,510 --> 00:16:51,960 Felly, gyda fprintf, gallwn argraffu, yn union fel chi guys wedi bod yn defnyddio printf y tymor cyfan. 205 00:16:51,960 --> 00:16:55,050 Gallwch printf linell i ffeil. 206 00:16:55,050 --> 00:16:59,030 Felly yn hytrach na dim ond gwneud yr alwad printf arferol lle byddwch yn rhoi iddo y llinyn fformat 207 00:16:59,030 --> 00:17:05,380 ac yna byddwch yn disodli'r holl newidynnau â'r dadleuon canlynol, 208 00:17:05,380 --> 00:17:11,290 gyda fprintf, eich dadl cyntaf yn lle y ffeil rydych am ei ysgrifennu. 209 00:17:11,290 --> 00:17:21,170 Pe baem yn edrych ar hyn yn y peiriant, er enghraifft, dyn fprintf, 210 00:17:21,170 --> 00:17:25,980 gallwn weld y gwahaniaeth rhwng printf a fprintf. 211 00:17:25,980 --> 00:17:28,960 'N annhymerus' chwyddo i mewn yma ychydig. 212 00:17:28,960 --> 00:17:33,140 Felly, gyda printf, rydym yn rhoi ei fod yn llinyn fformat, ac yna y dadleuon dilynol 213 00:17:33,140 --> 00:17:37,580 yw'r holl newidynnau ar gyfer ailosod neu amnewid yn ein llinyn fformat. 214 00:17:37,580 --> 00:17:47,310 Tra gyda fprintf, y ddadl gyntaf yn wir hwn * ffeil o'r enw nant. 215 00:17:47,310 --> 00:17:51,800 >> Symud yn ôl dros yma at ein llogi, 216 00:17:51,800 --> 00:17:54,550 rydym eisoes wedi cael ein ffeil ffrwd * agor i ni. 217 00:17:54,550 --> 00:17:57,810 Dyna beth mae hyn yn llinell gyntaf ei wneud; mae'n agor y ffeil staff.csv, 218 00:17:57,810 --> 00:18:01,690 fydd yn agor yn Atodi modd, a'r hyn oll sydd ar ôl i ni ei wneud yw 219 00:18:01,690 --> 00:18:08,640 ysgrifennwch y strwythur staff at y ffeil. 220 00:18:08,640 --> 00:18:10,870 Ac, gadewch i ni weld, gwneud wyf am ddefnyddio'r iPad? 221 00:18:10,870 --> 00:18:17,900 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 - 222 00:18:17,900 --> 00:18:33,680 gwag llogi ac mae'n cymryd mewn un ddadl, strwythur staff o'r enw s. 223 00:18:33,680 --> 00:18:44,120 Got ein braces, rydym wedi cael ein * ffeil o'r enw ffeil, 224 00:18:44,120 --> 00:18:48,380 rydym wedi ein llinell fopen a roddwyd i ni, 225 00:18:48,380 --> 00:18:51,890 a byddaf yn ysgrifennu fel dotiau gan ei fod yn eisoes yn y pedia. 226 00:18:51,890 --> 00:19:00,530 Ac yna ar ein llinell nesaf, rydym yn mynd i wneud galwad i fprintf 227 00:19:00,530 --> 00:19:03,700 ac rydym yn mynd i basio yn y ffeil yr ydym am ei argraffu i, 228 00:19:03,700 --> 00:19:10,290 ac yna ein llinyn fformat sydd - 229 00:19:10,290 --> 00:19:14,300 'N annhymerus' yn gadael i chi guys ddweud wrthyf sut mae'n edrych. 230 00:19:14,300 --> 00:19:20,500 Beth am i chi, Stella? Ydych chi'n gwybod beth yw rhan gyntaf y llinyn fformat yn edrych fel? 231 00:19:20,500 --> 00:19:24,270 [Stella] Nid wyf yn sicr. >> Mae croeso i chi ofyn i Jimmy. 232 00:19:24,270 --> 00:19:27,690 Ydych chi'n gwybod, Jimmy? 233 00:19:27,690 --> 00:19:31,000 [Jimmy] A fyddai'n dim ond yn para? Nid wyf yn gwybod. Dydw i ddim yn hollol siŵr. 234 00:19:31,000 --> 00:19:39,020 >> Iawn. Beth am, nad yw unrhyw un yn cael hyn yn gywir ar yr arholiad? 235 00:19:39,020 --> 00:19:41,770 Rhif pob hawl. 236 00:19:41,770 --> 00:19:47,920 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 237 00:19:47,920 --> 00:19:53,290 i gael eu hargraffu fel llinyn yn ein ffeil. 238 00:19:53,290 --> 00:19:59,900 Rydym yn unig yn defnyddio'r llinyn cymeriad amnewid dair gwaith gwahanol gan fod gennym enw olaf 239 00:19:59,900 --> 00:20:07,160 ddilyn gan goma, yna enw cyntaf ddilyn gan atalnod, 240 00:20:07,160 --> 00:20:12,430 ac yna yn olaf y cyfeiriad e-bost sy'n cael ei dilyn - nad yw'n 241 00:20:12,430 --> 00:20:15,140 gosod ar fy sgrîn - ond mae'n dilyn gan gymeriad Newline. 242 00:20:15,140 --> 00:20:20,060 Felly, yr wyf i'n mynd i ysgrifennu 'i jyst i lawr yno. 243 00:20:20,060 --> 00:20:23,560 Ac yna yn dilyn ein llinyn fformat, 244 00:20:23,560 --> 00:20:27,880 rydym yn unig yn cael y dirprwyon, yr ydym yn cael mynediad defnyddio'r nodiant dot 245 00:20:27,880 --> 00:20:31,370 a welsom mewn 3 set problem. 246 00:20:31,370 --> 00:20:48,820 Gallwn ddefnyddio s.last, s.first, a s.email 247 00:20:48,820 --> 00:20:58,990 i gymryd lle yn y tri gwerth yn ein llinyn fformat. 248 00:20:58,990 --> 00:21:06,190 Felly sut oedd hynny'n mynd? Gwneud synnwyr? 249 00:21:06,190 --> 00:21:09,700 Ydw? Na? O bosibl? Iawn. 250 00:21:09,700 --> 00:21:14,180 >> Y peth olaf yr ydym yn ei wneud ar ôl i ni wedi ei argraffu, ac ar ôl i ni agor ein ffeil: 251 00:21:14,180 --> 00:21:17,370 pryd bynnag y byddwn wedi agor ffeil, rydym bob amser yn rhaid i chi gofio ei gau. 252 00:21:17,370 --> 00:21:19,430 Oherwydd fel arall byddwn yn y pen draw gollwng y cof, 253 00:21:19,430 --> 00:21:22,500 gan ddefnyddio disgrifyddion ffeil. 254 00:21:22,500 --> 00:21:25,950 Felly, i gau, a swyddogaeth ydyn ni'n eu defnyddio? Daniel? 255 00:21:25,950 --> 00:21:30,120 [Daniel] mmap? >> Mmap, yn union. 256 00:21:30,120 --> 00:21:37,520 Felly, y rhan olaf o'r broblem hon oedd yn briodol cau'r ffeil, ddefnyddio'r swyddogaeth mmap, 257 00:21:37,520 --> 00:21:40,370 a dim ond yn edrych fel 'na. 258 00:21:40,370 --> 00:21:43,880 Ddim yn rhy crazy. 259 00:21:43,880 --> 00:21:46,990 Cool. 260 00:21:46,990 --> 00:21:49,520 Felly dyna problem 33 ar y cwis. 261 00:21:49,520 --> 00:21:52,480 Bydd gennym ffeil bendant yn fwy I / O dod i fyny. 262 00:21:52,480 --> 00:21:55,130 Byddwn yn gwneud ychydig yn fwy mewn darlith heddiw, neu yn adran heddiw, 263 00:21:55,130 --> 00:22:01,710 oherwydd dyna beth sy'n mynd i ffurfio y rhan fwyaf o'r hyn sydd ar y gweill pset. 264 00:22:01,710 --> 00:22:05,020 Gadewch i ni symud ymlaen o'r cwis yn y fan hon. Ydw? 265 00:22:05,020 --> 00:22:10,880 >> [Charlotte]] Pam mmap (ffeil) yn hytrach na mmap (staff.csv)? 266 00:22:10,880 --> 00:22:19,100 >> Ah. Oherwydd ei fod yn troi allan hynny - felly y cwestiwn, sy'n un gwych, 267 00:22:19,100 --> 00:22:27,800 Dyna pam, pan fyddwn yn ysgrifennu mmap, rydym yn ysgrifennu mmap (ffeil) newidyn seren 268 00:22:27,800 --> 00:22:33,680 yn hytrach na'r, enw ffeil staff.csv? A yw hynny'n gywir? Yeah. 269 00:22:33,680 --> 00:22:39,570 Felly, gadewch i ni edrych. Os byddaf yn newid yn ôl i fy laptop, 270 00:22:39,570 --> 00:22:45,040 a gadewch i ni edrych ar y swyddogaeth mmap. 271 00:22:45,040 --> 00:22:51,460 Felly, mae'r swyddogaeth mmap cau nant ac mae'n cymryd yn y pwyntydd at y nant yr ydym am ei gau, 272 00:22:51,460 --> 00:22:57,010 yn hytrach na'r enw ffeil gwirioneddol yr ydym am i gau. 273 00:22:57,010 --> 00:23:01,620 Ac mae hyn yn oherwydd y tu ôl i'r llenni, pan fyddwch yn gwneud galwad i fopen, 274 00:23:01,620 --> 00:23:12,020 pan fyddwch yn agor i fyny ffeil, rydych chi mewn gwirionedd dyrannu cof i gadw gwybodaeth am y ffeil. 275 00:23:12,020 --> 00:23:16,380 Felly, rydych wedi pwyntydd ffeil sy'n cynnwys gwybodaeth am y ffeil, 276 00:23:16,380 --> 00:23:23,080 fel y mae ar agor, ei faint, lle'r ydych ar hyn o bryd yn y ffeil, 277 00:23:23,080 --> 00:23:29,100 fel y gallwch wneud darllen ac ysgrifennu galwadau i'r lle hwnnw penodol o fewn y ffeil. 278 00:23:29,100 --> 00:23:38,060 Ydych yn darfod i fyny cau y pwyntydd yn hytrach na chau'r enw ffeil. 279 00:23:38,060 --> 00:23:48,990 >> Ydw? [Daniel] Felly, er mwyn defnyddio llogi, fyddech chi'n dweud - sut mae'n cael y mewnbwn defnyddiwr? 280 00:23:48,990 --> 00:23:53,830 A yw'r fprintf gweithredu fel GetString yn yr ystyr y bydd yn dim ond aros am y mewnbwn defnyddwyr 281 00:23:53,830 --> 00:23:57,180 ac yn gofyn i chi deipio hyn - neu aros i chi deipio y tri pheth i mewn? 282 00:23:57,180 --> 00:24:00,480 Neu a oes angen i chi ddefnyddio rhywbeth i weithredu llogi? 283 00:24:00,480 --> 00:24:04,100 >> Yeah. Felly nid ydym yn - y cwestiwn oedd, sut yr ydym yn cael y mewnbwn defnyddwyr 284 00:24:04,100 --> 00:24:09,220 er mwyn gweithredu llogi? A beth sydd gennym yma yw y galwr llogi, 285 00:24:09,220 --> 00:24:17,690 basiwyd yn y strwythur staff â phob un o'r data yn y strwythur yn barod. 286 00:24:17,690 --> 00:24:22,990 Felly fprintf yn gallu ysgrifennwch y data yn uniongyrchol at y ffeil. 287 00:24:22,990 --> 00:24:25,690 Does dim aros ar gyfer mewnbwn defnyddwyr. 288 00:24:25,690 --> 00:24:32,110 Mae'r defnyddiwr eisoes wedi rhoi mewnbwn gan priodol ei roi yn y strwythur staff. 289 00:24:32,110 --> 00:24:36,510 A phethau, wrth gwrs, yn torri os oes unrhyw un o'r arwyddion yn null, 290 00:24:36,510 --> 00:24:40,370 felly rydym yn sgrolio yn ôl i fyny yma ac rydym yn edrych ar ein strwythur. 291 00:24:40,370 --> 00:24:43,640 Mae gennym llinyn diwethaf, llinyn cyntaf, e-bost llinyn. 292 00:24:43,640 --> 00:24:48,530 Rydym bellach yn gwybod bod pawb mewn gwirionedd, o dan y cwfl, yn newidynnau * torgoch. 293 00:24:48,530 --> 00:24:53,470 Efallai na fydd neu a allai fod yn pwyntio i null. 294 00:24:53,470 --> 00:24:55,800 Efallai eu bod yn pwyntio i gof ar y domen, 295 00:24:55,800 --> 00:24:59,650 efallai cof ar y pentwr. 296 00:24:59,650 --> 00:25:04,580 Dydyn ni ddim yn gwybod, ond os bydd unrhyw un o'r arwyddion yn null, neu yn annilys, 297 00:25:04,580 --> 00:25:08,120 y byddwch yn sicr yn damwain ein swyddogaeth llogi. 298 00:25:08,120 --> 00:25:11,050 Dyna oedd rhywbeth a oedd fath o tu hwnt i gwmpas yr arholiad. 299 00:25:11,050 --> 00:25:16,440 Dydyn ni ddim yn poeni am hynny. 300 00:25:16,440 --> 00:25:22,170 Great. Iawn. Felly, yn symud ymlaen o'r cwis. 301 00:25:22,170 --> 00:25:25,760 >> Gadewch i ni gau y boi, ac rydym yn mynd i edrych ar pset 4. 302 00:25:25,760 --> 00:25:34,700 Felly, os ydych yn guys yn edrych ar y fanyleb pset, unwaith y gallwch gael mynediad iddo, cs50.net/quizzes, 303 00:25:34,700 --> 00:25:42,730 rydym yn mynd i fynd drwy rai o'r problemau heddiw adran. 304 00:25:42,730 --> 00:25:52,240 Rwy'n sgrolio i lawr - adran o gwestiynau yn dechrau ar y drydedd dudalen y fanyleb pset. 305 00:25:52,240 --> 00:25:57,800 Ac yn y rhan gyntaf yn gofyn i chi fynd i wylio'r byr ar ailgyfeirio a phibellau. 306 00:25:57,800 --> 00:26:02,820 A oedd yn fath o byr oer, yn dangos i chi rhai newydd, triciau llinell orchymyn oer y gallwch eu defnyddio. 307 00:26:02,820 --> 00:26:06,050 Ac yna mae gennym ychydig o gwestiynau i chi yn ogystal. 308 00:26:06,050 --> 00:26:10,860 Mae'r cwestiwn cyntaf am ffrydiau, y printf yn ysgrifennu at ball, 309 00:26:10,860 --> 00:26:15,920 rydym yn fath o cyffwrdd ar ychydig bach funud yn ôl. 310 00:26:15,920 --> 00:26:22,380 Mae hyn yn fprintf ein bod yn trafod dim ond yn cymryd mewn ffeil * nant fel ei ddadl. 311 00:26:22,380 --> 00:26:26,580 mmap cymryd mewn ffeil * ffrwd yn ogystal, 312 00:26:26,580 --> 00:26:32,660 a gwerth dychwelyd fopen yn rhoi i chi ffeil ffrwd * yn ogystal. 313 00:26:32,660 --> 00:26:36,060 Y rheswm nad ydym wedi gweld hynny o'r blaen pan rydym wedi delio â printf 314 00:26:36,060 --> 00:26:39,450 oherwydd printf mae ffrwd diofyn. 315 00:26:39,450 --> 00:26:41,810 A'r ffrwd diofyn y mae'n ysgrifennu 316 00:26:41,810 --> 00:26:45,190 byddwch yn cael gwybod amdanynt yn y tymor byr. 317 00:26:45,190 --> 00:26:50,080 Felly, yn bendant yn edrych arno. 318 00:26:50,080 --> 00:26:53,010 >> Yn adran heddiw, rydym yn mynd i siarad ychydig am GDB, 319 00:26:53,010 --> 00:26:57,720 ers y fwy cyfarwydd rydych yn ag ef, y mwy o ymarfer a gewch ag ef, 320 00:26:57,720 --> 00:27:01,390 y well byddwch yn i mewn gwirionedd yn hela i lawr chwilod yn eich cod eich hun. 321 00:27:01,390 --> 00:27:05,540 Mae hyn yn cyflymu'r broses o debugging yn aruthrol. 322 00:27:05,540 --> 00:27:09,230 Felly, trwy ddefnyddio printf, bob tro y byddwch yn gwneud hynny mae'n rhaid i chi ail-grynhoi eich cod, 323 00:27:09,230 --> 00:27:13,000 rhaid i chi ei redeg eto, weithiau rhaid i chi symud yr alwad printf o gwmpas, 324 00:27:13,000 --> 00:27:17,100 esbonia i cod, 'i jyst yn cymryd amser. 325 00:27:17,100 --> 00:27:20,850 Ein nod yw ceisio argyhoeddi chi fod â GDB, gallwch ei hanfod 326 00:27:20,850 --> 00:27:26,810 printf unrhyw beth ar unrhyw adeg yn ystod eich cod ac ydych chi byth yn rhaid i chi ail-grynhoi iddo. 327 00:27:26,810 --> 00:27:35,120 Dydych chi byth yn rhaid i chi ddechrau a chadw dyfalu ble i printf nesaf. 328 00:27:35,120 --> 00:27:40,910 Y peth cyntaf i'w wneud yw i gopïo y llinell hon ac yn cael y cod adran oddi ar y we. 329 00:27:40,910 --> 00:27:47,530 Rwy'n anfon copi o'r llinell o god sy'n dweud, "http://cdn.cs50.net wget". 330 00:27:47,530 --> 00:27:49,510 Rydw i'n mynd i gopïo. 331 00:27:49,510 --> 00:27:55,950 Rydw i'n mynd i fynd i fy offer, chwyddo allan fel y gallwch weld beth rwy'n ei wneud, 332 00:27:55,950 --> 00:28:01,890 ludo i mewn yno, a phan daro Enter, y gorchymyn wget yn llythrennol yn cael y we. 333 00:28:01,890 --> 00:28:06,210 Mae'n mynd i dynnu i lawr y ffeil oddi ar y Rhyngrwyd, 334 00:28:06,210 --> 00:28:11,790 ac mae'n mynd i gadw ar y cyfeiriadur cyfredol. 335 00:28:11,790 --> 00:28:21,630 Nawr, os wyf yn rhestru fy cyfeiriadur ar hyn o bryd gallwch weld fod gen ffeil hon section5.zip dde i mewn 'na. 336 00:28:21,630 --> 00:28:25,260 Y ffordd i ddelio â'r dyn yw unzip hynny, 337 00:28:25,260 --> 00:28:27,650 y gallwch ei wneud yn y llinell orchymyn, yn union fel hyn. 338 00:28:27,650 --> 00:28:31,880 Section5.zip. 339 00:28:31,880 --> 00:28:36,980 Bydd hynny'n unzip hynny, yn creu y ffolder i mi, 340 00:28:36,980 --> 00:28:40,410 chwyddo holl gynnwys, eu rhoi i mewn 'na. 341 00:28:40,410 --> 00:28:47,410 Felly nawr gallaf fynd yn 5 fy adran cyfeiriadur gan ddefnyddio'r gorchymyn cd. 342 00:28:47,410 --> 00:28:58,310 Cliriwch y sgrîn gan ddefnyddio clir. Felly, yn glir y sgrin. 343 00:28:58,310 --> 00:29:02,280 Nawr mae gen i terfynell glân 'n glws i ddelio â hwy. 344 00:29:02,280 --> 00:29:06,200 >> Nawr, os wyf yn rhestru'r holl ffeiliau a welaf yn y cyfeiriadur hwn, 345 00:29:06,200 --> 00:29:12,270 gwelwch fy mod i wedi cael 4 ffeil: buggy1, buggy2, buggy3, a buggy4. 346 00:29:12,270 --> 00:29:16,180 Rwyf hefyd wedi cael eu cyfatebol. Ffeiliau c. 347 00:29:16,180 --> 00:29:20,400 Nid ydym yn mynd i edrych ar y. Ffeiliau c am y tro. 348 00:29:20,400 --> 00:29:24,140 Yn hytrach, rydym yn mynd i'w defnyddio pan fyddwn yn agor i fyny GDB. 349 00:29:24,140 --> 00:29:28,220 Rydym wedi eu cadw o gwmpas fel bod gennym fynediad at y cod ffynhonnell wirioneddol pan fyddwn ni'n defnyddio GDB, 350 00:29:28,220 --> 00:29:32,740 ond y nod hwn yn rhan o'r adran hon yw i botsian o gwmpas gyda GDB 351 00:29:32,740 --> 00:29:40,370 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. 352 00:29:40,370 --> 00:29:43,380 Felly, rydym yn jyst yn mynd i gwmpas yr ystafell yn gyflym iawn, 353 00:29:43,380 --> 00:29:47,000 ac rwy'n mynd i ofyn i rywun i redeg un o'r rhaglenni buggy, 354 00:29:47,000 --> 00:29:54,730 ac yna byddwn yn mynd fel grŵp drwy GDB, a gawn ni weld beth y gallwn ei wneud i ddatrys y rhaglenni hyn, 355 00:29:54,730 --> 00:29:58,460 neu o leiaf nodi'r hyn sy'n mynd o'i le ym mhob un ohonynt. 356 00:29:58,460 --> 00:30:04,760 Gadewch i ni ddechrau dros yma gyda Daniel. A fyddwch yn rhedeg buggy1? Gadewch i ni weld beth sy'n digwydd. 357 00:30:04,760 --> 00:30:09,470 [Daniel] Mae'n dweud mae 'na nam cais. >> Yeah. Yn union. 358 00:30:09,470 --> 00:30:12,460 Felly, os wyf yn rhedeg buggy1, i mi gael nam seg. 359 00:30:12,460 --> 00:30:16,210 Ar y pwynt hwn, gallwn fynd ac agor buggy1.c, 360 00:30:16,210 --> 00:30:19,450 geisio chyfrif i maes beth sy'n mynd o'i le, 361 00:30:19,450 --> 00:30:22,000 ond un o'r pethau mwyaf atgas am y camgymeriad fai seg 362 00:30:22,000 --> 00:30:27,610 yw nad yw'n dweud wrthych ar ba linell y pethau rhaglen mewn gwirionedd aeth o'i le a dorrodd. 363 00:30:27,610 --> 00:30:29,880 Rydych fath o rhaid i ni edrych ar y cod 364 00:30:29,880 --> 00:30:33,990 a chyfrif i maes defnyddio dyfalu a gwirio neu printf i weld beth sy'n mynd o'i le. 365 00:30:33,990 --> 00:30:37,840 Un o'r pethau mwyaf cŵl am GDB yw ei fod yn iawn, iawn hawdd 366 00:30:37,840 --> 00:30:42,170 at chyfrif i maes y llinell y mae eich ddamweiniau rhaglen. 367 00:30:42,170 --> 00:30:46,160 Mae'n gwbl werth yr ymdrech i ddefnyddio, hyd yn oed os dim ond ar gyfer hynny. 368 00:30:46,160 --> 00:30:56,190 Felly, i lesewch i fyny GDB, yr wyf teipio GDB, ac yna byddaf yn rhoi llwybr i'r gweithredadwy yr wyf am ei redeg. 369 00:30:56,190 --> 00:31:01,960 Yma dwi'n teipio gdb ./buggy1. 370 00:31:01,960 --> 00:31:06,600 Hit Enter. Yn rhoi i mi yr holl wybodaeth hon hawlfraint, 371 00:31:06,600 --> 00:31:13,000 ac i lawr yma byddwch yn gweld y llinell hon sy'n dweud, "Darllen symbolau o / cartref / 372 00:31:13,000 --> 00:31:17,680 jharvard/section5/buggy1. " 373 00:31:17,680 --> 00:31:22,060 Ac os aiff popeth yn iawn, byddwch yn gweld ei argraffu neges sy'n edrych fel hyn. 374 00:31:22,060 --> 00:31:25,500 Bydd yn darllen symbolau, bydd yn dweud "Rydw i'n darllen symbolau gan eich ffeil gweithredadwy," 375 00:31:25,500 --> 00:31:29,900 ac yna bydd yn cael y "gwneud" neges dros yma. 376 00:31:29,900 --> 00:31:35,410 Os ydych yn gweld rhywfaint o amrywiad arall o hyn, neu os ydych yn gweld na allai ddod o hyd i'r symbolau 377 00:31:35,410 --> 00:31:41,460 neu rywbeth fel 'na, beth mae hynny'n ei olygu yw eich bod nid yn unig wedi llunio eich gweithredadwy yn iawn. 378 00:31:41,460 --> 00:31:49,980 Pan fyddwn yn llunio rhaglenni ar gyfer defnyddio gyda GDB, mae'n rhaid i ni ddefnyddio'r baner arbennig-g, 379 00:31:49,980 --> 00:31:54,540 ac sy'n cael ei wneud gan ddiofyn os ydych yn llunio eich rhaglenni, dim ond drwy deipio gwneud 380 00:31:54,540 --> 00:31:59,320 neu wneud bygi neu wneud adennill, unrhyw un o'r rheiny. 381 00:31:59,320 --> 00:32:07,800 Ond os ydych yn casglu â llaw gyda Clang, yna bydd rhaid i chi fynd i mewn ac maent yn cynnwys y-g faner. 382 00:32:07,800 --> 00:32:10,310 >> Ar y pwynt hwn, nawr bod gennym GDB ein brydlon, 383 00:32:10,310 --> 00:32:12,310 mae'n eithaf syml i redeg y rhaglen. 384 00:32:12,310 --> 00:32:19,740 Gallwn naill ai deipio rhedeg, neu gallwn jyst deipio r. 385 00:32:19,740 --> 00:32:22,820 Gall gorchmynion GDB y rhan fwyaf o fod yn talfyrru. 386 00:32:22,820 --> 00:32:25,940 Fel arfer, i ddim ond un neu lythyrau cwpl, sydd yn eithaf 'n glws. 387 00:32:25,940 --> 00:32:30,980 Saad Felly, os ydych yn teipio r a tharo Enter, beth sy'n digwydd? 388 00:32:30,980 --> 00:32:39,390 [Saad] Cawn SIGSEGV, wall, ac yna hyn i gyd gobbledygook. 389 00:32:39,390 --> 00:32:43,650 >> Yeah. 390 00:32:43,650 --> 00:32:47,990 Fel rydym yn gweld ar y sgrin ar hyn o bryd, ac fel Saad dywedodd, 391 00:32:47,990 --> 00:32:53,430 pan fyddwn yn teipio redeg neu r a tharo Enter, rydym yn dal i gael y bai seg un. 392 00:32:53,430 --> 00:32:55,830 Felly defnyddio GDB yn datrys ein problem. 393 00:32:55,830 --> 00:32:59,120 Ond mae'n rhoi i ni gobbledygook, ac mae'n troi allan fod y gobbledygook 394 00:32:59,120 --> 00:33:03,080 mewn gwirionedd yn dweud wrthym lle mae'n digwydd. 395 00:33:03,080 --> 00:33:10,680 Er mwyn dosrannu y darn ychydig, y peth cyntaf yw swyddogaeth y mae popeth yn mynd o'i le. 396 00:33:10,680 --> 00:33:20,270 Mae hyn __ strcmp_sse4_2, ac mae'n dweud wrthym ei fod yn digwydd yn y ffeil 397 00:33:20,270 --> 00:33:29,450 a elwir yn sysdeps/i386, hyn i gyd, unwaith eto, math o lanast - ond llinell 254. 398 00:33:29,450 --> 00:33:31,670 Dyna fath o galed i dosrannu. Fel arfer, pan fyddwch yn gweld pethau fel hyn, 399 00:33:31,670 --> 00:33:38,770 hynny'n golygu ei fod yn SEG ffawtio yn un o'r llyfrgelloedd system. 400 00:33:38,770 --> 00:33:43,220 Felly rywbeth i'w wneud â strcmp. Rydych guys wedi gweld strcmp o'r blaen. 401 00:33:43,220 --> 00:33:52,730 Ddim yn rhy wallgof, ond mae hyn yn golygu bod strcmp wedi torri neu bod yna broblem gyda strcmp? 402 00:33:52,730 --> 00:33:57,110 Beth yn eich barn chi, Alexander? 403 00:33:57,110 --> 00:34:04,890 [Alexander] A yw hynny - yn 254 y llinell? A'r - nid yw'r deuaidd, ond nid yw'n eu nenfydau, 404 00:34:04,890 --> 00:34:10,590 ac yna mae iaith arall ar gyfer pob swyddogaeth. A yw bod 254 yn y swyddogaeth honno, neu -? 405 00:34:10,590 --> 00:34:21,460 >> Mae'n llinell 254. Mae'n edrych fel yn hyn. Ffeil, felly mae cod cynulliad yn ôl pob tebyg. 406 00:34:21,460 --> 00:34:25,949 >> Ond, yr wyf yn dyfalu y peth pwysicach yw, oherwydd ein bod wedi gotten nam seg, 407 00:34:25,949 --> 00:34:29,960 ac mae'n edrych fel ei fod yn dod oddi wrth y swyddogaeth strcmp, 408 00:34:29,960 --> 00:34:38,030 mae hyn yn awgrymu, felly, bod strcmp yn cael ei dorri? 409 00:34:38,030 --> 00:34:42,290 Ni ddylai, gobeithio. Felly, dim ond oherwydd bod gennych wall 410 00:34:42,290 --> 00:34:49,480 yn un o'r swyddogaethau system, fel arfer mae hynny'n golygu eich bod nid yn unig wedi galw yn gywir. 411 00:34:49,480 --> 00:34:52,440 Y peth cyflymaf ei wneud i chyfrif i maes beth sy'n digwydd mewn gwirionedd ar 412 00:34:52,440 --> 00:34:55,500 pan fyddwch yn gweld rhywbeth gwirion fel hyn, pryd bynnag y byddwch yn gweld nam seg, 413 00:34:55,500 --> 00:34:59,800 yn enwedig os oes gennych raglen sydd wedi defnyddio mwy na dim ond y prif, 414 00:34:59,800 --> 00:35:03,570 yw defnyddio olrheiniad. 415 00:35:03,570 --> 00:35:13,080 I crynhowch olrheiniad drwy ysgrifennu bt, yn hytrach na'r gair olrheiniad llawn. 416 00:35:13,080 --> 00:35:16,510 Ond Charlotte, beth sy'n digwydd pan fyddwch yn teipio bt a daro Chofnoda? 417 00:35:16,510 --> 00:35:23,200 [Charlotte] Mae'n dangos i mi dwy linell, 0 llinell a llinell 1. 418 00:35:23,200 --> 00:35:26,150 >> Yeah. Llinell Felly 0 a llinell 1. 419 00:35:26,150 --> 00:35:34,560 Mae'r rhain yn y fframiau pentwr gwirioneddol a oedd ar hyn o bryd yn chwarae pan fydd eich rhaglen chwalu. 420 00:35:34,560 --> 00:35:42,230 Gan ddechrau o'r ffrâm topmost, ffrâm 0, a mynd i'r gwaelod-fwyaf, sef ffrâm 1. 421 00:35:42,230 --> 00:35:45,140 Mae ein ffrâm topmost yn y ffrâm strcmp. 422 00:35:45,140 --> 00:35:50,080 Gallwch feddwl am hyn yn debyg i'r broblem honno yr oeddem yn ei wneud ar y cwis gyda'r awgrymiadau, 423 00:35:50,080 --> 00:35:54,890 lle rydym wedi cyfnewid ffrâm pentwr ar ben ffrâm pentwr prif 424 00:35:54,890 --> 00:35:59,700 a chawsom y newidynnau sy'n cyfnewid yn defnyddio ar ben y newidynnau y prif defnyddio. 425 00:35:59,700 --> 00:36:08,440 Dyma ein ddamwain ddigwyddodd yn ein swyddogaeth strcmp, a gafodd ei alw gan ein prif swyddogaeth, 426 00:36:08,440 --> 00:36:14,370 ac olrheiniad yn rhoi i ni nid yn unig y swyddogaethau y mae pethau wedi methu, 427 00:36:14,370 --> 00:36:16,440 ond mae hefyd yn dweud wrthym lle mae popeth yn galw o. 428 00:36:16,440 --> 00:36:18,830 Felly os wyf am symud dros ychydig yn fwy i'r dde, 429 00:36:18,830 --> 00:36:26,110 gallwn weld bod yeah, roedden ni ar linell 254 o'r ffeil hon strcmp-sse4.s. 430 00:36:26,110 --> 00:36:32,540 Ond yr alwad ei wneud ar buggy1.c, llinell 6. 431 00:36:32,540 --> 00:36:35,960 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 432 00:36:35,960 --> 00:36:39,930 yn buggy1.c, llinell 6. 433 00:36:39,930 --> 00:36:43,780 Unwaith eto, mae yna gwpl o ffyrdd i wneud hyn. Un yw i adael allan o GDB 434 00:36:43,780 --> 00:36:49,460 neu os oes gennych eich cod agor mewn ffenestr arall a chroesgyfeirio. 435 00:36:49,460 --> 00:36:54,740 Mae hynny, ynddo'i hun, yn bur ddefnyddiol oherwydd yn awr os ydych chi yn oriau swyddfa 436 00:36:54,740 --> 00:36:57,220 a bod gennych nam seg a bod eich TF wedi meddwl lle mae popeth yn torri, 437 00:36:57,220 --> 00:36:59,710 gallwch ddweud, "O, llinell 6. Nid wyf yn gwybod beth sy'n mynd ymlaen, 438 00:36:59,710 --> 00:37:03,670 ond rhywbeth am llinell 6 yn achosi fy rhaglen i dorri. " 439 00:37:03,670 --> 00:37:10,430 Y ffordd arall o wneud hyn yw y gallwch chi arfer hon archa a elwir yn rhestr GDB. 440 00:37:10,430 --> 00:37:13,650 Gallwch hefyd crynhowch â l. 441 00:37:13,650 --> 00:37:18,910 Felly, os ydym yn taro l, beth ydym yn ei gael yma? 442 00:37:18,910 --> 00:37:21,160 Rydym yn cael criw cyfan o stwff od. 443 00:37:21,160 --> 00:37:26,030 Dyma'r cod cynulliad gwirioneddol 444 00:37:26,030 --> 00:37:29,860 sydd yn strcmp_sse4_2. 445 00:37:29,860 --> 00:37:32,440 Mae hyn yn edrych yn garedig o funky, 446 00:37:32,440 --> 00:37:36,520 a'r rheswm ein bod yn cael hyn oherwydd ar hyn o bryd, 447 00:37:36,520 --> 00:37:40,160 GDB wedi ni yn ffrâm 0. 448 00:37:40,160 --> 00:37:43,070 >> Felly, unrhyw bryd rydym yn edrych ar newidynnau, unrhyw adeg rydym yn edrych ar god ffynhonnell, 449 00:37:43,070 --> 00:37:50,530 rydym yn edrych ar y cod ffynhonnell pertains ar y ffrâm pentwr rydym ar hyn o bryd mewn 450 00:37:50,530 --> 00:37:53,200 Felly, er mwyn cael unrhyw beth ystyrlon, mae'n rhaid i ni 451 00:37:53,200 --> 00:37:57,070 symud i ffrâm pentwr sy'n gwneud mwy o synnwyr. 452 00:37:57,070 --> 00:38:00,180 Yn yr achos hwn, byddai'r ffrâm pentwr prif gwneud synnwyr ychydig yn fwy, 453 00:38:00,180 --> 00:38:02,680 oherwydd dyna oedd mewn gwirionedd yn y cod a ysgrifennodd. 454 00:38:02,680 --> 00:38:05,330 Nid y cod strcmp. 455 00:38:05,330 --> 00:38:08,650 Y ffordd y gallwch chi symud rhwng fframiau, yn yr achos hwn, gan fod gennym ddau, 456 00:38:08,650 --> 00:38:10,430 mae gennym 0 ac 1, 457 00:38:10,430 --> 00:38:13,650 chi wneud hynny gyda'r fyny ac i lawr gorchmynion. 458 00:38:13,650 --> 00:38:18,480 Os byddaf yn symud i fyny un ffrâm, 459 00:38:18,480 --> 00:38:21,770 nawr rwy'n yn y ffrâm pentwr prif. 460 00:38:21,770 --> 00:38:24,330 Gallaf symud i lawr i fynd yn ôl i lle roeddwn, 461 00:38:24,330 --> 00:38:32,830 mynd i fyny eto, mynd i lawr eto, ac ewch i fyny eto. 462 00:38:32,830 --> 00:38:39,750 Os ydych chi erioed wedi gwneud eich rhaglen yn GDB, byddwch yn cael damwain, byddwch yn cael y olrheiniad, 463 00:38:39,750 --> 00:38:42,380 a byddwch yn gweld ei fod mewn rhai ffeil nad ydych yn gwybod beth sy'n mynd ymlaen. 464 00:38:42,380 --> 00:38:45,460 Yr ydych yn ceisio rhestr, nid yw'r cod yn edrych yn gyfarwydd i chi, 465 00:38:45,460 --> 00:38:48,150 cymerwch olwg ar eich fframiau a chyfrif i maes ble rydych chi. 466 00:38:48,150 --> 00:38:51,010 Rydych fwy na thebyg yn y ffrâm pentwr anghywir. 467 00:38:51,010 --> 00:38:58,760 Neu o leiaf ydych chi mewn ffrâm pentwr nad yw'n un y gallwch chi wir yn debug. 468 00:38:58,760 --> 00:39:03,110 Nawr ein bod yn y ffrâm pentwr briodol, rydym yn y prif, 469 00:39:03,110 --> 00:39:08,100 nawr gallwn ddefnyddio'r gorchymyn rhestr at chyfrif i maes beth yr oedd y rheilffordd. 470 00:39:08,100 --> 00:39:13,590 A allwch ei weld, mae'n ei argraffu i ni iawn yma. 471 00:39:13,590 --> 00:39:19,470 Ond gallwn daro restru'r gyd yr un fath, a rhestr yn rhoi i ni yr allbrint hwn 'n glws 472 00:39:19,470 --> 00:39:23,920 y cod ffynhonnell wirioneddol sy'n digwydd yma. 473 00:39:23,920 --> 00:39:26,420 >> Yn benodol, gallwn edrych yn llinell 6. 474 00:39:26,420 --> 00:39:29,330 Gallwn weld beth sy'n mynd ymlaen yma. 475 00:39:29,330 --> 00:39:31,250 Ac mae'n edrych fel ein bod yn gwneud cymhariaeth llinyn 476 00:39:31,250 --> 00:39:41,050 rhwng y llinyn "CS50 creigiau" a argv [1]. 477 00:39:41,050 --> 00:39:45,700 Rhywbeth am hyn yn chwilfriwio. 478 00:39:45,700 --> 00:39:54,120 Felly Missy, a oes gennych unrhyw syniadau ynghylch beth y gellid mynd ymlaen yma? 479 00:39:54,120 --> 00:39:59,400 [Missy] Nid wyf yn gwybod pam ei fod yn chwilfriwio. >> Dydych chi ddim yn gwybod pam ei fod yn chwilfriwio? 480 00:39:59,400 --> 00:40:02,700 Jimmy, unrhyw syniadau? 481 00:40:02,700 --> 00:40:06,240 [Jimmy] Nid wyf yn hollol siŵr, ond y tro diwethaf rydym yn defnyddio llinyn cymharu, 482 00:40:06,240 --> 00:40:10,260 neu strcmp, roedd gennym fel tri achos gwahanol o dan ei. 483 00:40:10,260 --> 00:40:12,800 Nid oedd gennym ==, nid wyf yn credu, ar y dde yn y llinell gyntaf. 484 00:40:12,800 --> 00:40:16,700 Yn hytrach, mae'n cael ei rhannu'n dri, ac roedd un yn == 0, 485 00:40:16,700 --> 00:40:19,910 un yn <0, yr wyf yn meddwl, ac roedd un yn> 0. 486 00:40:19,910 --> 00:40:22,590 Felly, efallai rhywbeth fel 'na? >> Yeah. Felly, mae mater hwn 487 00:40:22,590 --> 00:40:27,200 o rydym yn ei wneud y gymhariaeth yn gywir? 488 00:40:27,200 --> 00:40:31,660 Stella? Unrhyw syniadau? 489 00:40:31,660 --> 00:40:38,110 [Stella] Nid wyf yn sicr. >> Ddim yn siwr. Daniel? Meddyliau? Iawn. 490 00:40:38,110 --> 00:40:44,770 Mae'n troi allan yr hyn sy'n digwydd i'r dde dyma yw pan fyddwn yn rhedeg y rhaglen 491 00:40:44,770 --> 00:40:48,370 ac rydym yn cael y bai seg, pan fyddwch yn rhedeg y rhaglen am y tro cyntaf, Daniel, 492 00:40:48,370 --> 00:40:50,800 wnaethoch chi roi unrhyw ddadleuon llinell orchymyn? 493 00:40:50,800 --> 00:40:58,420 [Daniel] Rhif >> Rhif Yn yr achos hwnnw, beth yw gwerth argv [1]? 494 00:40:58,420 --> 00:41:00,920 >> Nid oes unrhyw werth. >> Iawn. 495 00:41:00,920 --> 00:41:06,120 Wel, nid oes gwerth llinyn priodol. 496 00:41:06,120 --> 00:41:10,780 Ond mae rhywfaint o werth. Beth yw gwerth sy'n cael ei storio mewn 'na? 497 00:41:10,780 --> 00:41:15,130 >> A werth garbage? >> Mae'n naill ai gwerth garbage neu, yn yr achos hwn, 498 00:41:15,130 --> 00:41:19,930 ddiwedd y rhesi argv yn dod i ben bob amser gyda null. 499 00:41:19,930 --> 00:41:26,050 Felly beth mewn gwirionedd yn cael eu storio yno yn null. 500 00:41:26,050 --> 00:41:30,810 Y ffordd arall i ddatrys hyn, yn hytrach na meddwl ei drywydd, 501 00:41:30,810 --> 00:41:33,420 yw ceisio ei brintio. 502 00:41:33,420 --> 00:41:35,880 Dyma lle oeddwn yn dweud bod defnyddio GDB yn wych, 503 00:41:35,880 --> 00:41:40,640 oherwydd gallwch argraffu'r holl newidynnau, yr holl werthoedd yr ydych eisiau 504 00:41:40,640 --> 00:41:43,230 ddefnyddio'r gorchymyn 'n hylaw p-dandi. 505 00:41:43,230 --> 00:41:48,520 Felly, os wyf yn teipio p ac yna yr wyf deipio gwerth newidyn neu enw newidyn, 506 00:41:48,520 --> 00:41:55,320 dweud, argc, gwelaf fod argc yw 1. 507 00:41:55,320 --> 00:42:01,830 Os ydw i eisiau argraffu argv [0], gallaf wneud hynny yn union fel 'na. 508 00:42:01,830 --> 00:42:04,840 Ac fel y gwelsom, argv [0] bob amser yn enw eich rhaglen, 509 00:42:04,840 --> 00:42:06,910 bob amser yn enw'r gweithredadwy. 510 00:42:06,910 --> 00:42:09,740 Yma, gwelwch ei fod yn cael yr enw llwybr llawn. 511 00:42:09,740 --> 00:42:15,920 Gallaf hefyd argraffu argv [1] a gweld beth sy'n digwydd. 512 00:42:15,920 --> 00:42:20,890 >> Yma, rydym yn cael y math hwn o werth cyfriniol. 513 00:42:20,890 --> 00:42:23,890 Rydym yn cael y 0x0. 514 00:42:23,890 --> 00:42:27,850 Cofiwch ar ddechrau'r tymor pan fyddwn yn siarad am rifau hecsadegol? 515 00:42:27,850 --> 00:42:34,680 Neu fod cwestiwn bach ar ddiwedd pset 0 am sut i gynrychioli 50 yn hecs? 516 00:42:34,680 --> 00:42:39,410 Mae'r ffordd yr ydym yn ysgrifennu rhifau hecs yn CS, nid yn unig i ddrysu ein hunain 517 00:42:39,410 --> 00:42:46,080 gyda rhifau degol, yw ein bod bob amser yn rhagddodiad 0x iddynt. 518 00:42:46,080 --> 00:42:51,420 Felly, mae hyn rhagddodiad 0x bob amser yn unig yn golygu dehongli'r rhif canlynol fel rhif hecsadegol, 519 00:42:51,420 --> 00:42:57,400 nid fel llinyn, nid fel rhif degol, nid fel rhif deuaidd. 520 00:42:57,400 --> 00:43:02,820 Gan fod nifer 5-0 yn rhif dilys yn hecsadegol. 521 00:43:02,820 --> 00:43:06,240 Ac mae'n rhif mewn degol, 50. 522 00:43:06,240 --> 00:43:10,050 Felly, mae hyn yn unig yw sut yr ydym yn ddadamwyso. 523 00:43:10,050 --> 00:43:14,860 Felly, 0x0 dull 0 hecsadegol, sydd hefyd degol 0, deuaidd 0. 524 00:43:14,860 --> 00:43:17,030 Dim ond y 0 werth. 525 00:43:17,030 --> 00:43:22,630 Mae'n troi allan bod hyn yn beth null yw, mewn gwirionedd, yn y cof. 526 00:43:22,630 --> 00:43:25,940 Null yn unig yw 0. 527 00:43:25,940 --> 00:43:37,010 Yma, yr elfen storio yn argv [1] yn null. 528 00:43:37,010 --> 00:43:45,220 Felly, rydym yn ceisio gymharu ein "CS50 creigiau" llinyn i llinyn null. 529 00:43:45,220 --> 00:43:48,130 Felly dereferencing null, yn ceisio cael mynediad pethau ar null, 530 00:43:48,130 --> 00:43:55,050 rhai yn arfer mynd i achosi rhyw fath o wall neu bethau drwg eraill i ddigwydd. 531 00:43:55,050 --> 00:43:59,350 Ac mae'n troi allan nad strcmp yn gwirio i weld 532 00:43:59,350 --> 00:44:04,340 p'un a ydych wedi pasio mewn gwerth sy'n null. 533 00:44:04,340 --> 00:44:06,370 Yn hytrach, 'i jyst mynd yn ei flaen, yn ceisio gwneud ei peth, 534 00:44:06,370 --> 00:44:14,640 ac os yw'n seg diffygion, mae'n SEG diffygion, ac mae'n eich problem. Mae'n rhaid i chi fynd drwsio. 535 00:44:14,640 --> 00:44:19,730 Really yn gyflym, sut rydym yn atgyweiria hon broblem? Charlotte? 536 00:44:19,730 --> 00:44:23,540 [Charlotte] Gallwch wirio gan ddefnyddio os yw. 537 00:44:23,540 --> 00:44:32,240 Felly, os argv [1] yn null, == 0, yna dychwelyd 1, neu rywbeth [annealladwy]. 538 00:44:32,240 --> 00:44:34,590 >> Yeah. Felly dyna un ffordd wych i wneud hynny, fel y gallwn wirio i weld, 539 00:44:34,590 --> 00:44:39,230 y gwerth rydym am i basio i mewn strcmp, argv [1], a yw'n null? 540 00:44:39,230 --> 00:44:45,830 Os yw'n null, yna gallwn ddweud yn iawn, erthylu. 541 00:44:45,830 --> 00:44:49,450 >> Mae ffordd fwy cyffredin o wneud hyn yw i ddefnyddio gwerth argc. 542 00:44:49,450 --> 00:44:52,040 Gallwch weld dde yma ar ddechrau prif 543 00:44:52,040 --> 00:44:58,040 rydym yn hepgor y prawf cyntaf yr ydym yn ei wneud fel rheol pan fyddwn yn defnyddio dadleuon llinell orchymyn, 544 00:44:58,040 --> 00:45:05,240 a fydd yn profi a yw ein gwerth argc yw'r hyn yr ydym yn ei ddisgwyl. 545 00:45:05,240 --> 00:45:10,290 Yn yr achos hwn, rydym yn disgwyl o leiaf dwy ddadl, 546 00:45:10,290 --> 00:45:13,660 enw'r rhaglen ac un arall. 547 00:45:13,660 --> 00:45:17,140 Oherwydd ein bod chi ar fin i ddefnyddio'r ail ddadl fan hyn. 548 00:45:17,140 --> 00:45:21,350 Felly, cael rhyw fath o brawf ymlaen llaw, cyn ein galwad strcmp 549 00:45:21,350 --> 00:45:37,390 byddai profion ai peidio argv o leiaf 2, hefyd yn gwneud yr un math o beth. 550 00:45:37,390 --> 00:45:40,620 Gallwn weld os sy'n gweithio drwy redeg y rhaglen eto. 551 00:45:40,620 --> 00:45:45,610 Gallwch bob amser ailgychwyn eich rhaglen o fewn GDB, sydd yn neis iawn. 552 00:45:45,610 --> 00:45:49,310 Gallwch redeg, a phan fyddwch yn pasio mewn dadleuon at eich rhaglen, 553 00:45:49,310 --> 00:45:53,060 byddwch yn mynd heibio iddynt pan fyddwch yn alwad rhedeg, nid pan yr ydych yn llwytho i fyny GDB. 554 00:45:53,060 --> 00:45:57,120 Os gwnewch hyn gallwch gadw galw ar eich rhaglen gyda dadleuon gwahanol bob tro. 555 00:45:57,120 --> 00:46:08,080 Felly rhedwch, neu unwaith eto, gallaf deipio r, a gadewch i ni weld beth fydd yn digwydd os byddwn deipio "helo". 556 00:46:08,080 --> 00:46:11,140 Bydd bob amser yn gofyn i chi os ydych am ei gychwyn o'r dechrau eto. 557 00:46:11,140 --> 00:46:17,490 Fel arfer, ydych am ei gychwyn o'r dechrau eto. 558 00:46:17,490 --> 00:46:25,010 Ac ar y pwynt hwn, yn ailddechrau eto, y bydd yn argraffu allan 559 00:46:25,010 --> 00:46:28,920 y rhaglen yr ydym yn ei gynnal, buggy1, gyda'r ddadl hello, 560 00:46:28,920 --> 00:46:32,720 ac y bydd yn argraffu hyn safonol, mae'n dweud, "Byddwch yn cael D," wyneb trist. 561 00:46:32,720 --> 00:46:37,610 Ond doedden ni ddim yn SEG fai. Dywedodd y broses honno exited fel arfer. 562 00:46:37,610 --> 00:46:39,900 Felly, sy'n edrych yn eithaf da. 563 00:46:39,900 --> 00:46:43,050 Dim bai mwy o seg, rydym yn ei wneud yn y gorffennol, 564 00:46:43,050 --> 00:46:48,190 felly mae'n edrych fel oedd yn wir y byg bai seg ein bod yn cael. 565 00:46:48,190 --> 00:46:51,540 Yn anffodus, mae'n dweud wrthym ein bod yn cael D. 566 00:46:51,540 --> 00:46:54,090 >> Gallwn fynd yn ôl ac edrych ar y cod a gweld beth oedd yn digwydd yno 567 00:46:54,090 --> 00:46:57,980 at chyfrif i maes beth oedd - pam ei fod yn dweud wrthym ein bod yn cael D. 568 00:46:57,980 --> 00:47:03,690 Gadewch i ni weld, dyma oedd hyn printf dweud eich bod yn cael D. 569 00:47:03,690 --> 00:47:08,540 Os ydym yn teipio rhestr, fel eich bod yn cadw rhestr teipio, yn cadw ailadrodd i lawr drwy eich rhaglen, 570 00:47:08,540 --> 00:47:10,940 felly bydd yn dangos i chi y llinellau cyntaf eich rhaglen. 571 00:47:10,940 --> 00:47:15,450 Yna, bydd yn dangos i chi y llinellau nesaf, ac mae'r darn nesaf a'r darn nesaf. 572 00:47:15,450 --> 00:47:18,240 A bydd yn parhau i geisio mynd i lawr. 573 00:47:18,240 --> 00:47:21,180 Ac yn awr byddwn yn mynd i "llinell rhif 16 allan o amrediad." 574 00:47:21,180 --> 00:47:23,940 Oherwydd ei fod dim ond 15 o linellau. 575 00:47:23,940 --> 00:47:30,310 Os ydych yn cyrraedd y pwynt hwn ac yn eich meddwl, "Beth ddylwn i ei wneud?" gallwch ddefnyddio 'r archa help. 576 00:47:30,310 --> 00:47:34,340 Defnyddiwch cymorth ac yna ei rhoi enw'r gorchymyn. 577 00:47:34,340 --> 00:47:36,460 A ydych yn gweld y GDB yn rhoi i ni i gyd y math hwn o bethau. 578 00:47:36,460 --> 00:47:43,870 Mae'n dweud, "Heb unrhyw ddadl, yn rhestru deg o linellau mwy ar ôl neu o gwmpas y rhestr flaenorol. 579 00:47:43,870 --> 00:47:47,920 Rhestr - yn rhestru deg llinellau blaen - " 580 00:47:47,920 --> 00:47:52,960 Felly, gadewch i ni geisio defnyddio minws rhestr. 581 00:47:52,960 --> 00:47:57,000 A bod yn rhestru'r 10 llinell blaenorol; gallwch chi chwarae o gwmpas gyda rhestr ychydig. 582 00:47:57,000 --> 00:48:02,330 Gallwch wneud rhestr, rhestr -, gallwch hyd yn oed roi rhestru nifer, fel rhestr 8, 583 00:48:02,330 --> 00:48:07,500 a bydd yn rhestru'r 10 llinell o gwmpas llinell 8. 584 00:48:07,500 --> 00:48:10,290 A allwch chi weld beth sy'n mynd ymlaen yma yw eich bod wedi cael syml os arall. 585 00:48:10,290 --> 00:48:13,980 Os ydych chi deipio i mewn CS50 creigiau, y bydd yn argraffu allan "Byddwch yn cael A." 586 00:48:13,980 --> 00:48:16,530 Fel arall bydd yn argraffu allan "Byddwch yn cael D." 587 00:48:16,530 --> 00:48:23,770 Bummer dref. Mae pob hawl. Ydw? 588 00:48:23,770 --> 00:48:26,730 >> [Daniel] Felly, pan fyddaf yn ceisio gwneud CS50 creigiau heb y dyfyniadau, 589 00:48:26,730 --> 00:48:29,290 ei fod yn dweud "Rydych yn cael D." 590 00:48:29,290 --> 00:48:32,560 Angen arnaf y dyfyniadau i'w gael i weithio; pam hynny? 591 00:48:32,560 --> 00:48:38,490 >> Yeah. Mae'n troi allan y pryd - mae hyn yn un arall tidbit fach hwyl - 592 00:48:38,490 --> 00:48:47,900 pan fyddwch yn rhedeg y rhaglen, os ydym yn rhedeg ac rydym deipio i mewn CS50 creigiau, 593 00:48:47,900 --> 00:48:50,800 yn union fel Daniel yn dweud a wnaeth, ac rydych daro Enter, 594 00:48:50,800 --> 00:48:52,870 mae'n dal i ddweud ein bod yn cael D. 595 00:48:52,870 --> 00:48:55,580 A'r cwestiwn yw, pam? 596 00:48:55,580 --> 00:49:02,120 Ac mae'n troi allan bod ein terfynell a GDB dosrannu rhain fel dwy ddadl ar wahân. 597 00:49:02,120 --> 00:49:04,800 Oherwydd pan mae 'na le, mae hynny'n ymhlyg yn 598 00:49:04,800 --> 00:49:08,730 a ddaeth i ben y ddadl cyntaf; y ddadl nesaf ar fin dechrau. 599 00:49:08,730 --> 00:49:13,260 Y ffordd i gyfuno rhai yn ddau, neu ddrwg, yn un ddadl, 600 00:49:13,260 --> 00:49:18,510 yw defnyddio'r dyfyniadau. 601 00:49:18,510 --> 00:49:29,560 Felly yn awr, os ydym yn ei roi mewn dyfynodau ac yn rhedeg eto, rydym yn cael A. 602 00:49:29,560 --> 00:49:38,780 Felly, dim ond i ailadrodd, dim dyfyniadau, CS50 a chreigiau yn cael eu dosrannu fel dwy ddadl ar wahân. 603 00:49:38,780 --> 00:49:45,320 Gyda dyfyniadau, mae'n parsed fel un ddadl yn gyfan gwbl. 604 00:49:45,320 --> 00:49:53,070 >> Gallwn weld hyn gyda torbwynt. 605 00:49:53,070 --> 00:49:54,920 Hyd yn hyn rydym wedi bod yn rhedeg ein rhaglen, ac mae wedi bod yn rhedeg 606 00:49:54,920 --> 00:49:58,230 hyd nes naill ai yn SEG diffygion neu 'drawiadau' gwall 607 00:49:58,230 --> 00:50:05,930 neu hyd nes ei fod wedi terfynu ac mae'r holl wedi bod yn gwbl iawn. 608 00:50:05,930 --> 00:50:08,360 Nid yw hyn o reidrwydd y peth mwyaf defnyddiol, oherwydd weithiau 609 00:50:08,360 --> 00:50:11,840 gennych gwall yn eich rhaglen, ond nid yw'n achosi wall. 610 00:50:11,840 --> 00:50:16,950 Dyw hi ddim yn achosi eich rhaglen i atal neu unrhyw beth fel 'na. 611 00:50:16,950 --> 00:50:20,730 Y ffordd i gael GDB i oedi eich rhaglen ar bwynt penodol 612 00:50:20,730 --> 00:50:23,260 yw pennu torbwynt. 613 00:50:23,260 --> 00:50:26,520 Gallwch naill ai wneud hyn drwy osod torbwynt ar enw swyddogaeth 614 00:50:26,520 --> 00:50:30,770 neu gallwch osod torbwynt ar linell arbennig o god. 615 00:50:30,770 --> 00:50:34,450 Rwy'n hoffi i osod breakpoints ar enwau swyddogaeth, oherwydd - hawdd i'w gofio, 616 00:50:34,450 --> 00:50:37,700 ac os ydych mewn gwirionedd yn mynd i mewn ac yn newid eich cod ffynhonnell i fyny ychydig bach, 617 00:50:37,700 --> 00:50:42,020 yna bydd eich torbwynt mewn gwirionedd yn aros yn yr un lle o fewn eich cod. 618 00:50:42,020 --> 00:50:44,760 Ond os ydych yn defnyddio rhifau llinell, ac mae'r niferoedd yn newid llinell 619 00:50:44,760 --> 00:50:51,740 oherwydd eich bod yn ychwanegu neu ddileu rhai cod, yna eich breakpoints i gyd yn sgriwio llwyr i fyny. 620 00:50:51,740 --> 00:50:58,590 Un o'r pethau mwyaf cyffredin gallaf ei wneud yw gosod torbwynt ar y prif swyddogaeth. 621 00:50:58,590 --> 00:51:05,300 Yn aml byddaf yn lesewch i fyny GDB, byddaf yn teipio prif b, pwyswch Enter, a bydd hynny'n gosod torbwynt 622 00:51:05,300 --> 00:51:10,630 ar y prif swyddogaeth a dim ond yn dweud, "saib y rhaglen cyn gynted ag y byddwch yn dechrau rhedeg," 623 00:51:10,630 --> 00:51:17,960 a bod y ffordd, pan fyddaf yn rhedeg fy rhaglen gyda, dyweder, CS50 creigiau fel dau dadleuon 624 00:51:17,960 --> 00:51:24,830 a tharo Enter, mae'n mynd at y prif swyddogaeth ac mae hefyd yn atal i'r dde wrth y llinell cyntaf, 625 00:51:24,830 --> 00:51:30,620 dde cyn mae'n gwerthuso swyddogaeth strcmp. 626 00:51:30,620 --> 00:51:34,940 >> Ers i mi i'n stopio'r, yn awr y gallaf ddechrau newid y gwasarn o gwmpas a gweld beth sy'n mynd ymlaen 627 00:51:34,940 --> 00:51:40,250 gyda phob un o'r newidynnau gwahanol sy'n cael eu pasio i mewn i fy rhaglen. 628 00:51:40,250 --> 00:51:43,670 Yma gallaf argraffu argc a gweld beth sy'n mynd ymlaen. 629 00:51:43,670 --> 00:51:50,030 Gweler bod argc yw 3, am ei fod yn cael 3 gwerth gwahanol ynddo. 630 00:51:50,030 --> 00:51:54,060 Mae'n cael enw'r rhaglen, mae'n cael y ddadl gyntaf a'r ail ddadl. 631 00:51:54,060 --> 00:52:09,330 Gallwn argraffu rhai y tu allan drwy edrych ar argv [0], argv [1], a argv [2]. 632 00:52:09,330 --> 00:52:12,030 Felly nawr gallwch hefyd weld pam yr alwad hon strcmp yn mynd i fethu, 633 00:52:12,030 --> 00:52:21,650 oherwydd eich bod yn gweld ei fod yn rhannu y CS50 a'r creigiau i mewn i ddwy ddadl ar wahân. 634 00:52:21,650 --> 00:52:27,250 Ar y pwynt hwn, unwaith y byddwch wedi taro torbwynt, gallwch barhau i gamu trwy eich rhaglen 635 00:52:27,250 --> 00:52:32,920 linell wrth linell, yn hytrach na dechrau eich rhaglen eto. 636 00:52:32,920 --> 00:52:35,520 Felly, os nad ydych am i ddechrau eich rhaglen eto a dim ond yn parhau ymlaen o fan hyn, 637 00:52:35,520 --> 00:52:41,970 gallwch ddefnyddio'r gorchymyn yn parhau ac y bydd yn parhau i redeg y rhaglen hyd y diwedd. 638 00:52:41,970 --> 00:52:45,010 Yn union fel y gwnaeth yma. 639 00:52:45,010 --> 00:52:54,880 Fodd bynnag, os wyf yn ailgychwyn y rhaglen, CS50 creigiau, mae'n taro fy torbwynt eto, 640 00:52:54,880 --> 00:52:59,670 a'r tro hwn, os nad wyf am i jyst yn mynd yr holl ffordd drwy weddill y rhaglen, 641 00:52:59,670 --> 00:53:08,040 Gallaf defnyddiwch y gorchymyn nesaf, yr wyf hefyd crynhowch â n. 642 00:53:08,040 --> 00:53:12,960 A bydd hyn yn camu drwy'r llinell rhaglen drwy linell. 643 00:53:12,960 --> 00:53:17,530 Felly, gallwch wylio wrth i bethau gweithredu, fel newidynnau newid, wrth i bethau yn cael eu diweddaru. 644 00:53:17,530 --> 00:53:21,550 Sydd yn eithaf 'n glws. 645 00:53:21,550 --> 00:53:26,570 Y peth oer arall yn hytrach nag ailadrodd yr un gorchymyn drosodd a drosodd a throsodd, 646 00:53:26,570 --> 00:53:30,670 os ydych yn unig daro Enter - felly dyma byddwch yn gweld nad wyf wedi teipio mewn unrhyw beth - 647 00:53:30,670 --> 00:53:33,780 os Fi jyst daro Enter, bydd yn ailadrodd y gorchymyn blaenorol, 648 00:53:33,780 --> 00:53:36,900 neu 'r archa GDB blaenorol yr wyf newydd ei rhoi i mewn 649 00:53:36,900 --> 00:53:56,000 Gallaf gadw taro Bwydo i mewn a bydd yn cadw camu trwy fy linell wrth linell cod. 650 00:53:56,000 --> 00:53:59,310 Byddwn yn eich annog guys i fynd edrych ar y rhaglenni buggy eraill yn ogystal. 651 00:53:59,310 --> 00:54:01,330 Nid oes gennym amser i fynd drwy bob un ohonynt heddiw yn adran. 652 00:54:01,330 --> 00:54:05,890 Mae'r cod ffynhonnell yno, fel y gallwch math o weld beth sy'n mynd ymlaen 653 00:54:05,890 --> 00:54:07,730 y tu ôl i'r llenni os ydych yn mynd yn sownd mewn gwirionedd, 654 00:54:07,730 --> 00:54:11,940 ond o leiaf, dim ond ymarfer llesáu i fyny GDB, 655 00:54:11,940 --> 00:54:13,940 rhedeg y rhaglen nes ei fod yn torri ar chi, 656 00:54:13,940 --> 00:54:18,260 cael y olrheiniad, figuring allan beth fydd swyddogaeth y ddamwain oedd yn, 657 00:54:18,260 --> 00:54:24,450 yr hyn y llinell oedd ar, argraffu rhai gwerthoedd amrywiol, 658 00:54:24,450 --> 00:54:30,140 dim ond er mwyn i chi gael blas ar ei gyfer, oherwydd bydd hynny'n wir yn eich helpu i fynd ymlaen. 659 00:54:30,140 --> 00:54:36,340 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. 660 00:54:36,340 --> 00:54:40,460 Os yw eich rhaglen yn y canol o redeg o hyd, ac nid yw wedi exited, 661 00:54:40,460 --> 00:54:43,510 bydd bob amser yn gofyn i chi, "Ydych chi'n siŵr eich bod am roi'r gorau iddi?" 662 00:54:43,510 --> 00:54:48,770 Alli jyst daro ie. 663 00:54:48,770 --> 00:54:55,250 >> Nawr rydyn ni'n mynd i edrych ar y broblem nesaf sydd gennym, sef y rhaglen gath. 664 00:54:55,250 --> 00:54:59,880 Os ydych yn gwylio y tymor byr ar ailgyfeirio a phibellau, byddwch yn gweld bod Tommy yn defnyddio'r rhaglen hon 665 00:54:59,880 --> 00:55:07,540 bod y bôn argraffu holl allbwn o ffeil ar y sgrin. 666 00:55:07,540 --> 00:55:12,660 Felly, os wyf yn rhedeg cath, mae hyn mewn gwirionedd yn rhaglen adeiladedig i mewn i'r peiriant, 667 00:55:12,660 --> 00:55:16,860 ac os oes gennych Macs gallwch wneud hyn ar eich Mac hefyd, os ydych yn agor i fyny derfynnell. 668 00:55:16,860 --> 00:55:25,630 Ac rydym - cath, gadewch i ni ddweud, cp.c, a daro Chofnoda. 669 00:55:25,630 --> 00:55:29,640 Beth oedd hyn, os byddwn yn sgrolio i fyny ychydig a gweld lle rydym yn rhedeg y llinell, 670 00:55:29,640 --> 00:55:40,440 neu os ydym yn rhedeg y gorchymyn cath, yn llythrennol argraffu yn unig allan y cynnwys cp.c i'n sgrin. 671 00:55:40,440 --> 00:55:44,140 Gallwn gynnal eto a gallwch eu rhoi mewn ffeiliau lluosog at ei gilydd. 672 00:55:44,140 --> 00:55:49,880 Felly, gallwch chi ei wneud cp.c cath, ac yna gallwn hefyd concatenate y ffeil cat.c, 673 00:55:49,880 --> 00:55:53,250 sef y rhaglen rydym chi ar fin i ysgrifennu, 674 00:55:53,250 --> 00:55:58,140 a bydd yn argraffu ffeiliau ddau gefn wrth gefn at ein sgrin. 675 00:55:58,140 --> 00:56:05,490 Felly, os ydym yn sgrolio i fyny ychydig bach, rydym yn gweld bod pan fyddwn yn rhedeg hyn, cp.c cath cat.c, 676 00:56:05,490 --> 00:56:17,110 gyntaf, argraffu y ffeil cp, ac yna islaw iddo, ei hargraffu allan y ffeil cat.c dde i lawr yma. 677 00:56:17,110 --> 00:56:19,650 Rydym yn mynd i ddefnyddio hyn i ychydig o gael ein traed gwlyb. 678 00:56:19,650 --> 00:56:25,930 Chwarae o gwmpas gyda argraffu syml i'r derfynell, yn gweld sut mae hynny'n gweithio. 679 00:56:25,930 --> 00:56:39,170 Os ydych yn guys yn agor i fyny gyda gedit cat.c, pwyswch Enter, 680 00:56:39,170 --> 00:56:43,760 gallwch weld y rhaglen yr ydym chi ar fin i ysgrifennu. 681 00:56:43,760 --> 00:56:48,980 Rydym wedi cynnwys y plât boeler 'n glws, felly nid oes rhaid i ni dreulio amser yn teipio i gyd hynny. 682 00:56:48,980 --> 00:56:52,310 Rydym hefyd yn edrych ar y nifer o ddadleuon basio i mewn 683 00:56:52,310 --> 00:56:56,910 Rydym yn argraffu neges ddefnydd 'n glws. 684 00:56:56,910 --> 00:57:00,950 >> Dyma'r math o beth sydd, unwaith eto, fel yr ydym wedi bod yn siarad am, 685 00:57:00,950 --> 00:57:04,490 mae bron fel cof cyhyrau. 686 00:57:04,490 --> 00:57:07,190 Dim ond cofiwch gadw gwneud yr un math o bethau 687 00:57:07,190 --> 00:57:11,310 a bob amser yn argraffu rhyw fath o neges defnyddiol 688 00:57:11,310 --> 00:57:17,670 fel bod pobl yn gwybod sut i redeg eich rhaglen. 689 00:57:17,670 --> 00:57:21,630 Gyda cath, mae'n eithaf syml; ni ​​jyst yn mynd i fynd drwy bob un o'r gwahanol ddadleuon 690 00:57:21,630 --> 00:57:24,300 bod eu trosglwyddo i ein rhaglen, ac rydym yn mynd i argraffu 691 00:57:24,300 --> 00:57:29,950 eu cynnwys allan i'r sgrin un ar y tro. 692 00:57:29,950 --> 00:57:35,670 Er mwyn argraffu ffeiliau allan i'r sgrin, rydyn ni'n mynd i wneud rhywbeth tebyg iawn 693 00:57:35,670 --> 00:57:38,120 i'r hyn a wnaethom ar ddiwedd y cwis. 694 00:57:38,120 --> 00:57:45,350 Ar ddiwedd y cwis, sy'n llogi rhaglen, roedd yn rhaid i agor i fyny ffeil, 695 00:57:45,350 --> 00:57:48,490 ac yna roedd rhaid i ni argraffu iddo. 696 00:57:48,490 --> 00:57:54,660 Yn yr achos hwn, rydym yn mynd i agor i fyny ffeil, ac rydym yn mynd i ddarllen ohono yn lle hynny. 697 00:57:54,660 --> 00:58:00,630 Yna rydym yn mynd i argraffu, yn hytrach na i ffeil, rydyn ni'n mynd i argraffu ar y sgrin. 698 00:58:00,630 --> 00:58:05,830 Felly, argraffu ar y sgrin, os ydych wedi gwneud popeth o'r blaen gyda printf. 699 00:58:05,830 --> 00:58:08,290 Felly nid yw hynny'n rhy crazy. 700 00:58:08,290 --> 00:58:12,190 Ond darllen ffeil yn fath o 'n annaearol. 701 00:58:12,190 --> 00:58:17,300 Byddwn yn mynd drwy hynny ychydig ar y tro. 702 00:58:17,300 --> 00:58:20,560 Os ydych yn guys mynd yn ôl at y broblem olaf ar eich cwis, problem 33, 703 00:58:20,560 --> 00:58:27,280 y llinell gyntaf ein bod ni'n mynd i'w wneud yma, agor y ffeil, yn debyg iawn i'r hyn a wnaethom yno. 704 00:58:27,280 --> 00:58:36,370 Felly Stella, beth mae hynny'n ei olwg llinell fel, pan fyddwn yn agor ffeil? 705 00:58:36,370 --> 00:58:47,510 [Stella] * FILE Cyfalaf, file - >> Iawn. >> - Yn hafal i fopen. >> Yup. 706 00:58:47,510 --> 00:58:55,980 Pa yn yr achos hwn? Mae'n yn y sylw. 707 00:58:55,980 --> 00:59:06,930 >> Mae yn y sylw? argv [i] a r? 708 00:59:06,930 --> 00:59:11,300 >> Yn union. Hawl ar. Felly Stella yn hollol gywir. 709 00:59:11,300 --> 00:59:13,720 Dyma beth y llinell edrych fel. 710 00:59:13,720 --> 00:59:19,670 Rydym yn mynd i gael ffeil amrywiol nant, ei storio mewn * FILE, felly mae'r holl gapiau, 711 00:59:19,670 --> 00:59:25,720 Bydd FILE, *, ac enw'r newidyn hwn fod yn ffeil. 712 00:59:25,720 --> 00:59:32,250 Gallem ei alw'n beth bynnag rydym yn hoffi. Gallem ei alw'n first_file, neu file_i, beth bynnag hoffem. 713 00:59:32,250 --> 00:59:37,590 Ac yna enw'r ffeil ei phasio i mewn ar y llinell orchymyn i'r rhaglen hon. 714 00:59:37,590 --> 00:59:44,450 Felly, mae'n cael ei storio yn argv [i,] ac yna rydym yn mynd i agor y ffeil yn y modd darllen. 715 00:59:44,450 --> 00:59:48,100 Nawr ein bod wedi agor y ffeil, beth yw'r peth yr ydym bob amser yn rhaid i chi gofio gwneud 716 00:59:48,100 --> 00:59:52,230 pryd bynnag y byddwn wedi agor ffeil? Ei gau. 717 00:59:52,230 --> 00:59:57,220 Felly Missy, sut rydyn ni'n cau'r ffeil? 718 00:59:57,220 --> 01:00:01,020 [Missy] mmap (ffeil) >> mmap (ffeil). Yn union. 719 01:00:01,020 --> 01:00:05,340 Great. Iawn. Os ydym yn edrych ar hyn i wneud sylwadau i'r dde yma, 720 01:00:05,340 --> 01:00:11,940 mae'n ei ddweud, "Open argv [i] ac argraffu ei gynnwys i stdout." 721 01:00:11,940 --> 01:00:15,460 >> Safon allan yn enw rhyfedd. Stdout yn unig yw ein ffordd ni o ddweud 722 01:00:15,460 --> 01:00:22,880 rydym am ei argraffu i'r derfynell; yr ydym am ei argraffu at y nant allbwn safonol. 723 01:00:22,880 --> 01:00:26,450 Gallwn mewn gwirionedd yn cael gwared ar y sylw iawn yma. 724 01:00:26,450 --> 01:00:36,480 Rydw i'n mynd i gopïo a gludo ers dyna beth a wnaethom. 725 01:00:36,480 --> 01:00:41,290 Ar y pwynt hwn, yn awr mae'n rhaid i ni ddarllen y darn ffeil gan bit. 726 01:00:41,290 --> 01:00:46,300 Rydym wedi trafod un neu ddau o ffyrdd o ffeiliau darllen. 727 01:00:46,300 --> 01:00:51,830 Pa rai yw eich ffefrynnau hyd yn hyn? 728 01:00:51,830 --> 01:00:57,960 Pa ffyrdd ydych chi wedi gweld neu a ydych yn cofio, i ddarllen ffeiliau? 729 01:00:57,960 --> 01:01:04,870 [Daniel] fread? >> Fread? Felly fread yn un. Jimmy, ydych chi'n gwybod unrhyw rai eraill? 730 01:01:04,870 --> 01:01:12,150 [Jimmy] Rhif >> Iawn. Nope. Charlotte? Alexander? Unrhyw rai eraill? Iawn. 731 01:01:12,150 --> 01:01:20,740 Felly, y rhai eraill yn fgetc, yn un y byddwn yn defnyddio llawer. 732 01:01:20,740 --> 01:01:26,410 Mae hefyd yn fscanf; chi guys gweld patrwm yma? 733 01:01:26,410 --> 01:01:29,170 Maent i gyd yn dechrau gyda f. Unrhyw beth i wneud gyda ffeil. 734 01:01:29,170 --> 01:01:35,260 Mae fread, fgetc, fscanf. Mae'r rhain i gyd o swyddogaethau darllen. 735 01:01:35,260 --> 01:01:49,120 Ar gyfer ysgrifennu gennym fwrite, mae gennym fputc yn hytrach na fgetc. 736 01:01:49,120 --> 01:01:58,250 Rydym hefyd wedi fprintf hoffi a welsom ar y cwis. 737 01:01:58,250 --> 01:02:01,680 Gan fod hyn yn broblem sy'n golygu darllen o ffeil, 738 01:02:01,680 --> 01:02:04,940 rydym yn mynd i ddefnyddio un o'r tair swyddogaeth. 739 01:02:04,940 --> 01:02:10,890 Nid ydym yn mynd i ddefnyddio swyddogaethau hyn i lawr yma. 740 01:02:10,890 --> 01:02:14,880 Mae'r swyddogaethau hyn yn cael eu gweld i gyd yn y safon I / O llyfrgell. 741 01:02:14,880 --> 01:02:17,510 Felly, os ydych yn edrych ar frig y rhaglen hon, 742 01:02:17,510 --> 01:02:24,110 gallwch weld ein bod wedi cynnwys eisoes ffeil pennawd ar gyfer y safon I / O llyfrgell. 743 01:02:24,110 --> 01:02:27,120 Os ydym am i chyfrif i maes pa un yr ydym am ei ddefnyddio, 744 01:02:27,120 --> 01:02:29,690 gallwn bob amser yn agor i fyny 'r tudalennau dyn. 745 01:02:29,690 --> 01:02:34,350 Felly gallwn deipio stdio dyn 746 01:02:34,350 --> 01:02:43,180 a darllen popeth am y mewnbwn stdio a swyddogaethau allbwn yn C. 747 01:02:43,180 --> 01:02:49,870 A gallwn eisoes weld oh, edrych. Mae'n sôn am fgetc, mae'n sôn am fputc. 748 01:02:49,870 --> 01:02:57,220 Felly gallwch ddrilio i lawr ychydig ac edrych ar, dyweder, fgetc 749 01:02:57,220 --> 01:03:00,060 ac edrych ar ei dudalen dyn. 750 01:03:00,060 --> 01:03:03,430 Gallwch weld ei bod yn mynd ynghyd â criw cyfan o swyddogaethau eraill: 751 01:03:03,430 --> 01:03:12,640 fgetc, fgets, getc, getchar, yn cael, ungetc, ac mae ei mewnbwn o gymeriadau a llinynnau. 752 01:03:12,640 --> 01:03:19,180 Felly dyma sut yr ydym yn darllen yn y cymeriadau a llinynnau o ffeiliau o fewnbwn safonol, 753 01:03:19,180 --> 01:03:21,990 sydd yn ei hanfod gan y defnyddiwr. 754 01:03:21,990 --> 01:03:24,780 A dyma sut yr ydym yn ei wneud mewn C. gwirioneddol 755 01:03:24,780 --> 01:03:30,850 Felly, nid yw hyn yn defnyddio'r GetString a swyddogaethau GetChar 756 01:03:30,850 --> 01:03:36,840 a ddefnyddiwyd gennym o'r llyfrgell CS50. 757 01:03:36,840 --> 01:03:39,710 Rydym yn mynd i wneud y broblem hon mewn dwy ffordd 758 01:03:39,710 --> 01:03:43,430 fel y gallwch weld dwy ffordd wahanol o wneud hynny. 759 01:03:43,430 --> 01:03:48,490 Mae'r swyddogaeth fread bod Daniel grybwyllwyd a fgetc yn ffyrdd da i wneud hynny. 760 01:03:48,490 --> 01:03:53,790 Rwy'n credu fgetc yn ychydig yn haws, oherwydd ei fod dim ond, fel y gwelwch, 761 01:03:53,790 --> 01:03:59,660 un ddadl, y * FILE ein bod yn ceisio i ddarllen y cymeriad o, 762 01:03:59,660 --> 01:04:02,740 ac mae ei werth dychwelyd yn int. 763 01:04:02,740 --> 01:04:05,610 Ac mae hyn yn ychydig yn ddryslyd, dde? 764 01:04:05,610 --> 01:04:11,450 >> Oherwydd ein bod ni'n cael gymeriad, felly pam nad yw'r ffurflen hon golosg? 765 01:04:11,450 --> 01:04:18,700 Chi guys gennych unrhyw syniadau ar pam nad yw hyn yn dychwelyd golosg? 766 01:04:18,700 --> 01:04:25,510 [Atebion Missy, annealladwy] >> Yeah. Felly Missy yn hollol gywir. 767 01:04:25,510 --> 01:04:31,570 Os yw'n ASCII, yna gallai hyn cyfanrif yn cael ei fapio i torgoch gwirioneddol. 768 01:04:31,570 --> 01:04:33,520 Gallai fod yn nod ASCII, ac mae hynny'n iawn. 769 01:04:33,520 --> 01:04:36,220 Dyna'n union beth sy'n digwydd. 770 01:04:36,220 --> 01:04:39,190 Rydym yn defnyddio int dim ond oherwydd ei fod wedi darnau mwy. 771 01:04:39,190 --> 01:04:44,750 Mae'n fwy na golosg, ein torgoch dim ond 8 did, bod 1 beit ar ein 32-bit peiriannau. 772 01:04:44,750 --> 01:04:48,520 Ac mae int Mae gwerth pob un o'r 4 bytes 'o le. 773 01:04:48,520 --> 01:04:50,940 Ac mae'n troi allan bod y ffordd fgetc yn gweithio, 774 01:04:50,940 --> 01:04:53,940 os ydym yn sgroliwch i lawr yn ein crynodeb ar y dudalen hon dyn ychydig bach, 775 01:04:53,940 --> 01:05:05,000 sgrolio holl ffordd i lawr. Mae'n troi allan eu bod yn defnyddio'r gwerth arbennig o'r enw EOF. 776 01:05:05,000 --> 01:05:09,640 Mae'n gyson arbennig fel y gwerth dychwelyd y swyddogaeth fgetc 777 01:05:09,640 --> 01:05:14,570 pryd bynnag y byddwch yn taro ar ddiwedd y ffeil neu os byddwch yn cael gwall. 778 01:05:14,570 --> 01:05:18,170 Ac mae'n troi allan y byddai gwneud y cymariaethau hyn gyda EOF yn briodol, 779 01:05:18,170 --> 01:05:24,060 ydych am gael y swm ychwanegol o wybodaeth sydd gennych mewn int 780 01:05:24,060 --> 01:05:28,420 yn hytrach na defnyddio newidyn torgoch. 781 01:05:28,420 --> 01:05:32,130 Er bod fgetc yn effeithiol cael cymeriad o ffeil, 782 01:05:32,130 --> 01:05:38,450 ydych eisiau cofio ei fod yn dychwelyd rhywbeth sydd o int fath i chi. 783 01:05:38,450 --> 01:05:41,360 Wedi dweud hynny, mae'n weddol hawdd i'w ddefnyddio. 784 01:05:41,360 --> 01:05:44,960 Mae'n mynd i roi i ni cymeriad, felly i gyd mae'n rhaid i ni ei wneud yw parhau i ofyn y ffeil, 785 01:05:44,960 --> 01:05:48,440 "Rhowch i mi y cymeriad nesaf, yn rhoi i mi y cymeriad nesaf, yn rhoi i mi y cymeriad nesaf," 786 01:05:48,440 --> 01:05:51,400 nes inni gyrraedd ddiwedd y ffeil. 787 01:05:51,400 --> 01:05:54,730 A bydd hynny'n tynnu mewn un cymeriad ar y tro gan ein ffeil, 788 01:05:54,730 --> 01:05:56,250 ac yna gallwn wneud fel y mynnom ag ef. 789 01:05:56,250 --> 01:06:00,160 Gallwn ei storio, gallwn ei ychwanegu at llinyn, gallwn ei hargraffu. 790 01:06:00,160 --> 01:06:04,630 A oes unrhyw un o hynny. 791 01:06:04,630 --> 01:06:09,600 >> Chwyddo yn ôl allan ac yn mynd yn ôl at ein rhaglen cat.c, 792 01:06:09,600 --> 01:06:16,170 os ydym yn mynd i ddefnyddio fgetc, 793 01:06:16,170 --> 01:06:21,710 gallai sut yr ydym yn ymdrin â'r llinell nesaf o god? 794 01:06:21,710 --> 01:06:26,020 Rydym yn mynd i ddefnyddio - bydd fread gwneud rhywbeth ychydig yn wahanol. 795 01:06:26,020 --> 01:06:32,600 A'r tro hwn, rydym yn jyst yn mynd i ddefnyddio fgetc i gael un cymeriad ar y tro. 796 01:06:32,600 --> 01:06:40,910 I brosesu ffeiliau cyfan, a allai hyn sydd gennym i'w wneud? 797 01:06:40,910 --> 01:06:44,030 Faint o gymeriadau sydd mewn ffeil? 798 01:06:44,030 --> 01:06:47,390 Mae yna lawer. Felly, eich bod eisiau i gael un 799 01:06:47,390 --> 01:06:49,860 ac yna gael un arall a chael un arall a chael un arall. 800 01:06:49,860 --> 01:06:53,330 Pa fath o algorithm yn eich barn chi fyddai'n rhaid i ni ddefnyddio yma? 801 01:06:53,330 --> 01:06:55,470 Pa fath o -? [Alexander] A am ddolen? >> Yn union. 802 01:06:55,470 --> 01:06:57,500 Rhyw fath o ddolen. 803 01:06:57,500 --> 01:07:03,380 A ar gyfer dolen mewn gwirionedd fawr, yn yr achos hwn. 804 01:07:03,380 --> 01:07:08,620 Ac fel chi yn dweud, mae'n swnio fel petaech eisiau ddolen dros y ffeil cyfan, 805 01:07:08,620 --> 01:07:11,820 cael cymeriad ar y tro. 806 01:07:11,820 --> 01:07:13,850 Unrhyw awgrymiadau ar yr hyn a allai edrych fel? 807 01:07:13,850 --> 01:07:22,090 [Alexander, annealladwy] 808 01:07:22,090 --> 01:07:30,050 >> Iawn, dim ond dweud wrthyf yn Saesneg beth rydych yn ceisio ei wneud? [Alexander, annealladwy] 809 01:07:30,050 --> 01:07:36,270 Felly, yn yr achos hwn, mae'n swnio fel rydym yn jyst yn ceisio at ddolen dros y ffeil gyfan. 810 01:07:36,270 --> 01:07:45,330 [Alexander] Felly, fi > Mae maint -? 811 01:07:45,330 --> 01:07:49,290 Amcana maint y ffeil, dde? Mae maint - we'll dim ond ysgrifennu fel hyn. 812 01:07:49,290 --> 01:07:57,470 Maint y ffeil am y tro, i + +. 813 01:07:57,470 --> 01:08:04,610 Felly, mae'n troi allan fod y ffordd yr ydych yn gwneud hyn drwy ddefnyddio fgetc, ac mae hyn yn newydd, 814 01:08:04,610 --> 01:08:10,460 yw nad oes unrhyw ffordd hawdd i ychydig gael y maint o ffeil 815 01:08:10,460 --> 01:08:16,979 gyda'r math hwn "sizeof" o adeiladu eich bod chi wedi ei weld o'r blaen. 816 01:08:16,979 --> 01:08:20,910 Pan fyddwn yn defnyddio'r swyddogaeth fgetc, rydym yn cyflwyno rhyw fath o 817 01:08:20,910 --> 01:08:29,069 newydd, cystrawen ffynci i hyn ar gyfer dolen, lle yn hytrach na defnyddio dim ond cownter sylfaenol 818 01:08:29,069 --> 01:08:33,920 i fynd cymeriad gan cymeriad, rydym yn mynd i dynnu un cymeriad ar y tro, 819 01:08:33,920 --> 01:08:37,120 un cymeriad ar y tro, ac mae'r ffordd yr ydym yn gwybod ein bod ar y diwedd 820 01:08:37,120 --> 01:08:41,290 nid yw'n pan fyddwn wedi cyfrif nifer penodol o gymeriadau, 821 01:08:41,290 --> 01:08:49,939 ond pan fydd y cymeriad rydym yn tynnu allan yn y diwedd arbennig o gymeriad ffeil. 822 01:08:49,939 --> 01:08:58,689 Felly, gallwn wneud hyn - yr wyf yn galw hyn yn ch, ac rydym yn mynd i ymgychwyn ei 823 01:08:58,689 --> 01:09:08,050 gyda'n alwad gyntaf i gael y cymeriad cyntaf allan o'r ffeil. 824 01:09:08,050 --> 01:09:14,979 Felly, mae hyn yn rhan dde yma, mae hyn yn mynd i gael gymeriad allan o'r ffeil 825 01:09:14,979 --> 01:09:20,840 ac yn ei storio yn y ch amrywiol. 826 01:09:20,840 --> 01:09:25,420 Rydym yn mynd i ddal i wneud hyn nes inni gyrraedd ddiwedd y ffeil, 827 01:09:25,420 --> 01:09:41,170 yr ydym yn ei wneud drwy brofi ar gyfer y cymeriad beidio â bod yn gyfartal i'r cymeriad EOF arbennig. 828 01:09:41,170 --> 01:09:48,750 Ac yna yn hytrach na gwneud ch + +, a fyddai'n dim ond cynyddiad gwerth, 829 01:09:48,750 --> 01:09:52,710 felly os ydym yn darllen y tu allan A y ffeil, cyfalaf A, dyweder, 830 01:09:52,710 --> 01:09:56,810 ch + + Byddai rhoi i ni b, ac yna byddem yn cael c ac yna d. 831 01:09:56,810 --> 01:09:59,310 Na yn glir yr hyn yr ydym ei eisiau. Yr hyn yr ydym am ei gael yma 832 01:09:59,310 --> 01:10:05,830 yn y rhan olaf yn cael ei rydym yn awyddus i gael y cymeriad nesaf o'r ffeil. 833 01:10:05,830 --> 01:10:09,500 >> Felly, gallai sut yr ydym yn cael y cymeriad nesaf o'r ffeil? 834 01:10:09,500 --> 01:10:13,470 Sut ydym yn cael y nod cyntaf o'r ffeil? 835 01:10:13,470 --> 01:10:17,200 [Myfyrwyr] fgetfile? >> Fgetc, neu, mae'n ddrwg gennyf, yr oeddech yn gywir. 836 01:10:17,200 --> 01:10:20,470 I gamsillafu yn iawn yno. Felly yeah. 837 01:10:20,470 --> 01:10:26,240 Yma yn hytrach na gwneud ch + +, 838 01:10:26,240 --> 01:10:29,560 ni jyst yn mynd i alw fgetc (ffeil) unwaith eto 839 01:10:29,560 --> 01:10:39,180 a storio'r canlyniad yn ein amrywiol ch un. 840 01:10:39,180 --> 01:10:43,730 [Gwestiwn Myfyrwyr, annealladwy] 841 01:10:43,730 --> 01:10:52,390 >> Dyma lle y guys FILE * yn arbennig. 842 01:10:52,390 --> 01:10:59,070 Mae'r ffordd y maent yn gweithio yw eu bod - pan fyddwch yn agor - pan fyddwch yn gwneud yr alwad fopen, 843 01:10:59,070 --> 01:11:04,260 y * FILE yn effeithiol yn gwasanaethu fel pwyntydd i ddechrau'r ffeil. 844 01:11:04,260 --> 01:11:12,830 Ac yna bob tro y byddwch yn ffonio fgetc, mae'n symud un cymeriad trwy'r ffeil. 845 01:11:12,830 --> 01:11:23,280 Felly, pryd bynnag y byddwch yn galw hyn, rydych yn incrementing y pwyntydd ffeil gan un cymeriad. 846 01:11:23,280 --> 01:11:26,210 A phan fyddwch fgetc eto, yr ydych chi'n symud cymeriad arall 847 01:11:26,210 --> 01:11:28,910 ac un arall cymeriad ac un arall ac un arall cymeriad cymeriad. 848 01:11:28,910 --> 01:11:32,030 [Gwestiwn Myfyrwyr, annealladwy] >> A that's - yeah. 849 01:11:32,030 --> 01:11:34,810 Mae'n fath o hud yma o dan y cwfl. 850 01:11:34,810 --> 01:11:37,930 'Ch jyst cadw incrementing drwodd. 851 01:11:37,930 --> 01:11:46,510 Ar y pwynt hwn, rydych yn gallu mewn gwirionedd yn gweithio gyda chymeriad. 852 01:11:46,510 --> 01:11:52,150 Felly, gallai sut yr ydym yn argraffu hwn at y sgrîn, yn awr? 853 01:11:52,150 --> 01:11:58,340 Gallwn ddefnyddio'r peth printf ag y byddwn yn defnyddio o'r blaen. 854 01:11:58,340 --> 01:12:00,330 Ein bod ni wedi bod yn defnyddio pob semester. 855 01:12:00,330 --> 01:12:05,450 Gallwn alw printf, 856 01:12:05,450 --> 01:12:21,300 a gallwn basio yn y cymeriad yn union fel 'na. 857 01:12:21,300 --> 01:12:27,430 Ffordd arall o wneud hyn yw yn hytrach na defnyddio printf a gorfod gwneud hyn llinyn fformat, 858 01:12:27,430 --> 01:12:29,490 gallwn hefyd ddefnyddio un o swyddogaethau eraill. 859 01:12:29,490 --> 01:12:40,090 Gallwn ddefnyddio fputc, sy'n argraffu cymeriad at y sgrîn, 860 01:12:40,090 --> 01:12:52,580 ac eithrio os edrychwn ar fputc - gadewch i mi chwyddo allan ychydig. 861 01:12:52,580 --> 01:12:56,430 Rydym yn gweld beth braf yn y mae'n ei gymryd yng nghymeriad ein bod yn darllen gan ddefnyddio fgetc, 862 01:12:56,430 --> 01:13:05,100 ond yna mae'n rhaid i ni roi cynnig ffrwd i argraffu iddo. 863 01:13:05,100 --> 01:13:11,850 Gallwn hefyd ddefnyddio'r swyddogaeth putchar, fydd yn rhoi yn uniongyrchol i allan safonol. 864 01:13:11,850 --> 01:13:16,070 Felly, mae criw cyfan o opsiynau gwahanol y gallwn eu defnyddio ar gyfer argraffu. 865 01:13:16,070 --> 01:13:19,580 Maen nhw i gyd yn safon I / O llyfrgell. 866 01:13:19,580 --> 01:13:25,150 Pryd bynnag y byddwch eisiau argraffu - felly printf, yn ddiofyn, yn argraffu i safon arbennig o nant, 867 01:13:25,150 --> 01:13:27,910 sef bod stdout. 868 01:13:27,910 --> 01:13:41,300 Felly gallwn dim ond cyfeirio ato fel math o hud y gwerth hwn, stdout yma. 869 01:13:41,300 --> 01:13:48,410 Wps. Rhowch y colon tu allan. 870 01:13:48,410 --> 01:13:52,790 >> Mae hyn yn llawer o newydd, gwybodaeth ffynci yma. 871 01:13:52,790 --> 01:13:58,600 Mae llawer o hyn yn iawn idiomatig, yn yr ystyr bod hyn yn cod 872 01:13:58,600 --> 01:14:05,700 sy'n cael ei ysgrifennu fel hyn dim ond oherwydd ei fod yn lân i ddarllen, yn hawdd i'w ddarllen. 873 01:14:05,700 --> 01:14:11,520 Mae yna nifer o wahanol ffyrdd i wneud hynny, llawer o wahanol swyddogaethau y gallwch eu defnyddio, 874 01:14:11,520 --> 01:14:14,680 ond rydym yn tueddu i ddim ond dilyn y patrymau un drosodd a throsodd. 875 01:14:14,680 --> 01:14:20,180 Felly peidiwch â synnu os ydych yn gweld cod fel hyn yn dod i fyny eto ac eto. 876 01:14:20,180 --> 01:14:25,690 Mae pob hawl. Ar y pwynt hwn, mae angen i ni dorri ar gyfer y diwrnod. 877 01:14:25,690 --> 01:14:31,300 Diolch am ddod. Diolch am wylio, os ydych ar-lein. A welwn ni chi wythnos nesaf. 878 01:14:31,300 --> 01:14:33,890 [CS50.TV]