1 00:00:00,000 --> 00:00:02,490 [Powered by Google Translate] [CS50 Bókasafn] 2 00:00:02,490 --> 00:00:04,220 [Nate Hardison] [Harvard University] 3 00:00:04,220 --> 00:00:07,260 [Þetta er CS50. CS50.TV] 4 00:00:07,260 --> 00:00:11,510 The CS50 Bókasafnið er gagnlegt tól sem við höfum upp á tækinu 5 00:00:11,510 --> 00:00:15,870 til að gera það auðveldara fyrir þig að skrifa forrit sem hvetja notendur til inntak. 6 00:00:15,870 --> 00:00:21,670 Í þetta myndband, munum við draga til baka fortjald og líta á hvað nákvæmlega er í CS50 bókasafn. 7 00:00:21,670 --> 00:00:25,520 >> Í myndbandinu á C bókasöfnum, tala við um hvernig þú setur # hausa skrár 8 00:00:25,520 --> 00:00:27,570 safnsins í fengið þinn kóða, 9 00:00:27,570 --> 00:00:31,150 og þá tengja með a tvöfaldur bókasafn skrá á tengja áfanga 10 00:00:31,150 --> 00:00:33,140 í samantekt aðferð. 11 00:00:33,140 --> 00:00:36,440 Hausinn skrá tilgreina tengi bókasafn. 12 00:00:36,440 --> 00:00:41,280 Það er, þeir ítarlega öll þau úrræði sem bókasafnið hefur í boði fyrir þig að nota, 13 00:00:41,280 --> 00:00:45,250 eins og yfirlýsingar virka, fastar, og gögn gerðum. 14 00:00:45,250 --> 00:00:48,890 Tvöfaldur bókasafn skrá inniheldur framkvæmd safninu, 15 00:00:48,890 --> 00:00:54,580 sem eru unnar upp úr skrám haus safnsins og safnsins. c kóðann skrá. 16 00:00:54,580 --> 00:00:59,820 >> Tvöfaldur bókasafn skrá er ekki mjög áhugavert að horfa á þar sem það er, vel, í tvöfaldur. 17 00:00:59,820 --> 00:01:03,300 Svo skulum við taka a líta á haus skrá fyrir bókasafn í staðinn. 18 00:01:03,300 --> 00:01:07,710 Í þessu tilfelli, það er bara einn haus skrá heitir cs50.h. 19 00:01:07,710 --> 00:01:11,040 Við höfum sett það í the notandi eru skrá 20 00:01:11,040 --> 00:01:15,150 ásamt skrá haus hinna Bókasöfn kerfisins. 21 00:01:15,150 --> 00:01:21,530 >> Einn af the fyrstur hlutur þú munt taka eftir er að cs50.h # felur haus skrár frá öðrum bókasöfnum - 22 00:01:21,530 --> 00:01:25,670 fljóta, mörk, staðall bool, og staðall lib. 23 00:01:25,670 --> 00:01:28,800 Aftur, eftir meginreglunni um ekki reinventing hjólinu, 24 00:01:28,800 --> 00:01:33,490 Við höfum byggt á CS0 bókasafn með verkfæri sem önnur veitti okkur. 25 00:01:33,490 --> 00:01:38,690 >> The næstur hlutur sem þú munt sjá í safninu er að við að skilgreina nýja tegund heitir "band." 26 00:01:38,690 --> 00:01:42,330 Þessi lína í raun bara skapar alias fyrir char * tegund, 27 00:01:42,330 --> 00:01:46,000 svo það er ekki dularfullur gæða nýja taginu String með eiginleika 28 00:01:46,000 --> 00:01:49,650 almennt í tengslum við hluti band í öðrum tungumálum, 29 00:01:49,650 --> 00:01:50,850 eins og lengd. 30 00:01:50,850 --> 00:01:55,180 Ástæðan sem við höfum gert er að verja nýja forritari frá Gory smáatriði 31 00:01:55,180 --> 00:01:57,580 af ábendingum þar til þau eru tilbúin. 32 00:01:57,580 --> 00:02:00,130 >> Í næsta hluta af haus skrá er yfirlýsing um aðgerðir 33 00:02:00,130 --> 00:02:04,410 að CS50 bókasafn veitir ásamt gögnum. 34 00:02:04,410 --> 00:02:06,940 Takið eftir hversu ítarlega í athugasemdum hér. 35 00:02:06,940 --> 00:02:10,560 Þetta er frábær mikilvægt svo að fólk veit hvernig á að nota þessar aðgerðir. 36 00:02:10,560 --> 00:02:19,150 Við lýsum yfir, aftur á móti, aðgerðir til að hvetja notandann og aftur chars, tveggja manna, fljóta, ints, 37 00:02:19,150 --> 00:02:24,160 lengi þráir, og strengi með eigin band tegund okkar. 38 00:02:24,160 --> 00:02:26,260 Eftir meginreglunni um felum upplýsinga, 39 00:02:26,260 --> 00:02:31,640 við höfum sett skilgreiningu okkar á sérstakri c framkvæmd skrá -. cs50.c-- 40 00:02:31,640 --> 00:02:35,110 staðsett í uppspretta notandi skrá. 41 00:02:35,110 --> 00:02:38,040 Við höfum veitt að skrá þannig að þú getur tekið að líta á það, 42 00:02:38,040 --> 00:02:41,490 læra af henni, og laun því á mismunandi vélar ef þú vilt, 43 00:02:41,490 --> 00:02:45,510 jafnvel þó að við teljum að það er betra að vinna á tækinu í þennan flokk. 44 00:02:45,510 --> 00:02:47,580 Engu að síður, við skulum taka a líta á það núna. 45 00:02:49,020 --> 00:02:54,620 >> Hlutverk GetChar, GetDouble, GetFloat, GetInt, og GetLongLong 46 00:02:54,620 --> 00:02:58,160 eru öll byggð ofan á GetString virka. 47 00:02:58,160 --> 00:03:01,510 Það kemur í ljós að þeir fylgja öllum meginatriðum sama mynstur. 48 00:03:01,510 --> 00:03:04,870 Þeir nota while lykkju til að hvetja notandann til að eina línu af inntak. 49 00:03:04,870 --> 00:03:08,430 Þeir aftur sérstakt gildi ef notandi inntak tóma línu. 50 00:03:08,430 --> 00:03:11,750 Þeir reyna að flokka inntak notandans sem viðeigandi tegund, 51 00:03:11,750 --> 00:03:15,010 vera það bleikju, tvöfalda, sem fljóta, o.fl. 52 00:03:15,010 --> 00:03:18,710 Og þá aftur annaðhvort niðurstöðu ef inntak var að flokka 53 00:03:18,710 --> 00:03:21,330 eða þeir reprompt notanda. 54 00:03:21,330 --> 00:03:24,230 >> Á háu stigi, það er ekkert mjög erfiður hérna. 55 00:03:24,230 --> 00:03:28,760 Þú gætir hafa skrifað álíka Structured númer sjálfur í fortíðinni. 56 00:03:28,760 --> 00:03:34,720 Kannski er mest Cryptic-útlit leyti sscanf kalla sem flokka inntak notandans. 57 00:03:34,720 --> 00:03:38,160 Sscanf er hluti af snið inntak viðskipti fjölskyldu. 58 00:03:38,160 --> 00:03:42,300 Hún býr í venjulegu io.h, og starf hans er að flokka C band, 59 00:03:42,300 --> 00:03:46,520 samkvæmt tilteknu formi, geyma flokka niðurstöður á breytilegum 60 00:03:46,520 --> 00:03:48,720 hjá þeim sem hringir. 61 00:03:48,720 --> 00:03:53,570 Þar sem snið inntak viðskipti aðgerðir eru mjög gagnlegar, mikið notað virka 62 00:03:53,570 --> 00:03:56,160 sem eru ekki frábær innsæi í fyrstu, 63 00:03:56,160 --> 00:03:58,300 Við munum fara yfir hvernig sscanf virkar. 64 00:03:58,300 --> 00:04:03,330 >> Fyrsta rök til sscanf er char * - bendi á staf. 65 00:04:03,330 --> 00:04:05,150 Til að virka til að vinna almennilega, 66 00:04:05,150 --> 00:04:08,340 þessi karakter ætti að vera fyrsti stafurinn í C band, 67 00:04:08,340 --> 00:04:12,270 sagt við null \ 0 staf. 68 00:04:12,270 --> 00:04:15,120 Þetta er band til að flokka 69 00:04:15,120 --> 00:04:18,269 Seinni rök til sscanf er snið band, 70 00:04:18,269 --> 00:04:20,839 venjulega framhjá í sem streng fasti, 71 00:04:20,839 --> 00:04:24,040 og þú gætir hafa séð band eins og þetta áður þegar printf. 72 00:04:24,040 --> 00:04:28,650 A prósent skilti í sniðstreng táknar viðskipti specifier. 73 00:04:28,650 --> 00:04:30,850 Táknið eftir strax prósent skilti, 74 00:04:30,850 --> 00:04:35,430 táknar C gerð sem við viljum sscanf að breyta til. 75 00:04:35,430 --> 00:04:40,090 Í GetInt, sérðu að það er% d og% c. 76 00:04:40,090 --> 00:04:48,690 Þetta þýðir að sscanf mun reyna að tugabrot int -% d - og char - the% c. 77 00:04:48,690 --> 00:04:51,510 Fyrir hver viðskipti specifier í sniðstreng, 78 00:04:51,510 --> 00:04:56,620 sscanf ráð samsvarandi rök síðar í listanum rök hennar. 79 00:04:56,620 --> 00:05:00,850 Þessi rök að benda til viðeigandi slegið stað 80 00:05:00,850 --> 00:05:04,000 til þess að geyma niðurstöðu í viðskiptum. 81 00:05:04,000 --> 00:05:08,910 >> Dæmigerður leið til að gera þetta er að búa til breytu á mánudaginn fyrir sscanf kalla 82 00:05:08,910 --> 00:05:11,440 fyrir hvern hlut sem þú vilt flokka af streng 83 00:05:11,440 --> 00:05:15,520 og þá nota heimilisfang rekstraraðila - að merkið - til að fara framhjá ábendingum 84 00:05:15,520 --> 00:05:19,100 að þeim breytum til sscanf stendur. 85 00:05:19,100 --> 00:05:22,720 Þú getur séð það í GetInt við gerum einmitt þetta. 86 00:05:22,720 --> 00:05:28,240 Rétt fyrir sscanf símtali lýsa við að int kallast N og char kalla c á mánudaginn, 87 00:05:28,240 --> 00:05:32,340 og við framhjá ábendingum til þeirra í sscanf stendur. 88 00:05:32,340 --> 00:05:35,800 Setja þessar breytur á stafla er valinn yfir með rúm úthlutað 89 00:05:35,800 --> 00:05:39,350 á hrúga með malloc, þar sem þú forðast the kostnaður af malloc símtali 90 00:05:39,350 --> 00:05:43,060 og þú þarft ekki að hafa áhyggjur af leka minni. 91 00:05:43,060 --> 00:05:47,280 Stafir ekki forskeyti með prósent skilti ekki hvetja ekki viðskipti. 92 00:05:47,280 --> 00:05:50,380 Frekar þeir bæta bara við snið forskrift. 93 00:05:50,380 --> 00:05:56,500 >> Til dæmis, ef snið band í GetInt voru% d í staðinn, 94 00:05:56,500 --> 00:05:59,800 sscanf myndi leita að bréfinu og fylgt eftir með int, 95 00:05:59,800 --> 00:06:04,360 og á meðan það væri að reyna að breyta int, myndi það ekki gera neitt annað með A. 96 00:06:04,360 --> 00:06:07,440 Eina undantekningin á þessu er stafabil. 97 00:06:07,440 --> 00:06:11,030 White stafir pláss í sniðstreng passa hvaða magn af bil - 98 00:06:11,030 --> 00:06:12,890 jafnvel ekkert á alla. 99 00:06:12,890 --> 00:06:18,100 Svo, það er hvers vegna athugasemd nefnir hugsanlega með leiðandi og / eða slóð bil. 100 00:06:18,100 --> 00:06:22,910 Svo á þessum tímapunkti það lítur út eins og símtal sscanf okkar munu reyna að flokka inntak band notanda 101 00:06:22,910 --> 00:06:25,380 með því að haka fyrir mögulega leiðandi bil, 102 00:06:25,380 --> 00:06:29,300 fylgt eftir með INT sem verður breytt og geymt í int breytunni n 103 00:06:29,300 --> 00:06:33,090 eftir talsverða bil, og á eftir eðli 104 00:06:33,090 --> 00:06:35,810 geymd í bleikju breytilegum c. 105 00:06:35,810 --> 00:06:37,790 >> Hvað um aftur gildi? 106 00:06:37,790 --> 00:06:41,560 Sscanf munu flokka inntak línu frá upphafi til enda, 107 00:06:41,560 --> 00:06:44,860 hætt þegar það kemur að enda eða þegar staf í inntak 108 00:06:44,860 --> 00:06:49,320 ekki passa snið staf eða þegar það getur ekki gert viðskipti. 109 00:06:49,320 --> 00:06:52,690 Skilagildi Það er notað til einstaklings þegar það stöðvast. 110 00:06:52,690 --> 00:06:55,670 Ef það hætt, því það náði í lok inntak band 111 00:06:55,670 --> 00:07:00,630 áður en allir viðskipti og áður ekki að passa hluta af sniði band, 112 00:07:00,630 --> 00:07:04,840 þá sérstakur fasti EOF er skilað. 113 00:07:04,840 --> 00:07:08,200 Annars skilar það fjölda af farsælum viðskiptum, 114 00:07:08,200 --> 00:07:14,380 sem gæti verið 0, 1 eða 2, þar sem við höfum beðið um tvo viðskipta. 115 00:07:14,380 --> 00:07:19,000 Í okkar tilviki, við viljum tryggja að notandinn slegið í int og aðeins Int. 116 00:07:19,000 --> 00:07:23,370 >> Svo viljum við sscanf að skila 1. Sjá hvers vegna? 117 00:07:23,370 --> 00:07:26,850 Ef sscanf aftur 0, þá voru engin viðskipti gert, 118 00:07:26,850 --> 00:07:31,690 þannig að notandinn slegið eitthvað annað en INT í upphafi inntak. 119 00:07:31,690 --> 00:07:37,100 Ef sscanf skilar 2, þá notandinn ekki rétt að slá það inn á í upphafi inntak, 120 00:07:37,100 --> 00:07:41,390 en þeir slegið þá í sumum ekki bil staf eftir 121 00:07:41,390 --> 00:07:44,940 þar sem% C viðskipti tekist. 122 00:07:44,940 --> 00:07:49,570 Vá, það er alveg langur skýring einn virka símtalinu. 123 00:07:49,570 --> 00:07:53,460 Engu að síður, ef þú vilt frekari upplýsingar um sscanf og systkini hennar, 124 00:07:53,460 --> 00:07:57,130 kíkja á síðum, Google, eða bæði. 125 00:07:57,130 --> 00:07:58,780 There ert hellingur af sniðstreng valkostur, 126 00:07:58,780 --> 00:08:03,830 og þessi geta spara þú a einhver fjöldi af handbók vinnuafli þegar reynt var að flokka strengi í C. 127 00:08:03,830 --> 00:08:07,180 >> Endanleg aðgerð á safninu til að líta á er GetString. 128 00:08:07,180 --> 00:08:10,310 Það kemur í ljós að GetString er erfiður virka að skrifa almennilega, 129 00:08:10,310 --> 00:08:14,290 jafnvel þó það virðist eins og svo einfalt, sameiginleg verkefni. 130 00:08:14,290 --> 00:08:16,170 Hvers vegna er þetta málið? 131 00:08:16,170 --> 00:08:21,380 Jæja, við skulum hugsa um hvernig við ætlum að geyma línuna sem notandinn slær inn 132 00:08:21,380 --> 00:08:23,880 Þar sem strengur er röð chars, 133 00:08:23,880 --> 00:08:26,430 við gætum vilja til að geyma það í fylki á mánudaginn, 134 00:08:26,430 --> 00:08:31,250 en við þyrftum að vita hversu lengi array er að fara að vera þegar við lýsa það. 135 00:08:31,250 --> 00:08:34,030 Sömuleiðis, ef við viljum setja hana á hrúga, 136 00:08:34,030 --> 00:08:38,090 við þurfum að fara að malloc fjölda bæti við viljum áskilja, 137 00:08:38,090 --> 00:08:39,730 en þetta er ómögulegt. 138 00:08:39,730 --> 00:08:42,760 Við höfum ekki hugmynd um hversu margir chars notandinn verður gerð í 139 00:08:42,760 --> 00:08:46,590 áður en notandi í raun er gerð þá. 140 00:08:46,590 --> 00:08:50,720 >> A barnaleg lausn á þessu vandamáli er bara að panta stór klumpur af rúm, segja, 141 00:08:50,720 --> 00:08:54,540 blokk af 1000 chars um inntak notandans, 142 00:08:54,540 --> 00:08:57,980 gert ráð fyrir að notandi myndi aldrei slá í streng að lengd. 143 00:08:57,980 --> 00:09:00,810 Þetta er slæm hugmynd af tveimur ástæðum. 144 00:09:00,810 --> 00:09:05,280 Fyrst, að því gefnu að notendur yfirleitt ekki slá ekki í strengi sem lengi, 145 00:09:05,280 --> 00:09:07,610 þú gætir sóa a einhver fjöldi af minni. 146 00:09:07,610 --> 00:09:10,530 Á nútíma vél, þetta gæti ekki verið málið ef þú gerir þetta 147 00:09:10,530 --> 00:09:13,890 í einum eða tveimur einangruðum tilvikum, 148 00:09:13,890 --> 00:09:17,630 en ef þú tekur notandi inntak er í lykkju og geyma til síðari nota, 149 00:09:17,630 --> 00:09:20,870 þú getur auðveldlega sjúga upp tonn af minni. 150 00:09:20,870 --> 00:09:24,450 Að auki, ef forritið sem þú ert að skrifa er í minni tölvu - 151 00:09:24,450 --> 00:09:28,100 Tæki eins og a smartphone eða eitthvað annað með takmarkaða minni - 152 00:09:28,100 --> 00:09:32,060 Þessi lausn mun valda vandræðum mikið hraðar. 153 00:09:32,060 --> 00:09:36,450 Annað, meira alvarleg ástæða að ekki gera þetta er að það fer program viðkvæmt 154 00:09:36,450 --> 00:09:39,710 hvað er kallað gnægð biðminni árás. 155 00:09:39,710 --> 00:09:45,840 Í forritun, biðminni er minni er notað til að geyma inntak eða úttak gögn, 156 00:09:45,840 --> 00:09:48,980 sem í þessu tilfelli er 1000-stafir blokk okkar. 157 00:09:48,980 --> 00:09:53,370 A biðminni flæða stað þegar gögn eru skrifuð framhjá lok blokk. 158 00:09:53,370 --> 00:09:57,790 >> Til dæmis, ef notandi í raun er gerð í meira en 1000 tákn. 159 00:09:57,790 --> 00:10:01,570 Þú gætir hafa upplifað þetta óvart þegar forritun með fylki. 160 00:10:01,570 --> 00:10:05,620 Ef þú ert með fjölda 10 ints, ekkert stoppar þig frá að reyna að lesa eða skrifa 161 00:10:05,620 --> 00:10:07,810 15. int. 162 00:10:07,810 --> 00:10:10,000 Það eru engar þýðanda viðvaranir eða villur. 163 00:10:10,000 --> 00:10:13,250 The Program blunders bara beint áfram og aðgangur minni 164 00:10:13,250 --> 00:10:18,150 þar sem það telur 15 int verður, og þetta getur skrifa aðrar breytur. 165 00:10:18,150 --> 00:10:22,040 Í versta tilfelli getur þú skrifa sumir af innri forritinu er 166 00:10:22,040 --> 00:10:26,820 Stjórntæki, veldur forrit til raunverulega framkvæma mismunandi leiðbeiningar 167 00:10:26,820 --> 00:10:28,340 en þú ætlaðir. 168 00:10:28,340 --> 00:10:31,360 >> Nú er það ekki algengt að gera þetta óvart, 169 00:10:31,360 --> 00:10:35,150 en þetta er nokkuð algengt tækni sem slæmur krakkar nota til að brjóta forrit 170 00:10:35,150 --> 00:10:39,080 og setja illgjarn merkjamál á tölvum annarra. 171 00:10:39,080 --> 00:10:42,910 Þess vegna getum við ekki bara notað barnaleg lausn okkar. 172 00:10:42,910 --> 00:10:45,590 Við þurfum a vegur til koma í veg fyrir áætlanir okkar frá því að vera viðkvæm 173 00:10:45,590 --> 00:10:47,880 að flæða biðminni árás. 174 00:10:47,880 --> 00:10:51,430 Til að gera þetta þurfum við að ganga úr skugga um að biðminni okkar geta vaxið eins og við lesum 175 00:10:51,430 --> 00:10:53,850 meira inntak frá the notandi. 176 00:10:53,850 --> 00:10:57,440 The lausn? Við notum úthlutað hrúga biðminni. 177 00:10:57,440 --> 00:10:59,950 Þar sem við getum búa hana með að breyta stærð realloc virka, 178 00:10:59,950 --> 00:11:04,580 og við höldum utan um tvær tölur - vísitölu næsta tómur rifa í biðminni 179 00:11:04,580 --> 00:11:08,390 og lengd eða getu biðminni. 180 00:11:08,390 --> 00:11:13,210 Við að lesa í chars frá notanda í einu með því að nota fgetc virka. 181 00:11:13,210 --> 00:11:19,360 The röksemd fgetc virka tekur - stdin - er vísað til staðlaða inntak band, 182 00:11:19,360 --> 00:11:23,810 sem er preconnected inntak rás sem er notuð til að flytja inntak notandans 183 00:11:23,810 --> 00:11:26,270 frá flugstöðinni til the program. 184 00:11:26,270 --> 00:11:29,890 >> Þegar notandi slær inn nýja persónu, athuga við að sjá hvort vísitala 185 00:11:29,890 --> 00:11:35,810 af næstu frjáls rifa plús 1 er meiri en getu biðminni. 186 00:11:35,810 --> 00:11:39,690 The +1 kemur í því ef að næsta frjáls vísitalan er 5, 187 00:11:39,690 --> 00:11:44,150 þá lengd Buffer okkar verður 6 takk 0 flokkun. 188 00:11:44,150 --> 00:11:48,350 Ef við höfum keyrt út af pláss í biðminni, þá erum við að reyna að búa það, 189 00:11:48,350 --> 00:11:51,690 tvöföldun það svo að við skera niður á the tala af sinnum sem við búa 190 00:11:51,690 --> 00:11:54,760 ef notandi er að skrifa í mjög langan streng. 191 00:11:54,760 --> 00:11:57,950 Ef strengur hefur fengið of langt eða ef við keyra út af minni hrúga, 192 00:11:57,950 --> 00:12:01,350 við frjáls biðminni okkar og skila NULL. 193 00:12:01,350 --> 00:12:04,170 >> Að lokum, bæta við að bleikju í biðminni. 194 00:12:04,170 --> 00:12:08,200 Þegar notandi smellir inn eða aftur, merkja nýja línu, 195 00:12:08,200 --> 00:12:12,050 eða sérstökum stafir - stjórn D - sem merki enda á inntak, 196 00:12:12,050 --> 00:12:16,240 Við gera a athuga hvort notandinn í raun slegið á eitthvað. 197 00:12:16,240 --> 00:12:18,820 Ef ekki, aftur við null. 198 00:12:18,820 --> 00:12:22,280 Annars, þar biðminni okkar er líklega stærra en við þurfum, 199 00:12:22,280 --> 00:12:24,830 í versta falli það er næstum tvisvar sinnum eins og stór eins og við þurfum 200 00:12:24,830 --> 00:12:27,830 þar sem við tvöfalda hvert skipti við breyta, 201 00:12:27,830 --> 00:12:31,840 við tökum nýtt eintak af the band með bara pláss sem við þurfum. 202 00:12:31,840 --> 00:12:34,220 Við bæta við auka 1 við malloc símtalið 203 00:12:34,220 --> 00:12:37,810 þannig að það er pláss fyrir sérstökum null Terminator karakterinn - á \ 0, 204 00:12:37,810 --> 00:12:41,990 sem við bæta við streng þegar við afrita í the hvíla af the stafi, 205 00:12:41,990 --> 00:12:45,060 nota strncpy stað strcpy 206 00:12:45,060 --> 00:12:48,830 svo að við getum tilgreina nákvæmlega hversu margir chars við viljum afrita. 207 00:12:48,830 --> 00:12:51,690 Strcpy eintök þar til hann lendir á \ 0. 208 00:12:51,690 --> 00:12:55,740 Þá erum við að losa biðminni okkar og skila afrit til þess sem hringir. 209 00:12:55,740 --> 00:12:59,840 >> Hver vissi svo einfalt virtist virka gæti verið svo flókið? 210 00:12:59,840 --> 00:13:02,820 Nú þú veist hvað fer í CS50 bókasafn. 211 00:13:02,820 --> 00:13:06,470 >> Ég heiti Nate Hardison, og þetta er CS50. 212 00:13:06,470 --> 00:13:08,350 [CS50.TV]