1 00:00:00,000 --> 00:00:02,730 [Powered by Google Translate] [5. HLUTI: minna þægilegt] 2 00:00:02,730 --> 00:00:05,180 [Nate Hardison, Harvard University] 3 00:00:05,180 --> 00:00:08,260 [Þetta er CS50.] [CS50.TV] 4 00:00:08,260 --> 00:00:11,690 Svo velkomin aftur, krakkar. 5 00:00:11,690 --> 00:00:16,320 Velkomin á kafla 5. 6 00:00:16,320 --> 00:00:20,220 Á þessum tímapunkti, hafa lokið quiz 0 og hafa séð hvernig þú hefur gert, 7 00:00:20,220 --> 00:00:25,770 vonandi líður þér mjög vel því að ég var mjög hrifinn af frammistöðu í þessum kafla. 8 00:00:25,770 --> 00:00:28,050 Fyrir online áhorfendur okkar, höfum við fengið nokkrar spurningar 9 00:00:28,050 --> 00:00:33,680 Um síðustu tvö vandamál á vandamál setja - eða á prófið frekar. 10 00:00:33,680 --> 00:00:39,690 Þannig að við erum að fara að fara yfir þá sem í raun fljótt svo að allir sjái hvað gerðist 11 00:00:39,690 --> 00:00:45,060 og hvernig á að fara í gegnum the raunverulegur lausn frekar en bara að skoða lausn sjálft. 12 00:00:45,060 --> 00:00:50,330 Við ætlum að fara yfir síðustu tveimur vandamálum mjög fljótt, 32 og 33. 13 00:00:50,330 --> 00:00:53,240 Bara aftur, svo að online áhorfendur geta séð þetta. 14 00:00:53,240 --> 00:00:59,080 >> Ef þú kveikir á vanda þínum 32, sem er á bls 13, 15 00:00:59,080 --> 00:01:02,730 13 af 16, vandamál 32 er allt um skiptasamninga. 16 00:01:02,730 --> 00:01:05,010 Það var allt um að skipta tvær heiltölur. 17 00:01:05,010 --> 00:01:08,740 Það er vandamálið sem við höfðum farið yfir nokkrum sinnum í fyrirlestrinum. 18 00:01:08,740 --> 00:01:13,590 Og hér, það sem við vorum að biðja þig að gera er a fljótur minni ummerki. 19 00:01:13,590 --> 00:01:17,000 Til að fylla í gildi á breytum eins og þeir eru á stafla 20 00:01:17,000 --> 00:01:20,250 sem kóðinn fer í gegnum þetta skipti virka. 21 00:01:20,250 --> 00:01:24,500 Einkum það sem við erum að horfa á - Ég er að fara að setja þetta iPad niður - 22 00:01:24,500 --> 00:01:29,650 einkum það sem við erum að horfa á er þetta lína voru 6 rétt hér. 23 00:01:29,650 --> 00:01:36,740 Og það er númer 6 fyrir aðeins contiguity við fyrri vandamál. 24 00:01:36,740 --> 00:01:41,720 Það sem við viljum gera er að sýna eða merkja stöðu minni 25 00:01:41,720 --> 00:01:46,090 eins og það er á þeim tíma þegar við framkvæmum þessa línu númer 6, 26 00:01:46,090 --> 00:01:52,540 sem er í raun að fara aftur úr virka skipti okkar hérna. 27 00:01:52,540 --> 00:01:59,450 Ef við skruna niður hér, sáum við að heimilisföng allt í minni var veitt fyrir okkur. 28 00:01:59,450 --> 00:02:02,540 Þetta er mjög lykill, við munum koma aftur til það á bara smástund. 29 00:02:02,540 --> 00:02:09,240 Og svo hérna neðst, við höfðum smá minni skýringarmynd sem við erum að fara að vísa til. 30 00:02:09,240 --> 00:02:12,490 Ég hef reyndar gert þetta út á iPad minn. 31 00:02:12,490 --> 00:02:20,720 Þannig að ég ætla að skipta fram og til baka á milli iPad og þennan kóða bara til tilvísunar. 32 00:02:20,720 --> 00:02:26,540 >> Við skulum byrja. Í fyrsta lagi skulum við leggja áherslu á fyrstu tveimur línum af helstu hérna. 33 00:02:26,540 --> 00:02:30,220 Til að byrja, við erum að fara að frumstilla X í 1 og y í 2. 34 00:02:30,220 --> 00:02:33,040 Þannig að við höfum tvær heiltölu breytur, þá eru þeir báðir að fara að setja á mánudaginn. 35 00:02:33,040 --> 00:02:36,050 Við ætlum að setja upp 1 og 2 í þeim. 36 00:02:36,050 --> 00:02:43,150 Svo ef ég fletta yfir á iPad minn, vonandi, við skulum sjá - 37 00:02:43,150 --> 00:02:48,660 Apple TV speglun, og svona. Allt í lagi. 38 00:02:48,660 --> 00:02:51,670 Svo ef ég fletta yfir á iPad minn, 39 00:02:51,670 --> 00:02:56,220 Ég vil að frumstilla X að 1 og y í 2. 40 00:02:56,220 --> 00:03:00,580 Við gerum það einfaldlega með því að skrifa 1 í reitinn merkt X 41 00:03:00,580 --> 00:03:07,730 og 2 í kassann merktur y. Nokkuð einfalt. 42 00:03:07,730 --> 00:03:11,620 Svo nú skulum við fara aftur í fartölvu, sjá hvað gerist næst. 43 00:03:11,620 --> 00:03:15,810 Svo er þetta næsta lína þar sem hlutirnir fá erfiður. 44 00:03:15,810 --> 00:03:28,110 Við förum heimilisfang x og veffang y sem breytur a og b í skipti virka. 45 00:03:28,110 --> 00:03:32,380 Heimilisfang í x og heimilisfang y eru hlutir sem við getum ekki reikna 46 00:03:32,380 --> 00:03:36,360 án þess að vísa til þessara bullet punkta rétt hérna. 47 00:03:36,360 --> 00:03:39,750 Og sem betur fer, segja fyrstu tvær bullet stig okkur nákvæmlega hvað svörin eru. 48 00:03:39,750 --> 00:03:44,740 Heimilisfang x í minni er 10, og heimilisfang y í minni er 14. 49 00:03:44,740 --> 00:03:51,870 Þeir eru þau gildi sem fá liðin í A og B upp efst í aðgerð skipti okkar. 50 00:03:51,870 --> 00:04:00,760 Svo aftur, skipta aftur á myndinni okkar, get ég skrifað 10 í 51 00:04:00,760 --> 00:04:07,400 og 14 í b. 52 00:04:07,400 --> 00:04:11,610 Nú, þetta lið er hvar við getum haldið áfram með skipti. 53 00:04:11,610 --> 00:04:14,520 Svo snúa aftur til the laptop aftur, 54 00:04:14,520 --> 00:04:21,079 sjáum við að hvernig skipti virkar er ég fyrst dereference a og geyma niðurstaðan í tmp. 55 00:04:21,079 --> 00:04:27,650 Svo segir dereference rekstraraðila, "Hey. Treat innihald breytu a sem heimilisfang. 56 00:04:27,650 --> 00:04:33,830 Fara til hvað er geymt í þeim tölu, og hlaða hana. " 57 00:04:33,830 --> 00:04:41,720 Það sem þú hlaða úr breytu er að fara að geyma í breytu tmp okkar. 58 00:04:41,720 --> 00:04:45,150 Ósvífni aftur til iPad. 59 00:04:45,150 --> 00:04:51,690 Ef við förum að taka á 10, við vitum að tölu 10 er varible x 60 00:04:51,690 --> 00:04:55,480 vegna þess að við vorum sagt benda bullet okkar að heimilisfang x í minni er 10. 61 00:04:55,480 --> 00:05:00,180 Þannig að við getum farið þangað, fá verðmæti það, sem er 1, eins og við sjáum á iPad okkar 62 00:05:00,180 --> 00:05:06,300 og hlaða það inn í tmp. 63 00:05:06,300 --> 00:05:08,250 Aftur, þetta er ekki endanleg innihald. 64 00:05:08,250 --> 00:05:14,350 Við erum að fara að ganga í gegnum og við munum komast að endanlegri stöðu okkar áætlunarinnar í árslok. 65 00:05:14,350 --> 00:05:17,210 En núna höfum við gildið 1 geymd í tmp. 66 00:05:17,210 --> 00:05:19,210 >> Og það er a fljótur spurning hérna. 67 00:05:19,210 --> 00:05:23,980 [Alexander] er dereference stjórnandi - það er bara Star rétt framan við breytu? 68 00:05:23,980 --> 00:05:27,600 >> Já. Svo dereference rekstraraðila, eins og við selbiti aftur fartölvu okkar aftur, 69 00:05:27,600 --> 00:05:33,780 er þetta stjarna rétt fyrir framan. 70 00:05:33,780 --> 00:05:37,460 Í þeim skilningi er það - þú andstæða það með margföldun rekstraraðila 71 00:05:37,460 --> 00:05:42,400 sem krefst tvennt, en dereference rekstraraðila er unary rekstraraðila. 72 00:05:42,400 --> 00:05:46,130 Bara beita eitt gildi í stað þess að tvöfaldur rekstraraðila, 73 00:05:46,130 --> 00:05:48,810 þar sem þú sækir um til tveggja mismunandi gildum. 74 00:05:48,810 --> 00:05:52,080 Svo það er það sem gerist í þessari línu. 75 00:05:52,080 --> 00:05:58,390 Við hlaðinn gildið 1 og geyma það í tímabundna heiltölubreytu okkar. 76 00:05:58,390 --> 00:06:05,800 Í næstu línu, geymum við innihald b í - 77 00:06:05,800 --> 00:06:12,630 eða, frekar, geymum við innihald sem B vísar til í stað þar sem bendir til. 78 00:06:12,630 --> 00:06:17,690 Ef við greinum þetta frá hægri til vinstri, við erum að fara að dereference b, 79 00:06:17,690 --> 00:06:23,580 við erum að fara að takast á 14, við erum að fara að grípa heiltölu sem er þar, 80 00:06:23,580 --> 00:06:26,900 og þá ætlum við að fara á heimilisfang 10, 81 00:06:26,900 --> 00:06:34,240 og við erum að fara að kasta niðurstöðu dereference okkar b í því rými. 82 00:06:34,240 --> 00:06:40,080 Ósvífni aftur iPad okkar, þar sem við getur gert þetta aðeins meira steypu, 83 00:06:40,080 --> 00:06:44,070 það gæti hjálpað ef ég skrifa tölur á öllum heimilisföngum hér. 84 00:06:44,070 --> 00:06:53,820 Þannig að við vitum að á y, við erum á heimilisfang 14, x er í tölu 10. 85 00:06:53,820 --> 00:07:00,180 Þegar við byrjum á b, við dereference b, við erum að fara að grípa gildi 2. 86 00:07:00,180 --> 00:07:08,320 Við ætlum að grípa þetta gildi vegna þess að það er gildi sem býr á heimilisfang 14. 87 00:07:08,320 --> 00:07:15,700 Og við erum að fara að setja það inn breytu sem býr á heimilisfang 10, 88 00:07:15,700 --> 00:07:19,160 sem er rétt þar, sem svarar til breytu X okkar. 89 00:07:19,160 --> 00:07:21,810 Þannig að við getum gera a lítill hluti af skrifa of mikið hérna 90 00:07:21,810 --> 00:07:35,380 þar við að losna við 1 okkar og stað við að skrifa 2. 91 00:07:35,380 --> 00:07:39,560 Svo er allt vel og gott í heiminum, jafnvel þótt við höfum plága x nú. 92 00:07:39,560 --> 00:07:44,890 Við höfum geymt gamla gildið x er á breytilegum tmp okkar. 93 00:07:44,890 --> 00:07:50,210 Þannig að við getum lokið skipti við næstu línu. 94 00:07:50,210 --> 00:07:53,030 Ósvífni aftur laptop okkar. 95 00:07:53,030 --> 00:07:58,150 Nú er allt sem á eftir að taka efni úr tímabundið heiltölubreytu okkar 96 00:07:58,150 --> 00:08:05,630 og geyma þá í breytu sem býr á heimilisfang sem B er að halda. 97 00:08:05,630 --> 00:08:10,230 Þannig að við erum að fara að í raun dereference b til að fá aðgang til að breyta 98 00:08:10,230 --> 00:08:14,340 sem er á netfangið sem B hefur í það, 99 00:08:14,340 --> 00:08:19,190 og við erum að fara að efni gildi að tmp er að halda í hana. 100 00:08:19,190 --> 00:08:23,280 Ósvífni aftur iPad aftur. 101 00:08:23,280 --> 00:08:31,290 Ég get eytt þessu gildi hér, 2, 102 00:08:31,290 --> 00:08:41,010 og í staðinn munum við afrita 1 rétt inn í það. 103 00:08:41,010 --> 00:08:43,059 Þá næsta lína sem keyrir, auðvitað - 104 00:08:43,059 --> 00:08:47,150 ef við flettir aftur á fartölvu - er þetta lið 6, 105 00:08:47,150 --> 00:08:52,500 sem er að benda á þar sem við vildum að hafa skýringarmynd okkar alveg fyllt út. 106 00:08:52,500 --> 00:08:58,940 Svo snúa aftur til iPad aftur, bara svo þú getur séð lokið skýringarmynd 107 00:08:58,940 --> 00:09:06,610 þú getur séð að við höfum 10 í, 14 í b, a 1 í tmp, a 2 í x, og 1 í y. 108 00:09:06,610 --> 00:09:11,000 Eru einhverjar spurningar um þetta? 109 00:09:11,000 --> 00:09:14,640 Er þetta gert meira vit, hafa gengið í gegnum það? 110 00:09:14,640 --> 00:09:24,850 Gera minna vit? Vonandi ekki. Allt í lagi. 111 00:09:24,850 --> 00:09:28,230 >> Ábendingar eru mjög erfiður efni. 112 00:09:28,230 --> 00:09:33,420 Einn af strákunum sem við vinnum með er mjög algengt að segja: 113 00:09:33,420 --> 00:09:36,590 "Til að skilja ábendingum, verður þú fyrst að skilja ábendingum." 114 00:09:36,590 --> 00:09:40,530 Sem ég held að sé mjög satt. Það þýðir að taka nokkurn tíma að venjast henni. 115 00:09:40,530 --> 00:09:45,360 Teikning fullt af myndum, er að teikna fullt af skýringarmyndum minni eins og þessi mjög gagnlegt, 116 00:09:45,360 --> 00:09:49,480 og eftir að ganga í gegnum dæmi eftir dæmi eftir dæmi, 117 00:09:49,480 --> 00:09:54,450 það mun byrja að gera smá meira vit og smá meira vit og smá meira vit. 118 00:09:54,450 --> 00:10:01,560 Að lokum, einn daginn munt þú hafa allt alveg tökum. 119 00:10:01,560 --> 00:10:13,800 Einhverjar spurningar áður en við fara í næstu vandamáli? Allt í lagi. 120 00:10:13,800 --> 00:10:18,840 Svo flettir aftur í fartölvu. 121 00:10:18,840 --> 00:10:23,300 Næsta vandamál sem við höfum er vandamál númer 33 á skrá I / O. 122 00:10:23,300 --> 00:10:26,350 Þysja inn á þessu smá. 123 00:10:26,350 --> 00:10:28,710 Vandamál 33 - Já? 124 00:10:28,710 --> 00:10:32,110 >> [Daniel] Ég var bara fljótur spurning. Þessi stjarna, eða stjörnu, 125 00:10:32,110 --> 00:10:35,590 það heitir dereferencing þegar þú notar stjörnu áður. 126 00:10:35,590 --> 00:10:38,820 Hvað er það kallað þegar þú ert að nota merkið áður? 127 00:10:38,820 --> 00:10:43,140 >> Er The merkið fyrir vistfang-af rekstraraðila. 128 00:10:43,140 --> 00:10:45,880 Svo skulum fletta aftur upp. 129 00:10:45,880 --> 00:10:49,310 Oops. Ég er með stillt á zoom þannig að ég get eiginlega ekki fletta. 130 00:10:49,310 --> 00:10:52,780 Ef við lítum á þennan kóða virkilega hratt hérna, 131 00:10:52,780 --> 00:10:54,980 aftur, sama gerast. 132 00:10:54,980 --> 00:10:59,180 Ef við lítum á þennan kóða hér, á þessari línu þar sem við að hringja til að skipta, 133 00:10:59,180 --> 00:11:10,460 the merkið er bara að segja "fá heimilisfang þar sem breyta stöðugur x." 134 00:11:10,460 --> 00:11:14,460 Þegar þýðanda þinn safnar kóðann þinn, 135 00:11:14,460 --> 00:11:20,590 það hefur í raun líkamlega merkja út stað í minni fyrir allar breytur til að lifa. 136 00:11:20,590 --> 00:11:24,910 Og hvað með það að þýðandinn getur þá gert þegar það er saman allt, 137 00:11:24,910 --> 00:11:31,110 það veit, "Ó, ég setti x við heimilisfang 10. Ég setti y í tölu 14." 138 00:11:31,110 --> 00:11:34,640 Það getur þá fylla í þessi gildi fyrir þig. 139 00:11:34,640 --> 00:11:44,740 Svo þú getur þá - það er þá fara framhjá það á og fara & Y í eins og heilbrigður. 140 00:11:44,740 --> 00:11:50,730 Þessir krakkar fá heimilisfang, en einnig, þegar þú framhjá þeim í skipti virka, 141 00:11:50,730 --> 00:11:55,690 Þessi tegund upplýsinga, þetta int * hérna, segir þýðandinn, 142 00:11:55,690 --> 00:12:01,350 "Allt í lagi, við erum að fara að túlka þetta netfang sem heimilisfang heiltala breyta." 143 00:12:01,350 --> 00:12:05,900 Sem heimilisfang heiltala, sem er annað heimilisfang staf breytu 144 00:12:05,900 --> 00:12:09,930 vegna þess að int tekur upp á 32-bita vél, tekur upp 4 bæti af plássi, 145 00:12:09,930 --> 00:12:13,310 en staf tekur aðeins upp 1 bæti af plássi. 146 00:12:13,310 --> 00:12:17,310 Svo það er mikilvægt að vita líka hvað er - hvað lifir, hvaða tegund af gildi 147 00:12:17,310 --> 00:12:20,340 býr á heimilisfang sem fékk liðið inn 148 00:12:20,340 --> 00:12:22,020 Eða það heimilisfang sem þú ert að fást við. 149 00:12:22,020 --> 00:12:29,020 Þannig þú veist hversu margir bæti af upplýsingum í raun hlaða úr RAM. 150 00:12:29,020 --> 00:12:31,780 Og þá, já, þetta dereference rekstraraðila, eins og þú værir að spyrja, 151 00:12:31,780 --> 00:12:37,200 fer og notar upplýsingar á tilteknu heimilisfang. 152 00:12:37,200 --> 00:12:42,820 Svo segir það, með þessa breytu hér meðhöndla innihald sem heimilisfang, 153 00:12:42,820 --> 00:12:47,880 fara til heimilisfang, og draga út, hlaða í örgjörva, hlaða inn skrá 154 00:12:47,880 --> 00:12:56,340 raunverulegt gildi eða innihald sem búa á þeim tölu. 155 00:12:56,340 --> 00:12:59,620 Allir fleiri spurningar? Þetta eru góðar spurningar. 156 00:12:59,620 --> 00:13:01,650 Það er a einhver fjöldi af nýjum hugtökum líka. 157 00:13:01,650 --> 00:13:09,800 Það er líka svona angurvær, sjá og og * á mismunandi stöðum. 158 00:13:09,800 --> 00:13:13,180 >> Allt í lagi. 159 00:13:13,180 --> 00:13:18,530 Svo aftur til vandamál 33, skrá I / O. 160 00:13:18,530 --> 00:13:22,540 Þetta var eitt af þeim vandamálum sem ég held að nokkrir hlutir gerst. 161 00:13:22,540 --> 00:13:25,400 Einn, er það nokkuð nýtt umræðuefni. 162 00:13:25,400 --> 00:13:30,590 Það var kynnt fljótlega fyrir prófið 163 00:13:30,590 --> 00:13:33,400 og þá held ég að það væri góður af eins og einn af þeim orð vandamál í stærðfræði 164 00:13:33,400 --> 00:13:39,720 þar sem þeir gefa þér mikið af upplýsingum, en þú í raun ekki enda ekki upp að þurfa að nota tonn af því. 165 00:13:39,720 --> 00:13:44,060 Fyrsti hluti af þessu vandamáli er að lýsa hvað CSV skrá er. 166 00:13:44,060 --> 00:13:50,620 Nú, CSV skrá, samkvæmt lýsingu, er kommu-aðskilin gildi skrá. 167 00:13:50,620 --> 00:13:55,300 Ástæðan að þetta eru yfirleitt áhugavert, og ástæðan sem þú notar alltaf þá, 168 00:13:55,300 --> 00:14:00,800 er, því, hversu margir af þú alltaf notað efni eins og Excel? 169 00:14:00,800 --> 00:14:03,240 Mynd af þú hefur sennilega, eða vilja nota á einhverjum tímapunkti í lífi þínu. 170 00:14:03,240 --> 00:14:06,430 Þú munt nota eitthvað eins og Excel. 171 00:14:06,430 --> 00:14:10,940 Til þess að fá gögn úr Excel töflureikni eða gera hvers konar vinnslu með það, 172 00:14:10,940 --> 00:14:17,240 ef þú vildir skrifa C forrit eða Python program, Java forrit, 173 00:14:17,240 --> 00:14:20,070 að takast á við þau gögn sem þú hefur vistað í það, 174 00:14:20,070 --> 00:14:23,170 einn af algengustu leiðir til að fá það út í CSV skrá. 175 00:14:23,170 --> 00:14:26,850 Og þú getur opna Excel og þegar þú ferð í 'Save As' umræðu, 176 00:14:26,850 --> 00:14:32,840 er hægt að fá út raunverulegt CSV skrá. 177 00:14:32,840 --> 00:14:35,890 >> Handy að vita hvernig á að takast á við þessa hluti. 178 00:14:35,890 --> 00:14:42,010 The vegur það verksmiðja er að það er svipað - ég meina, er það fyrst og fremst herma töflureikni, 179 00:14:42,010 --> 00:14:47,590 þar sem við sjáum hér í mjög vinstri-mest stykki, 180 00:14:47,590 --> 00:14:49,910 við höfum öll síðustu nöfn. 181 00:14:49,910 --> 00:14:54,670 Þannig að við höfum Malan, þá Hardison, og þá Bowden, MacWilliam, og þá Chan. 182 00:14:54,670 --> 00:14:59,470 Öll síðustu nöfn. Og þá skilur kommu síðustu nöfn frá fyrstu nöfn. 183 00:14:59,470 --> 00:15:02,970 David, Nate, Rob, Tommy, og Zamyla. 184 00:15:02,970 --> 00:15:06,850 Ég blanda alltaf upp Robby og Tom. 185 00:15:06,850 --> 00:15:10,940 Og svo, að lokum, þriðja dálki er netföng. 186 00:15:10,940 --> 00:15:18,500 Þegar þú skilur að, the hvíla af the program er nokkuð einfalt að framkvæma. 187 00:15:18,500 --> 00:15:23,850 Það sem við höfum gert til þess að líkja eftir þessari sömu uppbyggingu í C program okkar 188 00:15:23,850 --> 00:15:27,510 er við höfum notað uppbyggingu. 189 00:15:27,510 --> 00:15:30,520 Við munum byrja að spila með þetta aðeins meira eins og heilbrigður. 190 00:15:30,520 --> 00:15:35,790 Við sáum þá í fyrsta smá í setja vandamál 3, þegar við vorum að fást við orðabækur. 191 00:15:35,790 --> 00:15:40,290 En þetta starfsfólk strúktúr geymir föðurnafn, fyrsta nafn og tölvupóst. 192 00:15:40,290 --> 00:15:44,500 Rétt eins og CSV skrá okkar var að geyma. 193 00:15:44,500 --> 00:15:47,950 Þannig að þetta er bara að breyta úr einu sniði í annað. 194 00:15:47,950 --> 00:15:54,630 Við verðum að breyta, í þessu tilfelli, að starfsfólk strúktúr í línu, 195 00:15:54,630 --> 00:15:59,060 kommu-aðskilin lína, bara svona. 196 00:15:59,060 --> 00:16:01,500 Er það skynsamleg? Þið hafið öll tekið próf, 197 00:16:01,500 --> 00:16:07,680 svo ég ímynda mér að þú hefur að minnsta kosti haft nokkurn tíma til að hugsa um þetta. 198 00:16:07,680 --> 00:16:16,410 >> Í ráða virka, vandamálið biður okkur að taka á - we'll zoom í á þessum smá - 199 00:16:16,410 --> 00:16:22,480 taka í starfsfólk uppbyggingu, starfsfólk strúktúrinn, með nafn, 200 00:16:22,480 --> 00:16:30,900 og bæta innihald hennar til staff.csv skrá okkar. 201 00:16:30,900 --> 00:16:34,230 Það kemur í ljós að þetta er frekar einfalt í notkun. 202 00:16:34,230 --> 00:16:37,430 Við munum konar leika í kring með þessar aðgerðir svolítið meira í dag. 203 00:16:37,430 --> 00:16:44,510 En í þessu tilviki er fprintf aðgerð er í raun lykillinn. 204 00:16:44,510 --> 00:16:51,960 Svo með fprintf, getum við prentað, eins og þið hafið verið að nota printf þetta allt tíma. 205 00:16:51,960 --> 00:16:55,050 Þú getur printf lína í skrá. 206 00:16:55,050 --> 00:16:59,030 Svo í stað þess að bara að gera venjulega printf símtal þar sem þú gefa það snið band 207 00:16:59,030 --> 00:17:05,380 og þá skipta allar breytur með eftirfarandi rökum, 208 00:17:05,380 --> 00:17:11,290 með fprintf, fyrstu rök þín er staðinn skrána sem þú vilt að skrifa. 209 00:17:11,290 --> 00:17:21,170 Ef við vorum að horfa á þetta í tækið, td maður fprintf, 210 00:17:21,170 --> 00:17:25,980 getum við séð muninn á printf og fprintf. 211 00:17:25,980 --> 00:17:28,960 Ég súmma hérna svolítið. 212 00:17:28,960 --> 00:17:33,140 Svo með printf, gefum það snið band, og þá síðari rök 213 00:17:33,140 --> 00:17:37,580 eru allar breytur fyrir skipti eða útskipting í band snið okkar. 214 00:17:37,580 --> 00:17:47,310 Þar með fprintf, fyrsta rifrildi er örugglega þessi skrá * sem kallast á. 215 00:17:47,310 --> 00:17:51,800 >> Flytja aftur hérna að ráða okkar, 216 00:17:51,800 --> 00:17:54,550 Við höfum nú þegar fengið skrá * Stream okkar opnaði fyrir okkur. 217 00:17:54,550 --> 00:17:57,810 Það er það sem þetta fyrsta línan er, það opnar staff.csv skrá, 218 00:17:57,810 --> 00:18:01,690 það opnast það í bæta ham, og allt sem er eftir fyrir okkur að gera er 219 00:18:01,690 --> 00:18:08,640 skrifa starfsfólk uppbyggingu á skrá. 220 00:18:08,640 --> 00:18:10,870 Og við skulum sjá, ég vil að nota iPad? 221 00:18:10,870 --> 00:18:17,900 Ég nota iPad. Við höfum tóm - Við skulum setja þetta á borðið svo ég geti skrifað svolítið betur - 222 00:18:17,900 --> 00:18:33,680 ógilt ráða og það tekur í einu rifrildi, með starfsfólk uppbyggingu heitir s. 223 00:18:33,680 --> 00:18:44,120 Got axlabönd okkar, höfum við fengið skrá * okkar heitir skrá, 224 00:18:44,120 --> 00:18:48,380 við höfum fopen línu okkar gefið okkur, 225 00:18:48,380 --> 00:18:51,890 og ég ætla bara að skrifa það eins og punkta þar sem það er nú þegar í pedia. 226 00:18:51,890 --> 00:19:00,530 Og þá á næstu línu okkar, við erum að fara að hringja til fprintf 227 00:19:00,530 --> 00:19:03,700 og við ætlum að fara í skrána sem við viljum prenta í, 228 00:19:03,700 --> 00:19:10,290 og þá sniði band okkar, sem - 229 00:19:10,290 --> 00:19:14,300 Ég læt ykkur segja mér hvað það lítur út. 230 00:19:14,300 --> 00:19:20,500 Hvað um þig, Stella? Veistu hvað fyrsta hluta sniðstreng lítur út? 231 00:19:20,500 --> 00:19:24,270 [Stella] Ég er ekki viss. >> Feel frjáls til að spyrja Jimmy. 232 00:19:24,270 --> 00:19:27,690 Veistu, Jimmy? 233 00:19:27,690 --> 00:19:31,000 [Jimmy] Væri bara síðast? Ég veit ekki. Ég er ekki alveg viss. 234 00:19:31,000 --> 00:19:39,020 >> Lagi. Hvernig væri, var einhver að fá þetta rétt á prófinu? 235 00:19:39,020 --> 00:19:41,770 Nei Allt í lagi. 236 00:19:41,770 --> 00:19:47,920 Það kemur í ljós að hér er allt sem við þurfum að gera að við viljum alla hluta uppbyggingu starfsfólk okkar 237 00:19:47,920 --> 00:19:53,290 að prenta út sem streng í skránni okkar. 238 00:19:53,290 --> 00:19:59,900 Við notum bara að skipta band staf þrjár mismunandi sinnum vegna þess að við höfum föðurnafn 239 00:19:59,900 --> 00:20:07,160 eftir kommu, þá fyrsta nafn á eftir kommu, 240 00:20:07,160 --> 00:20:12,430 og þá loks netfang sem er fylgt - sem er ekki 241 00:20:12,430 --> 00:20:15,140 mátun á skjánum mínum - en það er fylgt eftir newline staf. 242 00:20:15,140 --> 00:20:20,060 Þannig að ég ætla að skrifa það bara niður þarna. 243 00:20:20,060 --> 00:20:23,560 Og þá eftirfarandi sniði band okkar, 244 00:20:23,560 --> 00:20:27,880 við höfum bara punktbreytingar, sem við opna með punktur tákn 245 00:20:27,880 --> 00:20:31,370 sem við sáum í mengi vandamál 3. 246 00:20:31,370 --> 00:20:48,820 Við getum notað s.last, s.first og s.email 247 00:20:48,820 --> 00:20:58,990 að skipta á þeim þremur gildum inn band snið okkar. 248 00:20:58,990 --> 00:21:06,190 Svo hvernig did það fara? Skynsamleg? 249 00:21:06,190 --> 00:21:09,700 Já? Nei? Hugsanlega? Allt í lagi. 250 00:21:09,700 --> 00:21:14,180 >> Endanleg hlutur sem við gerum eftir að við höfum prentað og eftir að við höfum opnað skrá okkar: 251 00:21:14,180 --> 00:21:17,370 þegar við höfum opnað skrá, höfum við alltaf að muna eftir að loka henni. 252 00:21:17,370 --> 00:21:19,430 Því annars munum við á endanum leka minni, 253 00:21:19,430 --> 00:21:22,500 nota upp skrá descriptors. 254 00:21:22,500 --> 00:21:25,950 Svo til að loka því, sem virka ekki notum við? Daniel? 255 00:21:25,950 --> 00:21:30,120 [Daniel] fclose? >> Fclose, nákvæmlega. 256 00:21:30,120 --> 00:21:37,520 Svo síðasta hluti af þessu vandamáli var að rétt loka skrá, með fclose virka, 257 00:21:37,520 --> 00:21:40,370 sem lítur út alveg eins og þessi. 258 00:21:40,370 --> 00:21:43,880 Ekki of brjálaður. 259 00:21:43,880 --> 00:21:46,990 Cool. 260 00:21:46,990 --> 00:21:49,520 Svo er það vandamál 33 á prófinu. 261 00:21:49,520 --> 00:21:52,480 Við verðum örugglega fleiri skrá I / O koma upp. 262 00:21:52,480 --> 00:21:55,130 Við munum gera svolítið meira í fyrirlestri í dag, eða í kafla í dag, 263 00:21:55,130 --> 00:22:01,710 því það er það sem er að fara að mynda megnið af þessum komandi pset. 264 00:22:01,710 --> 00:22:05,020 Við skulum fara frá spurningakeppni á þessum tímapunkti. Já? 265 00:22:05,020 --> 00:22:10,880 >> [Charlotte]] hverju fclose (skrá) í stað fclose (staff.csv)? 266 00:22:10,880 --> 00:22:19,100 >> Ah. Vegna þess að það kemur í ljós að - svo spurningin, hver er a mikill einn, 267 00:22:19,100 --> 00:22:27,800 er hvers vegna, þegar við skrifa fclose, við erum að skrifa fclose (skrá) stjörnu breytu 268 00:22:27,800 --> 00:22:33,680 í stað þess að skrá nafn, staff.csv? Er það rétt? Já. 269 00:22:33,680 --> 00:22:39,570 Svo skulum taka a útlit. Ef ég skipti aftur til minn laptop, 270 00:22:39,570 --> 00:22:45,040 og við skulum líta á fclose virka. 271 00:22:45,040 --> 00:22:51,460 Svo lokar fclose virka læk og það tekur í bendi á lækinn, sem við viljum að loka, 272 00:22:51,460 --> 00:22:57,010 eins og til the raunverulegur skrá nafn sem við viljum loka. 273 00:22:57,010 --> 00:23:01,620 Og þetta er vegna þess að á bak við tjöldin, þegar þú hringir á fopen, 274 00:23:01,620 --> 00:23:12,020 þegar þú opnar skrá, þú ert í raun að úthluta minni til að geyma upplýsingar um skrá. 275 00:23:12,020 --> 00:23:16,380 Svo þú hefur skrá músina sem hefur upplýsingar um skrá, 276 00:23:16,380 --> 00:23:23,080 eins og það er opið, stærð hennar, þar sem þú ert nú í skránni, 277 00:23:23,080 --> 00:23:29,100 svo að þú getur gert að lesa og skrifa símtöl til viðkomandi stað í skránni. 278 00:23:29,100 --> 00:23:38,060 Þú endar loka músina í stað þess að loka skrá nafn. 279 00:23:38,060 --> 00:23:48,990 >> Já? [Daniel] Svo til að nota ráða, myndir þú segja - hvernig er það fá notandi inntak? 280 00:23:48,990 --> 00:23:53,830 Er fprintf athöfn eins GetString í þeim skilningi að það verður bara að bíða eftir notandi inntak 281 00:23:53,830 --> 00:23:57,180 og biðja þig um að slá þetta - eða bíða eftir þér að slá þetta þrennt í? 282 00:23:57,180 --> 00:24:00,480 Eða þarft þú að nota eitthvað til að hrinda í framkvæmd ráða? 283 00:24:00,480 --> 00:24:04,100 >> Já. Þannig að við erum ekki - spurningin var, hvernig fáum við notandi inntak 284 00:24:04,100 --> 00:24:09,220 í því skyni að hrinda í framkvæmd ráða? Og það sem við höfum hér er sem hringir á leigu, 285 00:24:09,220 --> 00:24:17,690 liðið í þessum starfsfólk strúktúr með öll gögn sem eru geymd í strúktúr þegar. 286 00:24:17,690 --> 00:24:22,990 Svo fprintf geta bara skrifa þessi gögn beint til the skrá. 287 00:24:22,990 --> 00:24:25,690 Það er enginn að bíða eftir notandi inntak. 288 00:24:25,690 --> 00:24:32,110 Notandinn er þegar gefið inntak með almennilega að setja það í þessa starfsfólks strúktúr. 289 00:24:32,110 --> 00:24:36,510 Og það, auðvitað, myndi brjóta ef eitthvað af þessum ábendingum var null, 290 00:24:36,510 --> 00:24:40,370 svo við að fletta aftur upp hér og við lítum á strúktúr okkar. 291 00:24:40,370 --> 00:24:43,640 Við höfum band síðast, band fyrst, band tölvupósti. 292 00:24:43,640 --> 00:24:48,530 Við vitum nú að allir af þeim raunverulega, undir hetta, eru char breytur *. 293 00:24:48,530 --> 00:24:53,470 Það mega eða mega ekki vera að benda á að null. 294 00:24:53,470 --> 00:24:55,800 Þau kunna að benda til minni á hrúga, 295 00:24:55,800 --> 00:24:59,650 kannski minni á mánudaginn. 296 00:24:59,650 --> 00:25:04,580 Við í raun ekki vita, en ef einhver af þessum ábendingum er null eða ógilt, 297 00:25:04,580 --> 00:25:08,120 að það verður örugglega hrun leigja virka okkar. 298 00:25:08,120 --> 00:25:11,050 Það var eitthvað sem var eins konar utan gildissviðs prófið. 299 00:25:11,050 --> 00:25:16,440 Við erum ekki að hafa áhyggjur óður í það. 300 00:25:16,440 --> 00:25:22,170 Frábært. Allt í lagi. Svo áhrifamikill á frá spurningakeppni. 301 00:25:22,170 --> 00:25:25,760 >> Við skulum loka þessa dagana, og við erum að fara að horfa á pset 4. 302 00:25:25,760 --> 00:25:34,700 Svo ef þið líta á pset sérstakur, þegar þú getur fengið aðgang að henni, cs50.net/quizzes, 303 00:25:34,700 --> 00:25:42,730 við erum að fara að fara í gegnum nokkrar af þeim kafla vandamál í dag. 304 00:25:42,730 --> 00:25:52,240 Ég er að fletta niður - section spurningum hefst þriðja síðu á pset sérstakur. 305 00:25:52,240 --> 00:25:57,800 Og fyrsti hluti biður þig að fara og horfa á stutt á Áframsendi og rör. 306 00:25:57,800 --> 00:26:02,820 Hver var svona flott stutt, sýnir þér nýja, kaldur stjórn lína bragðarefur sem þú getur notað. 307 00:26:02,820 --> 00:26:06,050 Og svo höfum við fengið nokkrar spurningar fyrir þig eins og heilbrigður. 308 00:26:06,050 --> 00:26:10,860 Þessi fyrsta spurning um læki, sem printf skrifar sjálfgefið, 309 00:26:10,860 --> 00:26:15,920 við snert konar á réttlátur a lítill hluti í smá stund síðan. 310 00:26:15,920 --> 00:26:22,380 Þetta fprintf að við vorum bara að ræða tekur á * Skrá Stream og rök hennar. 311 00:26:22,380 --> 00:26:26,580 fclose tekur í * skrá straumi eins og heilbrigður, 312 00:26:26,580 --> 00:26:32,660 og skilagildi fopen gefur þér * Skrá Stream eins og heilbrigður. 313 00:26:32,660 --> 00:26:36,060 Ástæðan sem við höfum ekki séð þá áður þegar við höfum fjallað printf 314 00:26:36,060 --> 00:26:39,450 er vegna printf hefur sjálfgefið á. 315 00:26:39,450 --> 00:26:41,810 Og sjálfgefið straum sem það skrifar 316 00:26:41,810 --> 00:26:45,190 þú munt finna út óður í stuttu máli. 317 00:26:45,190 --> 00:26:50,080 Svo ákveðið að taka a líta á það. 318 00:26:50,080 --> 00:26:53,010 >> Í kafla í dag, við erum að fara að tala svolítið um gdb, 319 00:26:53,010 --> 00:26:57,720 þar sem fleiri þekki þú ert með það, því meira starf sem þú færð með það, 320 00:26:57,720 --> 00:27:01,390 því betra fær þú verður að raunverulega veiði niður galla í eigin kóðann þinn. 321 00:27:01,390 --> 00:27:05,540 Þetta hraða ferli kembiforrit upp ógurlega. 322 00:27:05,540 --> 00:27:09,230 Svo með því að nota printf, í hvert skipti sem þú gerir það sem þú ert að laun númerið þitt, 323 00:27:09,230 --> 00:27:13,000 þú ert að keyra það aftur, stundum þarf að færa printf hringja í kring, 324 00:27:13,000 --> 00:27:17,100 athugasemd út kóða, það tekur bara smá stund. 325 00:27:17,100 --> 00:27:20,850 Markmið okkar er að reyna að sannfæra þig um að við GDB, getur þú í raun 326 00:27:20,850 --> 00:27:26,810 printf eitthvað á hverjum stað í kóðann þinn og þú ert aldrei að laun það. 327 00:27:26,810 --> 00:27:35,120 Þú þarft aldrei að byrja og halda giska hvar printf næst. 328 00:27:35,120 --> 00:27:40,910 The fyrstur hlutur til gera er að afrita þessa línu og fá kafla númer burt af vefnum. 329 00:27:40,910 --> 00:27:47,530 Ég afrita þessa línu af kóða sem segir, "wget ​​http://cdn.cs50.net". 330 00:27:47,530 --> 00:27:49,510 Ég ætla að herma eftir. 331 00:27:49,510 --> 00:27:55,950 Ég ætla að fara yfir til tæki minn, zoom út svo þú getur séð hvað ég er að gera, 332 00:27:55,950 --> 00:28:01,890 líma það þar, og þegar ég lenti inn, þetta wget skipun bókstaflega er vefur fá. 333 00:28:01,890 --> 00:28:06,210 Það er að fara að rífa niður þessa skrá burt af Netinu, 334 00:28:06,210 --> 00:28:11,790 og það er að fara að vista það í núverandi möppu. 335 00:28:11,790 --> 00:28:21,630 Nú ef ég lista núverandi möppu minn er hægt að sjá að ég hef fengið þetta section5.zip skrá rétt þar. 336 00:28:21,630 --> 00:28:25,260 The leiðin til að takast á við þessi strákur er að renna niður hana, 337 00:28:25,260 --> 00:28:27,650 sem þú getur gert í the stjórn lína, eins og þetta. 338 00:28:27,650 --> 00:28:31,880 Section5.zip. 339 00:28:31,880 --> 00:28:36,980 Það mun renna niður hana, búa til möppu fyrir mig, 340 00:28:36,980 --> 00:28:40,410 blása allt innihald, setja þá í þar. 341 00:28:40,410 --> 00:28:47,410 Svo nú get ég farið inn í hluta minn 5 möppu með CD stjórn. 342 00:28:47,410 --> 00:28:58,310 Hreinsa skjáinn með skýr. Svo hreinsa skjáinn. 343 00:28:58,310 --> 00:29:02,280 Nú hef ég fengið gott hreint flugstöðinni til að takast á við. 344 00:29:02,280 --> 00:29:06,200 >> Nú ef ég lista allar skrár sem ég sé í þessari skrá, 345 00:29:06,200 --> 00:29:12,270 þú sérð að ég hef fengið fjóra skrár: buggy1, buggy2, buggy3 og buggy4. 346 00:29:12,270 --> 00:29:16,180 Ég hef líka fengið samsvarandi. C skrá. 347 00:29:16,180 --> 00:29:20,400 Við erum ekki að fara að horfa á. C skrá fyrir núna. 348 00:29:20,400 --> 00:29:24,140 Í staðinn erum við að fara að nota þá þegar við opna gdb. 349 00:29:24,140 --> 00:29:28,220 Við höfum haldið þeim í kring þannig að við höfum aðgang að í raun uppspretta merkjamál þegar við erum að nota GDB, 350 00:29:28,220 --> 00:29:32,740 en markmið þessa hluta kafla er að tinker kring með gdb 351 00:29:32,740 --> 00:29:40,370 og sjá hvernig við getum notað það til að finna út hvað er að gerast rangt við hvert af þessum fjórum buggy programs. 352 00:29:40,370 --> 00:29:43,380 Þannig að við erum bara að fara í kring í herberginu mjög fljótt, 353 00:29:43,380 --> 00:29:47,000 og ég ætla að biðja einhvern til að keyra einn af buggy forritum, 354 00:29:47,000 --> 00:29:54,730 og þá munum við fara sem hópur með gdb, og við munum sjá hvað við getum gert til að laga þetta forrit, 355 00:29:54,730 --> 00:29:58,460 eða að minnsta kosti að finna hvað er að gerast rangt í hvert þeirra. 356 00:29:58,460 --> 00:30:04,760 Við skulum byrja hérna með Daníel. Ætlarðu að hlaupa buggy1? Við skulum sjá hvað gerist. 357 00:30:04,760 --> 00:30:09,470 [Daniel] Það segir það er forrit kenna. >> Já. Einmitt. 358 00:30:09,470 --> 00:30:12,460 Svo ef ég keyrt buggy1, fæ ég seg kenna. 359 00:30:12,460 --> 00:30:16,210 Á þessum tímapunkti, ég gæti farið og opna buggy1.c, 360 00:30:16,210 --> 00:30:19,450 reyna að reikna út hvað er að gerast rangt, 361 00:30:19,450 --> 00:30:22,000 en einn af the obnoxious hluti um þessa seg kenna villa 362 00:30:22,000 --> 00:30:27,610 er að það er ekki að segja þér á hvaða línu af the program það í raun fór úrskeiðis og braut. 363 00:30:27,610 --> 00:30:29,880 Þú hefur konar til að líta á kóðann 364 00:30:29,880 --> 00:30:33,990 og reikna út með ágiskun og stöðva eða printf til að sjá hvað er að fara úrskeiðis. 365 00:30:33,990 --> 00:30:37,840 Einn af the kælir hlutur óður í gdb er að það er mjög, mjög auðvelt 366 00:30:37,840 --> 00:30:42,170 að reikna út línu þar sem program hrun. 367 00:30:42,170 --> 00:30:46,160 Það er alveg þess virði að nota það, jafnvel þótt aðeins fyrir það. 368 00:30:46,160 --> 00:30:56,190 Svo til að ræsa upp GDB, tegund I gdb, og þá skal ég gefa honum leið til executable sem mig langar til að hlaupa. 369 00:30:56,190 --> 00:31:01,960 Hér er ég að slá gdb ./buggy1. 370 00:31:01,960 --> 00:31:06,600 Hit inn. Gefur mér allar þessar upplýsingar um höfundarrétt, 371 00:31:06,600 --> 00:31:13,000 og niður hér þú munt sjá þessa línu sem segir "Reading tákn í / home / 372 00:31:13,000 --> 00:31:17,680 jharvard/section5/buggy1. " 373 00:31:17,680 --> 00:31:22,060 Og ef allt gengur vel, munt þú sjá að það prenta út skilaboð sem lítur svona út. 374 00:31:22,060 --> 00:31:25,500 Það verður að lesa tákn, verður það að segja "ég er að lesa tákn úr skrá executable þínum" 375 00:31:25,500 --> 00:31:29,900 og þá mun það hafa þetta "gert" skilaboð hérna. 376 00:31:29,900 --> 00:31:35,410 Ef þú sérð eitthvað annað afbrigði af þessu, eða þú sérð að það gat ekki fundið tákn 377 00:31:35,410 --> 00:31:41,460 eða eitthvað svoleiðis, hvað það þýðir er að þú bara ekki saman executable þína almennilega. 378 00:31:41,460 --> 00:31:49,980 Þegar við saman forrit til að nota með GDB, verðum við að nota þessi sérstaka g fána, 379 00:31:49,980 --> 00:31:54,540 og það er gert með því að vanræksla ef þú saman forrit, bara með því að slá gera 380 00:31:54,540 --> 00:31:59,320 eða gera gallaðir eða að batna, allir af þeim. 381 00:31:59,320 --> 00:32:07,800 En ef þú ert að setja saman handvirkt með Clang, þá þarftu að fara í og ​​eru að-g fána. 382 00:32:07,800 --> 00:32:10,310 >> Á þessum tímapunkti, er að við höfum gdb hvetja okkar, 383 00:32:10,310 --> 00:32:12,310 það er frekar einfalt að hlaupa the program. 384 00:32:12,310 --> 00:32:19,740 Við getum annað hvort tegund hlaupa, eða við getum bara slegið r. 385 00:32:19,740 --> 00:32:22,820 Flest gdb skipanir geta verið stytt. 386 00:32:22,820 --> 00:32:25,940 Yfirleitt bara einn eða nokkra stafi, sem er nokkuð gott. 387 00:32:25,940 --> 00:32:30,980 Svo Saad, ef þú slærð r og ýttu á Enter, hvað gerist? 388 00:32:30,980 --> 00:32:39,390 [Saad] Ég fékk SIGSEGV, skiptingu og átölulaust, og svo allt þetta gobbledygook. 389 00:32:39,390 --> 00:32:43,650 >> Já. 390 00:32:43,650 --> 00:32:47,990 Eins og við erum að sjá á skjánum núna, og eins og Saad sagði 391 00:32:47,990 --> 00:32:53,430 þegar við tegund hlaupa eða R og ýttu á Enter, fá við enn sama seg kenna. 392 00:32:53,430 --> 00:32:55,830 Svo nota gdb ekki leysa vandamál okkar. 393 00:32:55,830 --> 00:32:59,120 En það gefur okkur smá gobbledygook, og það kemur í ljós að þetta gobbledygook 394 00:32:59,120 --> 00:33:03,080 í raun segir okkur þar sem það er að gerast. 395 00:33:03,080 --> 00:33:10,680 Til að flokka þetta svolítið, þetta fyrsta hluti er hlutverk sem allt er að fara úrskeiðis. 396 00:33:10,680 --> 00:33:20,270 Það er þetta __ strcmp_sse4_2, og það segir okkur að það er að gerast í þessari skrá 397 00:33:20,270 --> 00:33:29,450 kallað sysdeps/i386, allt þetta, aftur, eins konar óreiðu - en lína 254. 398 00:33:29,450 --> 00:33:31,670 Það er góður af harður til flokka. Venjulega þegar þú sérð efni eins og þetta, 399 00:33:31,670 --> 00:33:38,770 sem þýðir að það er að seg faulting í einu af kerfi bókasafna. 400 00:33:38,770 --> 00:33:43,220 Svo eitthvað að gera með strcmp. Þið hafið séð strcmp áður. 401 00:33:43,220 --> 00:33:52,730 Ekki of brjálaður, en þýðir þetta að strcmp er brotinn eða að það er vandamál með strcmp? 402 00:33:52,730 --> 00:33:57,110 Hvað finnst þér, Alexander? 403 00:33:57,110 --> 00:34:04,890 [Alexander] Er það - er 254 línan? Og - ekki tvöfaldur, en það er ekki loft þeirra, 404 00:34:04,890 --> 00:34:10,590 og þá er það annað mál fyrir hverja aðgerð. Er það 254 á þeirri starfsemi, eða -? 405 00:34:10,590 --> 00:34:21,460 >> Það er lína 254. Það lítur út eins og í þessu. S skrá, svo það er samkoma kóða sennilega. 406 00:34:21,460 --> 00:34:25,949 >> En, held ég meira áríðandi hlutur er, vegna þess að við höfum fengið seg kenna, 407 00:34:25,949 --> 00:34:29,960 og það lítur út eins og það kemur frá strcmp virka, 408 00:34:29,960 --> 00:34:38,030 hefur þetta í sér, þá er það strcmp brotinn? 409 00:34:38,030 --> 00:34:42,290 Það ætti ekki, vonandi. Svo bara vegna þess að þú ert með skiptingu kenna 410 00:34:42,290 --> 00:34:49,480 í einu af kerfi virka, venjulega sem þýðir að þú bara hefur ekki kallað það rétt. 411 00:34:49,480 --> 00:34:52,440 The fljótlegasta hlutur að gera til að finna út hvað er raunverulega að gerast 412 00:34:52,440 --> 00:34:55,500 þegar þú sérð eitthvað brjálaður eins og þetta, þegar þú sérð seg kenna, 413 00:34:55,500 --> 00:34:59,800 sérstaklega ef þú ert með forrit sem er að nota meira en bara helstu, 414 00:34:59,800 --> 00:35:03,570 er að nota rakningarskýrslu. 415 00:35:03,570 --> 00:35:13,080 Ég skammstafa rakningarskýrslu því að skrifa BT, öfugt við fullt rakningarskýrslu orð. 416 00:35:13,080 --> 00:35:16,510 En Charlotte, hvað gerist þegar þú skrifar BT og ýttu á Enter? 417 00:35:16,510 --> 00:35:23,200 [Charlotte] Það sýnir mér tvær línur, línu 0 og Lína 1. 418 00:35:23,200 --> 00:35:26,150 >> Já. Svo línu 0 og línu 1. 419 00:35:26,150 --> 00:35:34,560 Þetta eru í raun rammar stafla sem voru nú í leik þegar forritið hrundi. 420 00:35:34,560 --> 00:35:42,230 Byrjun frá hæstur ramma, ramma 0, og fara til the botn-mest, sem er rammi 1. 421 00:35:42,230 --> 00:35:45,140 Hæstur ramma okkar er strcmp ramma. 422 00:35:45,140 --> 00:35:50,080 Þú getur hugsað þetta eins og svipað við þessi vandamál sem við vorum bara að gera á prófi með ábendingum, 423 00:35:50,080 --> 00:35:54,890 þar sem við höfðum skipti stafla ramma ofan á helstu stafla ramma, 424 00:35:54,890 --> 00:35:59,700 og við höfðum breytur sem skipti var með ofan á breytum sem helsta var að nota. 425 00:35:59,700 --> 00:36:08,440 Hér hrun okkar gerðist í strcmp virka okkar, sem hefur verið kölluð af meginvirkni okkar, 426 00:36:08,440 --> 00:36:14,370 og aftur keyrslu gefur okkur ekki aðeins aðgerðir sem það tókst ekki, 427 00:36:14,370 --> 00:36:16,440 en það er líka að segja okkur hvar allt var kallaður frá. 428 00:36:16,440 --> 00:36:18,830 Svo ef ég fletta yfir smá meira til hægri, 429 00:36:18,830 --> 00:36:26,110 getum við séð að já, við vorum á línu 254 þessa strcmp-sse4.s skrá. 430 00:36:26,110 --> 00:36:32,540 En kalla var fram á buggy1.c, Line 6. 431 00:36:32,540 --> 00:36:35,960 Svo þýðir að við getum gert - er að við getum bara farið kíkja og sjá hvað var að gerast 432 00:36:35,960 --> 00:36:39,930 á buggy1.c, Line 6. 433 00:36:39,930 --> 00:36:43,780 Again, there ert a par leiðir til að gera þetta. Eitt er að hætta út af gdb 434 00:36:43,780 --> 00:36:49,460 eða hafa númerið þitt opnast í öðrum glugga og kross tilvísun. 435 00:36:49,460 --> 00:36:54,740 Það, í sjálfu sér, er nokkuð vel því nú ef þú ert á skrifstofutíma 436 00:36:54,740 --> 00:36:57,220 og þú hefur got a seg bilunina og TF þín er spá í hvar allt var að brjóta, 437 00:36:57,220 --> 00:36:59,710 þú getur bara sagt, "Ó, línu 6. Ég veit ekki hvað er að gerast, 438 00:36:59,710 --> 00:37:03,670 en eitthvað um línu 6 veldur áætlun mín að brjóta. " 439 00:37:03,670 --> 00:37:10,430 Hin leiðin til að gera það er að þú getur notað þessa skipun sem kallast lista í GDB. 440 00:37:10,430 --> 00:37:13,650 Þú getur einnig skammstafa það með l. 441 00:37:13,650 --> 00:37:18,910 Svo ef við högg l, hvað fáum við hér? 442 00:37:18,910 --> 00:37:21,160 Við fá a heild búnt af undarlegt efni. 443 00:37:21,160 --> 00:37:26,030 Þetta er í raun samkoma kóða 444 00:37:26,030 --> 00:37:29,860 sem er í strcmp_sse4_2. 445 00:37:29,860 --> 00:37:32,440 Þetta lítur svona angurvær, 446 00:37:32,440 --> 00:37:36,520 og ástæða þess að við erum að fá þetta er vegna þess að núna, 447 00:37:36,520 --> 00:37:40,160 GDB hefur okkur í ramma 0. 448 00:37:40,160 --> 00:37:43,070 >> Svo hvenær við skoðum breytur, hvenær við líta á frumkóða, 449 00:37:43,070 --> 00:37:50,530 við erum að horfa á kóða sem varðar við stafla ramma sem við erum nú inn 450 00:37:50,530 --> 00:37:53,200 Svo í röð til að fá eitthvað þroskandi, verðum við að 451 00:37:53,200 --> 00:37:57,070 færa til stafla ramma sem gerir meira vit. 452 00:37:57,070 --> 00:38:00,180 Í þessu tilviki er aðal stafla ramma myndi gera svolítið meira vit, 453 00:38:00,180 --> 00:38:02,680 vegna þess að það var í raun númerið sem við skrifuðum. 454 00:38:02,680 --> 00:38:05,330 Ekki strcmp kóða. 455 00:38:05,330 --> 00:38:08,650 Leiðin sem þú getur skipt á milli ramma, í þessu tilfelli, vegna þess að við höfum tvö, 456 00:38:08,650 --> 00:38:10,430 við höfum 0 og 1, 457 00:38:10,430 --> 00:38:13,650 þú gerir það með upp og niður stjórn. 458 00:38:13,650 --> 00:38:18,480 Ef ég flyt upp einn ramma, 459 00:38:18,480 --> 00:38:21,770 núna er ég í helstu stafla ramma. 460 00:38:21,770 --> 00:38:24,330 Ég get að fara niður til að fara aftur þar sem ég var, 461 00:38:24,330 --> 00:38:32,830 fara aftur, fara aftur, og fara upp aftur. 462 00:38:32,830 --> 00:38:39,750 Ef þú gerir alltaf program í GDB, þú færð hrun, færðu rakningarskýrslu, 463 00:38:39,750 --> 00:38:42,380 og þú sérð að það er í sumum skrá sem þú veist ekki hvað er að gerast. 464 00:38:42,380 --> 00:38:45,460 Þú ert að reyna lista, kóðinn lítur ekki þekkja þig, 465 00:38:45,460 --> 00:38:48,150 taka a líta á ramma þína og reikna út hvar þú ert. 466 00:38:48,150 --> 00:38:51,010 Þú ert líklega á röngum stafla ramma. 467 00:38:51,010 --> 00:38:58,760 Eða að minnsta kosti þú ert í stafla ramma sem er ekki einn sem þú getur raunverulega kemba. 468 00:38:58,760 --> 00:39:03,110 Nú þegar við erum í viðeigandi stafla ramma, erum við í helstu, 469 00:39:03,110 --> 00:39:08,100 nú getum við notað lista stjórn til að reikna út hvað línan var. 470 00:39:08,100 --> 00:39:13,590 Og þú getur séð það, það prenta það fyrir okkur hérna. 471 00:39:13,590 --> 00:39:19,470 En við getum högg skrá allt það sama, og listi gefur okkur þessa fallegu útprentun 472 00:39:19,470 --> 00:39:23,920 á raunverulegri kóða sem er að gerast hér. 473 00:39:23,920 --> 00:39:26,420 >> Einkum getum við líta á línu 6.. 474 00:39:26,420 --> 00:39:29,330 Við sjáum hvað er að gerast hér. 475 00:39:29,330 --> 00:39:31,250 Og það lítur út eins og við séum að gera band samanburður 476 00:39:31,250 --> 00:39:41,050 milli band "CS50 björg" og argv [1]. 477 00:39:41,050 --> 00:39:45,700 Eitthvað um þetta var hrun. 478 00:39:45,700 --> 00:39:54,120 Svo Missy, hefur þú einhverjar skoðanir á hvað gæti verið að gerast hér? 479 00:39:54,120 --> 00:39:59,400 [Missy] Ég veit ekki af hverju það er hrun. >> Þú veist ekki af hverju það er hrun? 480 00:39:59,400 --> 00:40:02,700 Jimmy, einhverjar hugsanir? 481 00:40:02,700 --> 00:40:06,240 [Jimmy] Ég er ekki alveg viss, en síðast þegar við notuðum band bera, 482 00:40:06,240 --> 00:40:10,260 eða strcmp, við höfðum eins þremur mismunandi tilvikum undir það. 483 00:40:10,260 --> 00:40:12,800 Við vildum ekki hafa ==, ég held ekki, rétt í því fyrstu línu. 484 00:40:12,800 --> 00:40:16,700 Í stað þess að það var skipt í þrjá, og einn var == 0, 485 00:40:16,700 --> 00:40:19,910 einn var <0, held ég, og einn var> 0. 486 00:40:19,910 --> 00:40:22,590 Svo kannski eitthvað eins og þessi? >> Já. Svo er það þetta mál 487 00:40:22,590 --> 00:40:27,200 á erum við að gera samanburð rétt? 488 00:40:27,200 --> 00:40:31,660 Stella? Allar hugsanir? 489 00:40:31,660 --> 00:40:38,110 [Stella] Ég er ekki viss. >> Ekki viss. Daniel? Hugsanir? Allt í lagi. 490 00:40:38,110 --> 00:40:44,770 Það kemur í ljós hvað er að gerast hérna er þegar við hljóp forritið 491 00:40:44,770 --> 00:40:48,370 og fengum við seg kenna, þegar þú hleypur forritið í fyrsta skipti, Daníel, 492 00:40:48,370 --> 00:40:50,800 gerðir þú gefa það allir stjórn lína rifrildi? 493 00:40:50,800 --> 00:40:58,420 [Daniel] nr >> Nei Í því tilfelli, það er gildi argv [1]? 494 00:40:58,420 --> 00:41:00,920 >> Það er ekkert gildi. >> Einmitt. 495 00:41:00,920 --> 00:41:06,120 Jæja, það er ekki viðeigandi band gildi. 496 00:41:06,120 --> 00:41:10,780 En það er einhver gildi. Hvað er gildi sem fær geymd þar? 497 00:41:10,780 --> 00:41:15,130 >> A sorp gildi? >> Það er annaðhvort sorp gildi eða, í þessu tilfelli, 498 00:41:15,130 --> 00:41:19,930 enda argv array er alltaf hætt við null. 499 00:41:19,930 --> 00:41:26,050 Svo hvað raunverulega got geymdar í það er null. 500 00:41:26,050 --> 00:41:30,810 Hin leiðin til að leysa þetta, frekar en að hugsa það í gegnum, 501 00:41:30,810 --> 00:41:33,420 er að reyna að prenta það út. 502 00:41:33,420 --> 00:41:35,880 Þetta er þar sem ég var að segja að nota gdb er mikill, 503 00:41:35,880 --> 00:41:40,640 vegna þess að þú getur prentað út allar breytur, öll þau gildi sem þú vilt 504 00:41:40,640 --> 00:41:43,230 nota þessa vel-spjátrungur p stjórn. 505 00:41:43,230 --> 00:41:48,520 Svo ef ég tegund p og svo ég tegund gildi breytu eða heiti breytu, 506 00:41:48,520 --> 00:41:55,320 segja, argc, sé ég að argc er 1. 507 00:41:55,320 --> 00:42:01,830 Ef ég vil prenta út argv [0], get ég gert það bara svona. 508 00:42:01,830 --> 00:42:04,840 Og eins og við sáum, argv [0] er alltaf nafn program, 509 00:42:04,840 --> 00:42:06,910 alltaf nafn executable. 510 00:42:06,910 --> 00:42:09,740 Hér sérðu að það er got the fullur gangstígur nafn. 511 00:42:09,740 --> 00:42:15,920 Ég get líka prentað út argv [1] og sjá hvað gerist. 512 00:42:15,920 --> 00:42:20,890 >> Hér fengum við þessa tegund af dularfulla gildi. 513 00:42:20,890 --> 00:42:23,890 Við fengum þennan 0x0. 514 00:42:23,890 --> 00:42:27,850 Mundu að í upphafi tíma þegar við ræddum um sextánskur tölur? 515 00:42:27,850 --> 00:42:34,680 Eða þessi litla spurning í lok pset 0 um hvernig á að tákna 50 í álög? 516 00:42:34,680 --> 00:42:39,410 Leiðin sem við skrifa álög tölur í CS, bara ekki rugla okkur 517 00:42:39,410 --> 00:42:46,080 við aukastaf tölur, er við forskeyti alltaf þá með 0x. 518 00:42:46,080 --> 00:42:51,420 Svo þetta 0x forskeyti alltaf átt bara túlka eftirfarandi númer sem sextánskur númer, 519 00:42:51,420 --> 00:42:57,400 ekki sem streng, ekki sem heiltala, ekki eins og a tvöfaldur númer. 520 00:42:57,400 --> 00:43:02,820 Þar sem fjöldi 5-0 er gild tala í sextánskur. 521 00:43:02,820 --> 00:43:06,240 Og það er númer í tugabrot, 50. 522 00:43:06,240 --> 00:43:10,050 Svo er þetta bara hvernig við disambiguate. 523 00:43:10,050 --> 00:43:14,860 Svo 0x0 þýðir sextánskur 0, sem er einnig aukastaf 0, tvöfaldur 0. 524 00:43:14,860 --> 00:43:17,030 Það er bara gildi 0. 525 00:43:17,030 --> 00:43:22,630 Það kemur í ljós að þetta er það null er reyndar í minni. 526 00:43:22,630 --> 00:43:25,940 Null er bara 0. 527 00:43:25,940 --> 00:43:37,010 Hér er þáttur geymd við argv [1] er null. 528 00:43:37,010 --> 00:43:45,220 Þannig að við erum að reyna að bera saman "CS50 ROCKS" okkar band í núll band. 529 00:43:45,220 --> 00:43:48,130 Svo dereferencing null, að reyna að opna það á núll, 530 00:43:48,130 --> 00:43:55,050 þeir eru yfirleitt að fara að valda einhvers konar sök skiptingu eða öðrum slæmum hlutum að gerast. 531 00:43:55,050 --> 00:43:59,350 Og það kemur í ljós að strcmp ekki athuga að sjá 532 00:43:59,350 --> 00:44:04,340 hvort þú hefur staðist í verði sem er null. 533 00:44:04,340 --> 00:44:06,370 Fremur, það fer bara á undan, reynir að gera hlutur hennar, 534 00:44:06,370 --> 00:44:14,640 og ef það seg galla, seg það galla, og það er þitt vandamál. Þú þarft að fara laga það. 535 00:44:14,640 --> 00:44:19,730 Raunverulega fljótt, hvernig gætum við laga þetta vandamál? Charlotte? 536 00:44:19,730 --> 00:44:23,540 [Charlotte] Þú getur athugað með hvort. 537 00:44:23,540 --> 00:44:32,240 Svo ef argv [1] er núll, == 0, síðan aftur 1 eða eitthvað [óskiljanlegur]. 538 00:44:32,240 --> 00:44:34,590 >> Já. Svo er það ein góð leið til að gera það, eins og við er að athuga hvort, 539 00:44:34,590 --> 00:44:39,230 virði við erum að fara að fara í strcmp, argv [1], er hann null? 540 00:44:39,230 --> 00:44:45,830 Ef null það, þá getum við sagt í lagi, hætti. 541 00:44:45,830 --> 00:44:49,450 >> A fleiri algeng leið til að gera þetta er að nota argc gildi. 542 00:44:49,450 --> 00:44:52,040 Þú getur séð hérna í byrjun Main, 543 00:44:52,040 --> 00:44:58,040 við sleppt að fyrsta próf sem við gerum venjulega þegar við notum stjórn lína rifrildi, 544 00:44:58,040 --> 00:45:05,240 sem er að prófa hvort ekki argc gildi okkar er það sem við gerum ráð fyrir. 545 00:45:05,240 --> 00:45:10,290 Í þessu tilfelli erum við að búast við að minnsta kosti tvær röksemdir, 546 00:45:10,290 --> 00:45:13,660 nafn af the program og eitt annað. 547 00:45:13,660 --> 00:45:17,140 Þar sem við erum að nota annað rök hérna. 548 00:45:17,140 --> 00:45:21,350 Svo hafa sumir tegund af próf fyrirfram, áður strcmp símtali okkar 549 00:45:21,350 --> 00:45:37,390 að próf hvort argv er að minnsta kosti 2, myndi líka gera það sama tegund af hlutur. 550 00:45:37,390 --> 00:45:40,620 Við sjáum hvort það virkar með því að keyra forritið aftur. 551 00:45:40,620 --> 00:45:45,610 Þú getur alltaf endurræsa program innan gdb, sem er mjög gott. 552 00:45:45,610 --> 00:45:49,310 Þú getur keyrt, og þegar þú fara í rifrildi á forritinu, 553 00:45:49,310 --> 00:45:53,060 þú framhjá þeim þegar þú kallar hlaupa, ekki þegar þú stígvél upp gdb. 554 00:45:53,060 --> 00:45:57,120 Þannig að þú getur haldið skírskota program með mismunandi rökum hverju sinni. 555 00:45:57,120 --> 00:46:08,080 Svo hlaupa, eða aftur, ég get slegið r, og við skulum sjá hvað gerist ef við tegund "halló". 556 00:46:08,080 --> 00:46:11,140 Það verður alltaf að spyrja þig hvort þú vilt byrja það frá byrjun aftur. 557 00:46:11,140 --> 00:46:17,490 Venjulega, þú vilja til byrjun það frá byrjun aftur. 558 00:46:17,490 --> 00:46:25,010 Og á þessum tímapunkti, það endurræsa það aftur prenta það út 559 00:46:25,010 --> 00:46:28,920 Forritið sem við erum að keyra, buggy1 með rök hello, 560 00:46:28,920 --> 00:46:32,720 og það prentar Þessi staðall út, það segir, "Þú færð D," sorglegt andlit. 561 00:46:32,720 --> 00:46:37,610 En við ekki seg sök. Það sagði að ferli lauk venjulega. 562 00:46:37,610 --> 00:46:39,900 Svo lítur það mjög gott. 563 00:46:39,900 --> 00:46:43,050 Ekkert meira seg kenna, gerði við það síðasta, 564 00:46:43,050 --> 00:46:48,190 svo það lítur út eins og þessi var örugglega seg kenna galla sem við vorum að fá. 565 00:46:48,190 --> 00:46:51,540 Því miður segir það okkur að við erum að fá D. 566 00:46:51,540 --> 00:46:54,090 >> Við getum farið til baka og líta á kóðann og sjá hvað var að gerast þarna 567 00:46:54,090 --> 00:46:57,980 að reikna út hvað var - hvers vegna það var að segja okkur að við fengum D. 568 00:46:57,980 --> 00:47:03,690 Við skulum sjá, hér var þetta að segja printf að þú got a D. 569 00:47:03,690 --> 00:47:08,540 Ef við tegund lista, eins og þú halda að slá lista, heldur iterating niður í gegnum forrit, 570 00:47:08,540 --> 00:47:10,940 svo það mun sýna þér fyrstu línur af forritinu. 571 00:47:10,940 --> 00:47:15,450 Þá munum sýna þér næsta nokkrar línur, og næsta klumpur og næsta klumpur. 572 00:47:15,450 --> 00:47:18,240 Og það mun halda áfram að reyna að fara niður. 573 00:47:18,240 --> 00:47:21,180 Og nú munum við fá að "lína númer 16 er út af svæðinu." 574 00:47:21,180 --> 00:47:23,940 Vegna þess að það hefur bara 15 línur. 575 00:47:23,940 --> 00:47:30,310 Ef þú færð að þessum tímapunkti og þinn að spá, "Hvað á ég að gera?" þú getur notað hjálpa stjórn. 576 00:47:30,310 --> 00:47:34,340 Hjálp og þá gefa það nafn á stjórn. 577 00:47:34,340 --> 00:47:36,460 Og þú sérð GDB gefur okkur alla þessa tegund af efni. 578 00:47:36,460 --> 00:47:43,870 Þar segir: "Með engin rök, listi tíu fleiri línur eftir eða um fyrri skráningu. 579 00:47:43,870 --> 00:47:47,920 Listi - listi yfir tíu línur áður - " 580 00:47:47,920 --> 00:47:52,960 Svo skulum reyna að nota lista mínus. 581 00:47:52,960 --> 00:47:57,000 Og þessi listi er 10 línur fyrri, þú getur spilað í kring með lista svolítið. 582 00:47:57,000 --> 00:48:02,330 Þú getur gert lista, lista -, getur þú jafnvel gefa lista númer, eins og listi 8, 583 00:48:02,330 --> 00:48:07,500 og það mun lista 10 línur um línu 8. 584 00:48:07,500 --> 00:48:10,290 Og þú getur séð hvað er að gerast hér er að þú hafir fengið einföld ef annað. 585 00:48:10,290 --> 00:48:13,980 Ef þú slærð inn í CS50 steina, prentar það út "Þú færð A." 586 00:48:13,980 --> 00:48:16,530 Annars prentar það út "Þú færð D." 587 00:48:16,530 --> 00:48:23,770 Bummer bænum. Allt í lagi. Já? 588 00:48:23,770 --> 00:48:26,730 >> [Daniel] Svo þegar ég reyndi að gera CS50 steina án gæsalappa, 589 00:48:26,730 --> 00:48:29,290 það segir "Þú færð D." 590 00:48:29,290 --> 00:48:32,560 Ég þurfti að vitna til að fá það til að vinna, hvers vegna er það? 591 00:48:32,560 --> 00:48:38,490 >> Já. Það kemur í ljós að þegar - þetta er annar skemmtilegur lítill lostæti - 592 00:48:38,490 --> 00:48:47,900 þegar þú keyrir forritið, ef við keyra það og við slá í CS50 steina, 593 00:48:47,900 --> 00:48:50,800 bara eins og Daníel var að segja að hann gerði það, og þú högg inn, 594 00:48:50,800 --> 00:48:52,870 það segir samt við að fá D. 595 00:48:52,870 --> 00:48:55,580 Og spurningin er, af hverju er þetta? 596 00:48:55,580 --> 00:49:02,120 Og það kemur í ljós að bæði flugstöðinni okkar og GDB flokka þetta sem tvö aðskilin rök. 597 00:49:02,120 --> 00:49:04,800 Því þegar það er pláss, sem er gefið í skyn sem 598 00:49:04,800 --> 00:49:08,730 fyrsta rifrildi endaði, næsta rifrildi er um það bil að hefjast. 599 00:49:08,730 --> 00:49:13,260 Leiðin til að sameina þær í tvennt, eða miður, í eitt rifrildi, 600 00:49:13,260 --> 00:49:18,510 er að nota tilvitnanir. 601 00:49:18,510 --> 00:49:29,560 Svo nú, ef við setjum það í gæsalöppum og keyra það aftur, fáum við að A. 602 00:49:29,560 --> 00:49:38,780 Svo bara til að ágrip eru ekki vitna, CS50 og klettar flokka sem tveimur aðskildum rök. 603 00:49:38,780 --> 00:49:45,320 Með tilvitnunum, það er flokka sem ein rök með öllu. 604 00:49:45,320 --> 00:49:53,070 >> Við sjáum þetta með breakpoint. 605 00:49:53,070 --> 00:49:54,920 Svo langt að við höfum verið að keyra forrit okkar, og það hefur verið í gangi 606 00:49:54,920 --> 00:49:58,230 þar til annað hvort það seg galla eða lendir villu 607 00:49:58,230 --> 00:50:05,930 eða þar til það hefur hætt og allt hefur verið algerlega fínn. 608 00:50:05,930 --> 00:50:08,360 Þetta er ekki endilega hjálpsamur hlutur, því að stundum 609 00:50:08,360 --> 00:50:11,840 þú ert með villa í forritinu, en það er ekki að valda skiptingu kenna. 610 00:50:11,840 --> 00:50:16,950 Það er ekki að valda forritið til að hætta eða eitthvað svoleiðis. 611 00:50:16,950 --> 00:50:20,730 Leiðin til að fá gdb að staldra program á ákveðnum tímapunkti 612 00:50:20,730 --> 00:50:23,260 er að setja breakpoint. 613 00:50:23,260 --> 00:50:26,520 Þú getur annað hvort að gera þetta með því að setja breakpoint á virka nafn 614 00:50:26,520 --> 00:50:30,770 eða þú getur sett breakpoint á tiltekinni línu af kóða. 615 00:50:30,770 --> 00:50:34,450 Mér finnst að setja Rofstaðir um nöfn virka, vegna þess að - auðvelt að muna, 616 00:50:34,450 --> 00:50:37,700 og ef þú ferð í raun í og ​​breytt kóðann þinn upp smá, 617 00:50:37,700 --> 00:50:42,020 þá breakpoint mun reyndar vera á sama stað innan kóðann þinn. 618 00:50:42,020 --> 00:50:44,760 En ef þú ert að nota línu númer, og lína númer breytast 619 00:50:44,760 --> 00:50:51,740 vegna þess að þú bæta við eða eyða nokkur númer, þá breakpoints þín eru öll algerlega ruglaður upp. 620 00:50:51,740 --> 00:50:58,590 Ein af algengustu sem ég gera er að setja breakpoint á meginvirkni. 621 00:50:58,590 --> 00:51:05,300 Oft ég stígvél upp GDB, ég gerð B MAIN, Enter, og það mun setja breakpoint 622 00:51:05,300 --> 00:51:10,630 á meginvirkni sem bara segir "að gera hlé á dagskrá eins fljótt og þú byrjar að keyra," 623 00:51:10,630 --> 00:51:17,960 og þannig, þegar ég hlaupa program minn með, segja, CS50 steina sem tvö rök 624 00:51:17,960 --> 00:51:24,830 og ýttu á Enter, fær það til the aðalæð virka og það hættir strax í fyrstu línu, 625 00:51:24,830 --> 00:51:30,620 rétt áður en það metur strcmp virka. 626 00:51:30,620 --> 00:51:34,940 >> Þar sem ég er í hvíld, nú get ég farið að mucking kring og sjá hvað er að gerast 627 00:51:34,940 --> 00:51:40,250 með öllum mismunandi breytur sem eru liðin í áætlun mína. 628 00:51:40,250 --> 00:51:43,670 Hér get ég prentað út argc og sjá hvað er að gerast. 629 00:51:43,670 --> 00:51:50,030 Sjá að argc er 3, vegna þess að það fékk 3 mismunandi gildi í það. 630 00:51:50,030 --> 00:51:54,060 Það fékk nafnið af the program, það er fékk fyrstu rök og annað rifrildi. 631 00:51:54,060 --> 00:52:09,330 Við getum prentað þá út með því að horfa á argv [0], argv [1], og argv [2]. 632 00:52:09,330 --> 00:52:12,030 Svo nú þú getur líka séð hvers vegna þetta strcmp kalla er að fara að mistakast, 633 00:52:12,030 --> 00:52:21,650 vegna þess að þú sérð að það var skipt upp CS50 og steina í tveimur aðskildum rök. 634 00:52:21,650 --> 00:52:27,250 Á þessum tímapunkti, þegar þú hefur högg breakpoint, getur þú haldið áfram að stíga með forritinu 635 00:52:27,250 --> 00:52:32,920 línu fyrir línu, eins og til að byrja program aftur. 636 00:52:32,920 --> 00:52:35,520 Svo ef þú vilt ekki að byrja forritið aftur og bara halda áfram, 637 00:52:35,520 --> 00:52:41,970 þú getur notað haldið áfram stjórn og halda áfram að hlaupa the program til enda. 638 00:52:41,970 --> 00:52:45,010 Rétt eins og það gerði hér. 639 00:52:45,010 --> 00:52:54,880 Hins vegar, ef ég endurræsa forritið, CS50 Rocks, hits hún breakpoint minn aftur, 640 00:52:54,880 --> 00:52:59,670 og að þessu sinni, ef ég vil ekki bara að fara alla leið í gegnum the hvíla af the program, 641 00:52:59,670 --> 00:53:08,040 Ég get notað næstu skipun, sem ég skammstafa líka með n. 642 00:53:08,040 --> 00:53:12,960 Og þetta mun stíga í gegnum forritið línu fyrir línu. 643 00:53:12,960 --> 00:53:17,530 Svo er hægt að horfa á eins og það framkvæma, sem breytur breytast, eins og hlutirnir fá uppfærð. 644 00:53:17,530 --> 00:53:21,550 Sem er nokkuð gott. 645 00:53:21,550 --> 00:53:26,570 Hin kaldur hlutur er frekar en að endurtaka sömu stjórn aftur og aftur og aftur, 646 00:53:26,570 --> 00:53:30,670 ef þú högg bara inn - svo hér sem þú sérð að ég hef ekki slegið í neinu - 647 00:53:30,670 --> 00:53:33,780 Ef ég lenti bara inn, mun það endurtaka fyrri stjórn, 648 00:53:33,780 --> 00:53:36,900 eða fyrri GDB stjórn sem ég setti bara inn 649 00:53:36,900 --> 00:53:56,000 Ég get haldið hitting inn og það mun halda stepping gegnum línu kóða mína fyrir línu. 650 00:53:56,000 --> 00:53:59,310 Ég myndi hvetja ykkur til að fara kíkja á önnur forrit gallaðir eins og heilbrigður. 651 00:53:59,310 --> 00:54:01,330 Við höfum ekki tíma til að komast í gegnum þær allar í dag kafla. 652 00:54:01,330 --> 00:54:05,890 Kóðinn er það, svo þú getur konar séð hvað er að gerast 653 00:54:05,890 --> 00:54:07,730 bak við tjöldin ef þú færð virkilega fastur, 654 00:54:07,730 --> 00:54:11,940 en að minnsta kosti, bara æfa stígvél upp GDB, 655 00:54:11,940 --> 00:54:13,940 keyra forritið þar sem það brýtur á þér, 656 00:54:13,940 --> 00:54:18,260 fá rakningarskýrslu, vangaveltur út hvað virka hrun var í, 657 00:54:18,260 --> 00:54:24,450 hvaða lína það var á, prenta út nokkur breytilega gildi, 658 00:54:24,450 --> 00:54:30,140 bara þannig að þú færð tilfinningu fyrir því, vegna þess að það mun virkilega hjálpa þér að fara fram. 659 00:54:30,140 --> 00:54:36,340 Á þessum tímapunkti, við erum að fara að hætta út af gdb, sem þú nota hætta eða bara q. 660 00:54:36,340 --> 00:54:40,460 Ef kerfið þitt er í the miðja af gangi enn, og það hefur ekki hætt, 661 00:54:40,460 --> 00:54:43,510 það verður alltaf að spyrja þig, "Ertu viss um að þú viljir hætta?" 662 00:54:43,510 --> 00:54:48,770 Þú getur bara högg já. 663 00:54:48,770 --> 00:54:55,250 >> Nú erum við að fara að horfa á næstu vandamáli sem við höfum, sem er kötturinn program. 664 00:54:55,250 --> 00:54:59,880 Ef þú horfir til skamms á Áframsendi og pípur, munt þú sjá að Tommy notar þetta forrit 665 00:54:59,880 --> 00:55:07,540 sem prentar í grundvallaratriðum alla framleiðsla skrá til the skjár. 666 00:55:07,540 --> 00:55:12,660 Svo ef ég hlaupa köttur, þetta er í raun innbyggður-í forrit á tækið, 667 00:55:12,660 --> 00:55:16,860 og ef þú hefur Macs sem þú getur gert þetta á þinn Lagsi líka, ef þú opnar flugstöðinni. 668 00:55:16,860 --> 00:55:25,630 Og við - köttur, við skulum segja, cp.c, og ýttu á Enter. 669 00:55:25,630 --> 00:55:29,640 Hvað gerði, ef við að fletta upp smá og sjá hvar við hljóp línu, 670 00:55:29,640 --> 00:55:40,440 eða þar sem við hljóp köttur stjórn, bókstaflega bara prenta út innihald cp.c á skjánum okkar. 671 00:55:40,440 --> 00:55:44,140 Við getum keyrt það aftur og þú getur sett í margar skrár saman. 672 00:55:44,140 --> 00:55:49,880 Svo er hægt að gera köttur cp.c, og þá getum við líka concatenate á cat.c skrá, 673 00:55:49,880 --> 00:55:53,250 sem er forrit sem við erum að fara að skrifa, 674 00:55:53,250 --> 00:55:58,140 og það mun prenta bæði skrár aftur til baka á skjáinn okkar. 675 00:55:58,140 --> 00:56:05,490 Þannig að ef við að fletta upp smá, sjáum við að þegar við hljóp þetta köttur cp.c, cat.c, 676 00:56:05,490 --> 00:56:17,110 fyrst það prentað út CP skrá, og þá undir það, það prenta út cat.c skrá rétt hérna. 677 00:56:17,110 --> 00:56:19,650 Við ætlum að nota þetta til að bara fá fætur okkar blautur. 678 00:56:19,650 --> 00:56:25,930 Spila í kring með einfaldri prentun á flugstöðinni, sjá hvernig það virkar. 679 00:56:25,930 --> 00:56:39,170 Ef þú krakkar opna með gedit cat.c, Enter, 680 00:56:39,170 --> 00:56:43,760 þú getur séð áætlun sem við erum að fara að skrifa. 681 00:56:43,760 --> 00:56:48,980 Við höfum látið þetta ágætur ketils disk, þannig að við þurfum ekki að eyða tíma í að skrifa allt það út. 682 00:56:48,980 --> 00:56:52,310 Við athuga einnig fjölda rök liðin inn 683 00:56:52,310 --> 00:56:56,910 Við prenta út ágætur notkunarleiðbeiningar. 684 00:56:56,910 --> 00:57:00,950 >> Þetta er svoleiðis að, aftur, eins og við höfum verið að tala um, 685 00:57:00,950 --> 00:57:04,490 það er næstum eins og minni vöðva. 686 00:57:04,490 --> 00:57:07,190 Mundu bara að halda að gera sams konar efni 687 00:57:07,190 --> 00:57:11,310 og alltaf að prenta út einhvers konar gagnlegum skilaboð 688 00:57:11,310 --> 00:57:17,670 þannig að fólk veit hvernig á að keyra forritið þitt. 689 00:57:17,670 --> 00:57:21,630 Með köttur, það er frekar einfalt, við erum bara að fara að fara í gegnum allar mismunandi rök 690 00:57:21,630 --> 00:57:24,300 sem voru samþykkt í áætlun okkar, og við erum að fara að prenta 691 00:57:24,300 --> 00:57:29,950 innihald þeirra út á skjáinn í einu. 692 00:57:29,950 --> 00:57:35,670 Til að prenta skrá til the skjár, við erum að fara að gera eitthvað mjög svipað 693 00:57:35,670 --> 00:57:38,120 við það sem við gerðum í lok spurningakeppni. 694 00:57:38,120 --> 00:57:45,350 Í lok quiz, sem ráða dagskrá, áttum við að opna skrá, 695 00:57:45,350 --> 00:57:48,490 og þá þurftum við að prenta á það. 696 00:57:48,490 --> 00:57:54,660 Í þessu tilfelli erum við að fara að opna skrá, og við erum að fara að lesa í henni í staðinn. 697 00:57:54,660 --> 00:58:00,630 Svo ætlum við að prenta út, í stað þess að skrá, við erum að fara að prenta á skjáinn. 698 00:58:00,630 --> 00:58:05,830 Svo prentun á skjáinn sem þú hefur allt gert áður með printf. 699 00:58:05,830 --> 00:58:08,290 Svo er það ekki of brjálaður. 700 00:58:08,290 --> 00:58:12,190 En lesa skrá er skrýtin tilfinning. 701 00:58:12,190 --> 00:58:17,300 Við förum í gegnum þessi smá í einu. 702 00:58:17,300 --> 00:58:20,560 Ef þið farið aftur að síðustu vandamál á prófið, vandamál 33, 703 00:58:20,560 --> 00:58:27,280 fyrsta línan sem við erum að fara að gera hér, opna skrána, er mjög svipað og það sem við gerðum þarna. 704 00:58:27,280 --> 00:58:36,370 Svo Stella, hvað er þessi lína líta út, þegar við opna skrá? 705 00:58:36,370 --> 00:58:47,510 [Stella] Capital FILE *, skrá - >> lagi. >> - Er jafn fopen. >> Jamm. 706 00:58:47,510 --> 00:58:55,980 Sem í þessu tilfelli er? Það er í comment. 707 00:58:55,980 --> 00:59:06,930 >> Það í comment? argv [i] og r? 708 00:59:06,930 --> 00:59:11,300 >> Einmitt. Rétt á. Svo er Stella alveg rétt. 709 00:59:11,300 --> 00:59:13,720 Þetta er það línan lítur út. 710 00:59:13,720 --> 00:59:19,670 Við ætlum að fá læk skrá breytu skal vista þau í skrá * svo allar húfur, 711 00:59:19,670 --> 00:59:25,720 FILE, *, og nafn þessarar breytu verður skrá. 712 00:59:25,720 --> 00:59:32,250 Við gætum kalla það hvað sem við viljum. Við gætum kalla það first_file eða file_i, hvað viljum. 713 00:59:32,250 --> 00:59:37,590 Og þá var nafnið á skránni samþykkt um stjórn lína til þessarar áætlunar. 714 00:59:37,590 --> 00:59:44,450 Svo það er geymt í argv [i] og þá erum við að fara að opna þessa skrá í lesa ham. 715 00:59:44,450 --> 00:59:48,100 Nú þegar við höfum opnað skrána, hvað er það sem við þurfum alltaf að muna eftir að gera 716 00:59:48,100 --> 00:59:52,230 þegar við höfum opnað skrá? Loka það. 717 00:59:52,230 --> 00:59:57,220 Svo Missy, hvernig loka við skrá? 718 00:59:57,220 --> 01:00:01,020 [Missy] fclose (skrá) >> fclose (skrá). Einmitt. 719 01:00:01,020 --> 01:00:05,340 Frábært. Allt í lagi. Ef við lítum á þetta til að gera athugasemd hérna, 720 01:00:05,340 --> 01:00:11,940 segir, "Open argv [i] og prenta innihald hennar til stdout." 721 01:00:11,940 --> 01:00:15,460 >> Standard út er undarlegt nafn. Stdout er bara okkar leið til að segja 722 01:00:15,460 --> 01:00:22,880 við viljum að prenta það á flugstöðinni, við viljum að prenta það til staðlaða framleiðsla á. 723 01:00:22,880 --> 01:00:26,450 Við getum raunverulega fá losa af this comment hérna. 724 01:00:26,450 --> 01:00:36,480 Ég ætla að afrita það og líma það síðan það er það sem við gerðum. 725 01:00:36,480 --> 01:00:41,290 Á þessum tímapunkti, nú höfum við að lesa skrá smátt og smátt. 726 01:00:41,290 --> 01:00:46,300 Við höfum rætt nokkrar leiðir að lesa skrá. 727 01:00:46,300 --> 01:00:51,830 Hver sjálfur ert eftirlæti svo langt? 728 01:00:51,830 --> 01:00:57,960 Hvaða leiðir hefur þú séð eða þú manst, að lesa skrár? 729 01:00:57,960 --> 01:01:04,870 [Daniel] fread? >> Fread? Svo fread er einn. Jimmy, veistu allir aðrir? 730 01:01:04,870 --> 01:01:12,150 [Jimmy] Nei >> lagi. Nope. Charlotte? Alexander? Allir aðrir? Allt í lagi. 731 01:01:12,150 --> 01:01:20,740 Svo hinar eru fgetc er eitt sem við munum nota mikið. 732 01:01:20,740 --> 01:01:26,410 Það er líka fscanf, þú krakkar sjá mynstur hér? 733 01:01:26,410 --> 01:01:29,170 Þeir byrja allir með f. Nokkuð að gera með skrá. 734 01:01:29,170 --> 01:01:35,260 Það er fread, fgetc, fscanf. Þetta eru allar lesa virka. 735 01:01:35,260 --> 01:01:49,120 Til að skrifa við höfum fwrite, höfum við fputc stað fgetc. 736 01:01:49,120 --> 01:01:58,250 Við höfum einnig eins fprintf við sáum á spurningakeppni. 737 01:01:58,250 --> 01:02:01,680 Þar sem þetta er vandamál sem felur í sér að lesa úr skrá, 738 01:02:01,680 --> 01:02:04,940 við erum að fara að nota eina af þessum þremur aðgerðum. 739 01:02:04,940 --> 01:02:10,890 Við erum ekki að fara að nota þessar aðgerðir niður. 740 01:02:10,890 --> 01:02:14,880 Þessar aðgerðir eru allar að finna í venjulegu I / O bókasafn. 741 01:02:14,880 --> 01:02:17,510 Svo ef þú horfir á efst á þessari áætlun, 742 01:02:17,510 --> 01:02:24,110 þú getur séð að við höfum nú þegar með haus skrá til staðlaða I / O bókasafn. 743 01:02:24,110 --> 01:02:27,120 Ef við viljum reikna út hver við viljum að nota, 744 01:02:27,120 --> 01:02:29,690 við getum alltaf opna manninn síður. 745 01:02:29,690 --> 01:02:34,350 Þannig að við getum slegið mann stdio 746 01:02:34,350 --> 01:02:43,180 og lesa allt um stdio inntak og úttak aðgerðir í C. 747 01:02:43,180 --> 01:02:49,870 Og við getum nú þegar séð ó, sjáðu. Það er að minnast fgetc, það nefna fputc. 748 01:02:49,870 --> 01:02:57,220 Svo er hægt að bora niður smá og horfa á, segja, fgetc 749 01:02:57,220 --> 01:03:00,060 og líta á síðuna maður hennar. 750 01:03:00,060 --> 01:03:03,430 Þú getur séð að það fer með a heild búnt af annar virka: 751 01:03:03,430 --> 01:03:12,640 fgetc, fgets, getc, getchar, fær ungetc, og inntak hennar á stafi og strengi. 752 01:03:12,640 --> 01:03:19,180 Svo er þetta hvernig við lesum í stafi og strengi úr skrám frá standard input, 753 01:03:19,180 --> 01:03:21,990 sem er í raun frá notanda. 754 01:03:21,990 --> 01:03:24,780 Og þetta er hvernig við gerum það í raun C. 755 01:03:24,780 --> 01:03:30,850 Þannig að þetta er ekki að nota GetString og GetChar aðgerðir 756 01:03:30,850 --> 01:03:36,840 sem við notuðum frá CS50 bókasafn. 757 01:03:36,840 --> 01:03:39,710 Við ætlum að gera þetta vandamál á nokkrum leiðum 758 01:03:39,710 --> 01:03:43,430 þannig að þú getur séð tvær mismunandi leiðir til að gera það. 759 01:03:43,430 --> 01:03:48,490 Bæði fread fall sem Daniel nefndi og fgetc eru góðar leiðir til að gera það. 760 01:03:48,490 --> 01:03:53,790 Ég held fgetc er svolítið auðveldara, vegna þess að það hefur aðeins, eins og þú sérð, 761 01:03:53,790 --> 01:03:59,660 ein rök, og FILE * að við erum að reyna að lesa staf frá, 762 01:03:59,660 --> 01:04:02,740 og aftur gildi þess er int. 763 01:04:02,740 --> 01:04:05,610 Og þetta er svolítið ruglingslegt, ekki satt? 764 01:04:05,610 --> 01:04:11,450 >> Þar sem við erum að fá staf, svo hvers vegna er þetta ekki skila bleikju? 765 01:04:11,450 --> 01:04:18,700 Þið hafið einhverjar hugmyndir um af hverju þetta gæti ekki skila bleikju? 766 01:04:18,700 --> 01:04:25,510 [Missy svarar óskiljanlegur] >> Já. Svo Missy algerlega rétt. 767 01:04:25,510 --> 01:04:31,570 Ef það er ASCII, þá er þetta heiltala gæti varpað raunveruleg bleikju. 768 01:04:31,570 --> 01:04:33,520 Gæti verið ASCII staf og það er rétt. 769 01:04:33,520 --> 01:04:36,220 Það er einmitt það sem er að gerast. 770 01:04:36,220 --> 01:04:39,190 Við erum að nota int einfaldlega vegna þess að það hefur fleiri bita. 771 01:04:39,190 --> 01:04:44,750 Það er stærri en bleikja, bleikju okkar hefur aðeins 8 bita, sem 1 bæti á 32-bita vélum okkar. 772 01:04:44,750 --> 01:04:48,520 Og int hefur virði allra 4 Bytes 'pláss. 773 01:04:48,520 --> 01:04:50,940 Og það kemur í ljós að leiðin fgetc virkar, 774 01:04:50,940 --> 01:04:53,940 ef við skruna niður í ágrip okkar í þessu maður síðu svolítið, 775 01:04:53,940 --> 01:05:05,000 fletta alla leið niður. Það kemur í ljós að þeir nota þetta sérstaka gildi sem heitir EOF. 776 01:05:05,000 --> 01:05:09,640 Það er sérstakt fasti sem skilagildi fgetc virka 777 01:05:09,640 --> 01:05:14,570 þegar þú högg the endir af the skrá eða ef þú færð villu. 778 01:05:14,570 --> 01:05:18,170 Og það kemur í ljós að til þess að gera þessar samanburð við EOF almennilega, 779 01:05:18,170 --> 01:05:24,060 þú vilt hafa að auka magn af upplýsingum sem þú hefur á int 780 01:05:24,060 --> 01:05:28,420 í stað þess að nota char breytu. 781 01:05:28,420 --> 01:05:32,130 Jafnvel þó fgetc er í raun fá karakter úr skrá, 782 01:05:32,130 --> 01:05:38,450 þú vilt að muna að það er aftur eitthvað sem er int til þín. 783 01:05:38,450 --> 01:05:41,360 Að því sögðu, það er nokkuð auðvelt að nota. 784 01:05:41,360 --> 01:05:44,960 Það er að fara að gefa okkur staf, svo er allt sem við þurfum að gera að halda að spyrja skrána, 785 01:05:44,960 --> 01:05:48,440 "Láttu mig fá næsta staf, gefa mér næsta staf, gefa mér næsta staf," 786 01:05:48,440 --> 01:05:51,400 þar til við fá til the endir af the skrá. 787 01:05:51,400 --> 01:05:54,730 Og það mun draga í einum staf í einu úr skránni okkar, 788 01:05:54,730 --> 01:05:56,250 og þá getum við gert hvað sem við viljum við það. 789 01:05:56,250 --> 01:06:00,160 Við getum geymt það, getum við bætt því við streng, sem við getum prentað það út. 790 01:06:00,160 --> 01:06:04,630 Ekki allir af því. 791 01:06:04,630 --> 01:06:09,600 >> Zooming út aftur og fara aftur til cat.c program okkar, 792 01:06:09,600 --> 01:06:16,170 ef við ætlum að nota fgetc, 793 01:06:16,170 --> 01:06:21,710 hvernig gætum við nálgast næstu línu af kóða? 794 01:06:21,710 --> 01:06:26,020 Við ætlum að nota - fread vilja gera eitthvað aðeins öðruvísi. 795 01:06:26,020 --> 01:06:32,600 Og í þetta sinn, við erum bara að fara að nota fgetc að fá einn staf í einu. 796 01:06:32,600 --> 01:06:40,910 Til að vinna heilan skrá, hvað gætum við þurft að gera? 797 01:06:40,910 --> 01:06:44,030 Hversu margir stafir eru í skrá? 798 01:06:44,030 --> 01:06:47,390 There ert a einhver fjöldi. Svo þú vilt líklega að fá einn 799 01:06:47,390 --> 01:06:49,860 og þá fá aðra og fá aðra og fá aðra. 800 01:06:49,860 --> 01:06:53,330 Hvers konar reiknirit finnst þér við gætum þurft að nota hérna? 801 01:06:53,330 --> 01:06:55,470 Hvaða tegund af -? [Alexander] A til hliðar? >> Einmitt. 802 01:06:55,470 --> 01:06:57,500 Sumir tegund af lykkju. 803 01:06:57,500 --> 01:07:03,380 A for lykkja er í raun mikil, í þessu tilfelli. 804 01:07:03,380 --> 01:07:08,620 Og eins og þú varst að segja, það hljómar eins og þú vilt lykkju á öllu skrá, 805 01:07:08,620 --> 01:07:11,820 fá staf í einu. 806 01:07:11,820 --> 01:07:13,850 Allar ábendingar um það sem getur litið út? 807 01:07:13,850 --> 01:07:22,090 [Alexander, óskiljanlegur] 808 01:07:22,090 --> 01:07:30,050 >> Jæja, bara segja mér á ensku hvað þú ert að reyna að gera? [Alexander, óskiljanlegur] 809 01:07:30,050 --> 01:07:36,270 Svo í þessu tilfelli, það hljómar eins og við erum bara að reyna að lykkja yfir allan skrá. 810 01:07:36,270 --> 01:07:45,330 [Alexander] Svo i > Stærð -? 811 01:07:45,330 --> 01:07:49,290 Ég giska á stærð af the skrá, ekki satt? Stærð - we'll skrifa bara svona. 812 01:07:49,290 --> 01:07:57,470 Stærð skrá að sinni, i + +. 813 01:07:57,470 --> 01:08:04,610 Svo kemur í ljós að leiðin sem þú gerir þetta með því að nota fgetc, og þetta er nýtt, 814 01:08:04,610 --> 01:08:10,460 er að það er engin auðveld leið til að bara fá stærð skrá 815 01:08:10,460 --> 01:08:16,979 með þessu "sizeof" tegund reisa að þú hefur séð áður. 816 01:08:16,979 --> 01:08:20,910 Þegar við notum þessi fgetc virka, við erum að kynna einhvers konar 817 01:08:20,910 --> 01:08:29,069 nýtt, angurvær setningafræði til þetta fyrir lykkju, þar sem í stað þess að nota bara einföld gegn 818 01:08:29,069 --> 01:08:33,920 að fara staf með staf, þá ætlum við að draga einn staf í einu, 819 01:08:33,920 --> 01:08:37,120 einn staf í einu, og hvernig við vitum að við erum í lok 820 01:08:37,120 --> 01:08:41,290 er ekki þegar við höfum talið ákveðinn fjölda stafa, 821 01:08:41,290 --> 01:08:49,939 en þegar eðli við draga út að sérstakt enda eðli skrá. 822 01:08:49,939 --> 01:08:58,689 Þannig að við getum gert þetta með því - ég kalla þetta CH, og við erum að fara að frumstilla hana 823 01:08:58,689 --> 01:09:08,050 með fyrsta símtalinu okkar til að fá fyrsta staf úr skránni. 824 01:09:08,050 --> 01:09:14,979 Þannig að þetta hluti hérna, þetta er að fara að fá staf út úr skránni 825 01:09:14,979 --> 01:09:20,840 og geyma það í breytu breyt. 826 01:09:20,840 --> 01:09:25,420 Við erum að fara að halda að gera þetta fyrr en við komum til the endir af the skrá, 827 01:09:25,420 --> 01:09:41,170 sem við gerum með því að prófa að eðli ekki vera jafn að sérstakar EOF staf. 828 01:09:41,170 --> 01:09:48,750 Og þá í stað þess að gera k + +, sem myndi bara hækka gildi, 829 01:09:48,750 --> 01:09:52,710 þannig að ef við lesum að A út af the skrá, höfuðborg A, segja, 830 01:09:52,710 --> 01:09:56,810 CH + + myndi gefa okkur b, og svo við myndum fá C og þá d. 831 01:09:56,810 --> 01:09:59,310 Það er greinilega ekki það sem við viljum. Það sem við viljum hér 832 01:09:59,310 --> 01:10:05,830 í þessum síðasta bita er við viljum fá næsta staf úr skrá. 833 01:10:05,830 --> 01:10:09,500 >> Svo hvernig gætum við fengið næsta staf úr skrá? 834 01:10:09,500 --> 01:10:13,470 Hvernig fáum við fyrsta staf úr skrá? 835 01:10:13,470 --> 01:10:17,200 [Nemandi] fgetfile? >> Fgetc, eða, því miður, þú varst alveg rétt. 836 01:10:17,200 --> 01:10:20,470 Ég rangt stafsett það rétt þar. Svo já. 837 01:10:20,470 --> 01:10:26,240 Hér í stað þess að gera k + +, 838 01:10:26,240 --> 01:10:29,560 við erum bara að fara að hringja fgetc (skrá) aftur 839 01:10:29,560 --> 01:10:39,180 og geyma niðurstöðu í sama CH breytu okkar. 840 01:10:39,180 --> 01:10:43,730 [Námsmaður spurning, óskiljanlegur] 841 01:10:43,730 --> 01:10:52,390 >> Er þetta þar sem þessi * FILE krakkar eru sérstök. 842 01:10:52,390 --> 01:10:59,070 Leiðin sem þeir vinna er það - þegar þú opnar fyrst - þegar þú fyrst að fopen hringja, 843 01:10:59,070 --> 01:11:04,260 Skráin * þjónar í raun sem bendill til the byrjun af the skrá. 844 01:11:04,260 --> 01:11:12,830 Og svo hvert skipti sem þú hringja fgetc, flytur það einn staf í skránni. 845 01:11:12,830 --> 01:11:23,280 Svo þegar þú kallar þetta, þú ert incrementing skrá músina með einum staf. 846 01:11:23,280 --> 01:11:26,210 Og þegar þú fgetc aftur, þú ert að færa það annar karakter 847 01:11:26,210 --> 01:11:28,910 og annan staf og annar karakter og annar karakter. 848 01:11:28,910 --> 01:11:32,030 [Námsmaður spurning, óskiljanlegur] >> Og that's - Já. 849 01:11:32,030 --> 01:11:34,810 Það er góður af þessum galdur undir hetta. 850 01:11:34,810 --> 01:11:37,930 Þú halda bara incrementing gegnum. 851 01:11:37,930 --> 01:11:46,510 Á þessum tímapunkti, þú ert fær um að í raun vinna með staf. 852 01:11:46,510 --> 01:11:52,150 Svo hvernig gætum við prenta þetta út á skjánum, nú? 853 01:11:52,150 --> 01:11:58,340 Við getum notað sömu printf hlutur sem við notuðum áður. 854 01:11:58,340 --> 01:12:00,330 Að við höfum verið að nota alla önn. 855 01:12:00,330 --> 01:12:05,450 Við getum hringt printf, 856 01:12:05,450 --> 01:12:21,300 og við getum framhjá í eðli bara svona. 857 01:12:21,300 --> 01:12:27,430 Önnur leið til að gera það er frekar en að nota printf og að þurfa að gera þetta snið band, 858 01:12:27,430 --> 01:12:29,490 Við getum líka notað eitthvað af öðrum aðgerðum. 859 01:12:29,490 --> 01:12:40,090 Við getum notað fputc sem prentar staf á skjáinn, 860 01:12:40,090 --> 01:12:52,580 nema ef við skoðum fputc - láta mig minnka svolítið. 861 01:12:52,580 --> 01:12:56,430 Við sjáum hvað er gott er það tekur á eðli sem við lesum út með fgetc, 862 01:12:56,430 --> 01:13:05,100 en þá verðum við að gefa honum straum til að prenta út. 863 01:13:05,100 --> 01:13:11,850 Við getum líka notað putchar virka, sem mun setja beint í venjulegt út. 864 01:13:11,850 --> 01:13:16,070 Þannig að það eru allt fullt af mismunandi valkosti sem við getum notað fyrir prentun. 865 01:13:16,070 --> 01:13:19,580 Þeir eru allir í venjulegu I / O bókasafn. 866 01:13:19,580 --> 01:13:25,150 Alltaf þegar þú vilt prenta - svo printf, sjálfgefið, mun prenta í sérstökum staðli út á, 867 01:13:25,150 --> 01:13:27,910 sem er að stdout. 868 01:13:27,910 --> 01:13:41,300 Þannig að við getum bara átt við það sem góður þessa galdur gildi, stdout hér. 869 01:13:41,300 --> 01:13:48,410 Oops. Setjið semíkommu utan. 870 01:13:48,410 --> 01:13:52,790 >> Þetta er mikið af nýjum, angurvær upplýsingar hér. 871 01:13:52,790 --> 01:13:58,600 A einhver fjöldi af það er mjög að beita, í þeim skilningi að þetta er númerið 872 01:13:58,600 --> 01:14:05,700 sem er skrifað með þessum hætti bara vegna þess að það er hreint að lesa, auðvelt að lesa. 873 01:14:05,700 --> 01:14:11,520 Það eru til margar mismunandi leiðir til að gera það, margar mismunandi aðgerðir sem þú getur notað, 874 01:14:11,520 --> 01:14:14,680 en við hafa tilhneigingu bara að fylgja þessum sömu mynstur aftur og aftur. 875 01:14:14,680 --> 01:14:20,180 Svo verið ekki hissa ef þú sérð númerið svona að koma upp aftur og aftur. 876 01:14:20,180 --> 01:14:25,690 Allt í lagi. Á þessum tímapunkti þurfum við að brjóta í dag. 877 01:14:25,690 --> 01:14:31,300 Takk fyrir að koma. Takk fyrir að horfa á ef þú ert á netinu. Og við munum sjá þig í næstu viku. 878 01:14:31,300 --> 01:14:33,890 [CS50.TV]