1 00:00:00,000 --> 00:00:02,730 [Powered by Google Translate] [SEHEMU 5: Chini starehe] 2 00:00:02,730 --> 00:00:05,180 [Nate Hardison, Chuo Kikuu cha Harvard] 3 00:00:05,180 --> 00:00:08,260 [Hii ni CS50.] [CS50.TV] 4 00:00:08,260 --> 00:00:11,690 Hivyo kuwakaribisha nyuma, guys. 5 00:00:11,690 --> 00:00:16,320 Karibu sehemu ya 5. 6 00:00:16,320 --> 00:00:20,220 Katika hatua hii, baada ya kumaliza jaribio 0 na wakayaona jinsi umefanya kosa, 7 00:00:20,220 --> 00:00:25,770 hopefully unajisikia kweli nzuri kwa sababu mimi nilikuwa hisia sana na alama katika sehemu hii. 8 00:00:25,770 --> 00:00:28,050 Kwa watazamaji wetu online, tulikuwa na wanandoa wa maswali 9 00:00:28,050 --> 00:00:33,680 kuhusu miwili iliyopita matatizo juu ya kuweka tatizo - au juu ya chemsha bongo, badala. 10 00:00:33,680 --> 00:00:39,690 Hivyo sisi ni kwenda juu ya wale kweli haraka ili kila mtu anaona kile kilichotokea 11 00:00:39,690 --> 00:00:45,060 na jinsi ya kwenda kupitia ufumbuzi halisi badala ya kuangalia ufumbuzi yenyewe. 12 00:00:45,060 --> 00:00:50,330 Sisi ni kwenda kwenda juu ya wanandoa wa mwisho wa matatizo kweli haraka, 32 na 33. 13 00:00:50,330 --> 00:00:53,240 Tu, tena, ili watazamaji online unaweza kuona hili. 14 00:00:53,240 --> 00:00:59,080 >> Kama wewe kugeuka kwa tatizo lako 32, ambayo ni kwenye ukurasa wa 13, 15 00:00:59,080 --> 00:01:02,730 13 nje ya 16, tatizo ni 32 wote kuhusu swaps. 16 00:01:02,730 --> 00:01:05,010 Ilikuwa wote kuhusu swapping integers mbili. 17 00:01:05,010 --> 00:01:08,740 Ni tatizo kwamba sisi d wamekwenda juu ya wanandoa wa nyakati katika hotuba. 18 00:01:08,740 --> 00:01:13,590 Na katika hapa, nini sisi walikuwa kuuliza wewe kufanya ni haraka kumbukumbu kuwaeleza. 19 00:01:13,590 --> 00:01:17,000 Kujaza katika maadili ya vigezo kama wao ni juu ya stack 20 00:01:17,000 --> 00:01:20,250 kama code huenda kwa njia ya kazi hii byta. 21 00:01:20,250 --> 00:01:24,500 Hasa, nini sisi tunataka - I'm kwenda kuweka hii iPad chini - 22 00:01:24,500 --> 00:01:29,650 hasa, nini sisi tunataka ni mstari huu kuhesabiwa 6 hapa hapa. 23 00:01:29,650 --> 00:01:36,740 Na ni kuhesabiwa 6 kwa ajili tu contiguity na tatizo uliopita. 24 00:01:36,740 --> 00:01:41,720 Nini tunataka kufanya ni kuonyesha au studio hali ya kumbukumbu 25 00:01:41,720 --> 00:01:46,090 kama ni wakati sisi nitafanya hii idadi mstari 6, 26 00:01:46,090 --> 00:01:52,540 ambayo ni ufanisi kurudi kutoka byta kazi yetu hapa hapa. 27 00:01:52,540 --> 00:01:59,450 Kama sisi kitabu chini hapa, tumeona kwamba anwani ya kila kitu katika kumbukumbu yalitolewa kwa ajili yetu. 28 00:01:59,450 --> 00:02:02,540 Hii ni muhimu sana, tutaweza kuja nyuma yake katika muda tu. 29 00:02:02,540 --> 00:02:09,240 Na kisha chini hapa chini, sisi alikuwa kidogo kumbukumbu mchoro kwamba sisi ni kwenda kwa kutaja. 30 00:02:09,240 --> 00:02:12,490 I have kweli jambo hili nje kwenye iPad yangu. 31 00:02:12,490 --> 00:02:20,720 Hivyo nina kwenda kwa Alternate na kurudi kati ya iPad na kanuni hii tu kwa ajili ya kumbukumbu. 32 00:02:20,720 --> 00:02:26,540 >> Hebu kuanza. Kwanza, hebu kuzingatia michache ya kwanza ya mistari ya haki kuu hapa. 33 00:02:26,540 --> 00:02:30,220 Kuanza, tunakwenda initialize x na y kwa 1 na 2. 34 00:02:30,220 --> 00:02:33,040 Hivyo tuna mbili vigezo integer, wao ni wawili kwenda kuwekwa katika stack. 35 00:02:33,040 --> 00:02:36,050 Sisi ni kwenda kuweka 1 na 2 katika wao. 36 00:02:36,050 --> 00:02:43,150 Hivyo kama mimi flip juu kwa iPad wangu, hopefully, hebu angalia - 37 00:02:43,150 --> 00:02:48,660 Apple TV mirroring, na kuna sisi kwenda. Sawa. 38 00:02:48,660 --> 00:02:51,670 Hivyo kama mimi flip juu kwa iPad wangu, 39 00:02:51,670 --> 00:02:56,220 Mimi nataka initialize x na y kwa 1 na 2. 40 00:02:56,220 --> 00:03:00,580 Sisi kufanya hivyo kwa urahisi kabisa kwa kuandika katika kisanduku 1 alama x 41 00:03:00,580 --> 00:03:07,730 na 2 katika sanduku alama y. Haki rahisi. 42 00:03:07,730 --> 00:03:11,620 Hivyo sasa hebu kwenda nyuma ya mbali, kuona nini kitatokea. 43 00:03:11,620 --> 00:03:15,810 Hivyo hii ni mstari unaofuata ambapo mambo kupata gumu. 44 00:03:15,810 --> 00:03:28,110 Sisi kupita anwani ya x na anuani ya y kama vigezo na b kwa kazi byta. 45 00:03:28,110 --> 00:03:32,380 anuani ya x na anuani ya y ni mambo ambayo hatuwezi mahesabu 46 00:03:32,380 --> 00:03:36,360 bila akimaanisha risasi haya anasema haki ya chini hapa. 47 00:03:36,360 --> 00:03:39,750 Na bahati nzuri, kwanza mbili risasi pointi kutuambia nini hasa majibu ni. 48 00:03:39,750 --> 00:03:44,740 anuani ya x katika kumbukumbu ni 10, na anuani ya y katika kumbukumbu ni 14. 49 00:03:44,740 --> 00:03:51,870 Hivyo wale ni maadili ambayo kupata kupita katika kama na b juu juu katika byta kazi yetu. 50 00:03:51,870 --> 00:04:00,760 Hivyo tena, byte nyuma mchoro wetu, naweza kuandika 10 katika 51 00:04:00,760 --> 00:04:07,400 na 14 katika b. 52 00:04:07,400 --> 00:04:11,610 Sasa, hatua hii ni mahali ambapo sisi kuendelea na kubadilishana. 53 00:04:11,610 --> 00:04:14,520 Hivyo flipping nyuma mbali tena, 54 00:04:14,520 --> 00:04:21,079 tunaona kwamba njia byta kazi ni mimi kwanza dereference na kuhifadhi matokeo katika TMP. 55 00:04:21,079 --> 00:04:27,650 Hivyo operator dereference anasema, "Hey Treat yaliyomo ya kutofautiana kama anwani.. 56 00:04:27,650 --> 00:04:33,830 Nenda chochote ni kuhifadhiwa katika anuani hiyo, na mzigo huo. " 57 00:04:33,830 --> 00:04:41,720 Nini mzigo nje ya kutofautiana ni kwenda kuhifadhiwa katika TMP variable yetu. 58 00:04:41,720 --> 00:04:45,150 Flipping nyuma iPad. 59 00:04:45,150 --> 00:04:51,690 Kama sisi kwenda kushughulikia 10, tunajua kwamba anuani 10 ni x varible 60 00:04:51,690 --> 00:04:55,480 kwa sababu tuliambiwa na kumweka risasi yetu kwamba anuani ya x katika kumbukumbu ni 10. 61 00:04:55,480 --> 00:05:00,180 Hivyo tunaweza kwenda huko, kupata thamani yake, ambayo ni 1, kama sisi kuona kwenye iPad yetu, 62 00:05:00,180 --> 00:05:06,300 na mzigo huo katika TMP. 63 00:05:06,300 --> 00:05:08,250 Tena, hii si maudhui ya mwisho. 64 00:05:08,250 --> 00:05:14,350 Sisi ni kwenda kutembea kwa njia na tutaweza kupata hali yetu ya mwisho ya mpango mwishoni. 65 00:05:14,350 --> 00:05:17,210 Lakini sasa hivi, tuna thamani 1 kuhifadhiwa katika TMP. 66 00:05:17,210 --> 00:05:19,210 >> Na kuna swali haraka zaidi ya hapa. 67 00:05:19,210 --> 00:05:23,980 [Alexander] Je operator dereference - kwamba ni haki tu nyota mbele ya kutofautiana? 68 00:05:23,980 --> 00:05:27,600 >> Ndiyo. Hivyo operator dereference, kama sisi flip nyuma mbali wetu mara nyingine tena, 69 00:05:27,600 --> 00:05:33,780 hii ni nyota haki mbele. 70 00:05:33,780 --> 00:05:37,460 Katika hali hiyo, ni - wewe kulinganisha kwa operator kuzidisha 71 00:05:37,460 --> 00:05:42,400 ambayo inahitaji mambo mawili; operator dereference ni operator unary. 72 00:05:42,400 --> 00:05:46,130 Tu kutumika kwa thamani moja kinyume na operator binary, 73 00:05:46,130 --> 00:05:48,810 ambapo wewe yanahusu maadili mbili tofauti. 74 00:05:48,810 --> 00:05:52,080 Hivyo kwamba ni nini kinatokea katika mstari huu. 75 00:05:52,080 --> 00:05:58,390 Sisi kubeba thamani 1 na kuhifadhiwa ndani ya variable muda wetu integer. 76 00:05:58,390 --> 00:06:05,800 line ijayo, sisi kuhifadhi yaliyomo ndani ya b - 77 00:06:05,800 --> 00:06:12,630 au, bali sisi kuhifadhi yaliyomo kwamba b ni akizungumzia katika mahali ambapo ni akizungumzia. 78 00:06:12,630 --> 00:06:17,690 Kama sisi kuchambua hii kutoka kulia kwenda kushoto, sisi ni kwenda b dereference, 79 00:06:17,690 --> 00:06:23,580 sisi ni kwenda kushughulikia 14, sisi ni kwenda kwa kunyakua integer kwamba ni huko, 80 00:06:23,580 --> 00:06:26,900 na kisha sisi ni kwenda kwa anuani ya 10, 81 00:06:26,900 --> 00:06:34,240 na sisi ni kwenda kutupa matokeo ya dereference wetu wa b katika nafasi hiyo. 82 00:06:34,240 --> 00:06:40,080 Flipping nyuma iPad wetu, ambapo tunaweza kufanya hii kidogo zaidi halisi, 83 00:06:40,080 --> 00:06:44,070 inaweza kusaidia kama mimi kuandika idadi ya juu yote ya anwani hapa. 84 00:06:44,070 --> 00:06:53,820 Hivyo tunajua kwamba katika y, sisi ni katika anuani 14, x ni katika anuani 10. 85 00:06:53,820 --> 00:07:00,180 Wakati sisi kuanza saa b, sisi dereference b, tunakwenda kunyakua thamani 2. 86 00:07:00,180 --> 00:07:08,320 Sisi ni kwenda kunyakua thamani hii kwa sababu ya kuwa ni thamani ya kwamba anaishi katika anuani 14. 87 00:07:08,320 --> 00:07:15,700 Na sisi ni kwenda kuweka katika variable kwamba anaishi katika anuani 10, 88 00:07:15,700 --> 00:07:19,160 ambayo ni haki pale, sambamba na x wetu kutofautiana. 89 00:07:19,160 --> 00:07:21,810 Hivyo tunaweza kufanya kidogo ya overwriting hapa 90 00:07:21,810 --> 00:07:35,380 ambapo sisi kujikwamua 1 yetu na badala yake sisi kuandika 2. 91 00:07:35,380 --> 00:07:39,560 Basi wote ni vizuri na wema katika dunia, ingawa tumekuwa x overwritten sasa. 92 00:07:39,560 --> 00:07:44,890 Sisi kuhifadhiwa x wa zamani wa thamani katika TMP variable yetu. 93 00:07:44,890 --> 00:07:50,210 Hivyo tunaweza kukamilisha byta na line ijayo. 94 00:07:50,210 --> 00:07:53,030 Flipping nyuma mbali wetu. 95 00:07:53,030 --> 00:07:58,150 Sasa inabakia kwamba wote ni kuchukua yaliyomo nje ya variable muda wetu integer 96 00:07:58,150 --> 00:08:05,630 na kuhifadhi katika variable kwamba anaishi katika anuani kwamba b ameshika. 97 00:08:05,630 --> 00:08:10,230 Hivyo sisi ni kwenda kwa ufanisi b dereference ili kupata variable 98 00:08:10,230 --> 00:08:14,340 kwamba ni katika anuani kwamba b ana ndani yake, 99 00:08:14,340 --> 00:08:19,190 na sisi ni kwenda stuff thamani kwamba TMP ameshika ndani yake. 100 00:08:19,190 --> 00:08:23,280 Flipping nyuma iPad mara moja zaidi. 101 00:08:23,280 --> 00:08:31,290 Naweza kufuta thamani hii hapa, 2, 102 00:08:31,290 --> 00:08:41,010 na badala yake tutaweza nakala kulia 1 ndani yake. 103 00:08:41,010 --> 00:08:43,059 Kisha mstari unaofuata kwamba executes, bila shaka - 104 00:08:43,059 --> 00:08:47,150 kama sisi flip nyuma mbali - ni hii 6 uhakika, 105 00:08:47,150 --> 00:08:52,500 ambayo ni hatua ambayo sisi alitaka kuwa na mchoro wetu kabisa kujazwa. 106 00:08:52,500 --> 00:08:58,940 Hivyo flipping nyuma iPad mara moja zaidi, tu hivyo unaweza kuona mchoro kukamilika, 107 00:08:58,940 --> 00:09:06,610 unaweza kuona kwamba tuna 10 katika, 14 katika b, 1 katika TMP, 2 katika x, y na 1 katika. 108 00:09:06,610 --> 00:09:11,000 Je, kuna maswali kuhusu hili? 109 00:09:11,000 --> 00:09:14,640 Je, hii kufanya zaidi hisia, baada ya kutembea kwa njia hiyo? 110 00:09:14,640 --> 00:09:24,850 Kufanya chini hisia? Hopefully si. Sawa. 111 00:09:24,850 --> 00:09:28,230 >> Kuyatumia ni chini sana suala gumu. 112 00:09:28,230 --> 00:09:33,420 Moja ya guys sisi kazi na ana msemo wa kawaida sana: 113 00:09:33,420 --> 00:09:36,590 "Ili kuelewa kuyatumia, lazima kwanza tuelewe kuyatumia." 114 00:09:36,590 --> 00:09:40,530 Ambayo nadhani ni kweli sana. Ni gani kuchukua muda kupata kutumika yake. 115 00:09:40,530 --> 00:09:45,360 Kuchora kura ya picha, kuchora vielelezo kura ya kumbukumbu kama hii moja ni msaada sana, 116 00:09:45,360 --> 00:09:49,480 na baada ya kutembea kwa njia ya mfano baada ya mfano baada ya mfano, 117 00:09:49,480 --> 00:09:54,450 hivyo itabidi kuanza kufanya kidogo zaidi hisia na akili kidogo zaidi na zaidi kidogo akili. 118 00:09:54,450 --> 00:10:01,560 Hatimaye, siku moja, itabidi yote kabisa mastered. 119 00:10:01,560 --> 00:10:13,800 Maswali yoyote kabla ya sisi kuondoka na tatizo ijayo? Wote haki. 120 00:10:13,800 --> 00:10:18,840 Hivyo flip nyuma mbali. 121 00:10:18,840 --> 00:10:23,300 tatizo ijayo tuna tatizo namba 33 kwenye faili I / O. 122 00:10:23,300 --> 00:10:26,350 Kuvuta hii kidogo kidogo. 123 00:10:26,350 --> 00:10:28,710 Tatizo 33 - Ndiyo? 124 00:10:28,710 --> 00:10:32,110 >> [Daniel] mimi tu alikuwa swali haraka. Hii nyota, au kinyota, 125 00:10:32,110 --> 00:10:35,590 ni kuitwa dereferencing wakati matumizi ya kinyota kabla. 126 00:10:35,590 --> 00:10:38,820 Nini ni kuitwa wakati matumizi ampersand kabla? 127 00:10:38,820 --> 00:10:43,140 >> Ampersand kabla ni anuani ya operator. 128 00:10:43,140 --> 00:10:45,880 Basi hebu kitabu nyuma juu. 129 00:10:45,880 --> 00:10:49,310 Lo. Mimi niko katika mode zoom hivyo siwezi kweli kitabu. 130 00:10:49,310 --> 00:10:52,780 Kama sisi kuangalia code hii kweli haraka haki hapa, 131 00:10:52,780 --> 00:10:54,980 tena, kitu kimoja kinachotokea. 132 00:10:54,980 --> 00:10:59,180 Kama sisi kuangalia code haki hii hapa, juu ya mstari huu ambapo sisi kufanya wito wabadilishane, 133 00:10:59,180 --> 00:11:10,460 ampersand ni kusema tu "kupata anuani ambayo variable x maisha." 134 00:11:10,460 --> 00:11:14,460 Wakati compiler yako inaandaa code yako, 135 00:11:14,460 --> 00:11:20,590 ina kweli kimwili ukaandike mahali katika kumbukumbu kwa wote wa vigezo yako ya kuishi. 136 00:11:20,590 --> 00:11:24,910 Na hivyo kile compiler unaweza kisha kufanya mara moja ni compiled kila kitu, 137 00:11:24,910 --> 00:11:31,110 anajua, "Oh, mimi kuweka x katika anuani 10 Mimi kuweka y katika anuani 14.". 138 00:11:31,110 --> 00:11:34,640 Inaweza kisha jaza maadili haya kwa ajili yenu. 139 00:11:34,640 --> 00:11:44,740 Hivyo unaweza basi - inaweza kisha kupita katika hii na kupita & y katika vilevile. 140 00:11:44,740 --> 00:11:50,730 Haya guys kupata anwani, lakini wao pia, wakati wewe kupita yao katika kazi byta, 141 00:11:50,730 --> 00:11:55,690 habari hii ya aina, hii * int haki hapa, anaiambia compiler, 142 00:11:55,690 --> 00:12:01,350 "Sawa, tunakwenda kuwa kutafsiri anwani hii kama anuani ya variable integer." 143 00:12:01,350 --> 00:12:05,900 Kama anwani ya int, ambayo ni tofauti na anwani ya kutofautiana tabia 144 00:12:05,900 --> 00:12:09,930 kwa sababu int inachukua hadi, kwenye mashine ya 32-bit, inachukua hadi ka 4 wa nafasi, 145 00:12:09,930 --> 00:12:13,310 ambapo tabia tu inachukua hadi 1 Byte wa nafasi. 146 00:12:13,310 --> 00:12:17,310 Hivyo ni muhimu kujua pia ni nini - nini anaishi, ni aina gani ya thamani 147 00:12:17,310 --> 00:12:20,340 anaishi katika anuani kwamba got kupita in 148 00:12:20,340 --> 00:12:22,020 Au anwani ya kuwa wewe ni kushughulika na. 149 00:12:22,020 --> 00:12:29,020 Kwa njia hiyo, wengi kujua jinsi bytes wa habari kwa kweli mzigo nje ya RAM yako. 150 00:12:29,020 --> 00:12:31,780 Na kisha, ndiyo, hii operator dereference, kama wewe walikuwa kuuliza, 151 00:12:31,780 --> 00:12:37,200 huenda na wanapata habari katika anuani fulani. 152 00:12:37,200 --> 00:12:42,820 Hivyo anasema, pamoja na hii variable hapa, kutibu yaliyomo kama anuani, 153 00:12:42,820 --> 00:12:47,880 kwenda kwa anwani hiyo, na kujiondoa, mzigo katika processor mzigo, katika daftari 154 00:12:47,880 --> 00:12:56,340 maadili halisi au yaliyomo kwamba kuishi katika anuani hiyo. 155 00:12:56,340 --> 00:12:59,620 Tena maswali? Hizi ni nzuri maswali. 156 00:12:59,620 --> 00:13:01,650 Ni mengi ya istilahi mpya pia. 157 00:13:01,650 --> 00:13:09,800 Ni pia aina ya funky, kuona & na * katika maeneo mbalimbali. 158 00:13:09,800 --> 00:13:13,180 >> Wote haki. 159 00:13:13,180 --> 00:13:18,530 Hivyo nyuma tatizo 33, faili I / O. 160 00:13:18,530 --> 00:13:22,540 Hii ilikuwa ni moja ya matatizo hayo ambayo nadhani michache ya mambo yaliyotokea. 161 00:13:22,540 --> 00:13:25,400 Moja, ni mada uungwana mpya. 162 00:13:25,400 --> 00:13:30,590 Ni iliwasilishwa pretty hivi karibuni kabla ya chemsha bongo, 163 00:13:30,590 --> 00:13:33,400 na kisha nadhani ilikuwa aina ya kama moja ya matatizo hayo neno katika math 164 00:13:33,400 --> 00:13:39,720 ambapo wao kukupa mengi ya habari, lakini wewe kweli si kuishia kuwa na matumizi ya tani ya hiyo. 165 00:13:39,720 --> 00:13:44,060 sehemu ya kwanza ya tatizo hili ni kuelezea nini faili CSV ni. 166 00:13:44,060 --> 00:13:50,620 Sasa, faili CSV, kulingana na maelezo, ni koma waliojitenga maadili faili. 167 00:13:50,620 --> 00:13:55,300 Sababu hizi ni wakati wote kuvutia, na sababu wewe milele matumizi yao, 168 00:13:55,300 --> 00:14:00,800 ni kwa sababu, jinsi wengi wenu wamewahi kutumia mambo kama Excel? 169 00:14:00,800 --> 00:14:03,240 Kielelezo zaidi ya wewe, pengine, au kutumia wakati fulani katika maisha yako. 170 00:14:03,240 --> 00:14:06,430 Utatumia kitu kama Excel. 171 00:14:06,430 --> 00:14:10,940 Ili kupata data nje ya spreadsheet Excel au kufanya aina yoyote ya usindikaji na hilo, 172 00:14:10,940 --> 00:14:17,240 kama alitaka kuandika mpango C au Python mpango, Java mpango, 173 00:14:17,240 --> 00:14:20,070 kukabiliana na data una kuhifadhiwa huko, 174 00:14:20,070 --> 00:14:23,170 moja ya njia ya kawaida ya kupata nje ni katika faili CSV. 175 00:14:23,170 --> 00:14:26,850 Na unaweza kufungua Excel na wakati wewe kwenda 'Save As' mazungumzo, 176 00:14:26,850 --> 00:14:32,840 unaweza kupata nje halisi CSV faili. 177 00:14:32,840 --> 00:14:35,890 >> Handy kujua jinsi ya kukabiliana na mambo hayo. 178 00:14:35,890 --> 00:14:42,010 Njia hiyo kazi ni kwamba ni sawa na - I mean, ni kimsingi mimicking spreadsheet, 179 00:14:42,010 --> 00:14:47,590 ambapo, kama sisi kuona hapa, katika kipande sana kushoto-wengi, 180 00:14:47,590 --> 00:14:49,910 sisi kuwa na majina yote ya mwisho. 181 00:14:49,910 --> 00:14:54,670 Hivyo tuna Malan, kisha Hardison, na kisha Bowden, MacWilliam, na kisha Chan. 182 00:14:54,670 --> 00:14:59,470 Majina yote ya mwisho. Na kisha comma hutenganisha majina ya mwisho kutoka majina kwanza. 183 00:14:59,470 --> 00:15:02,970 Daudi, Nate, Rob, Tommy, na Zamyla. 184 00:15:02,970 --> 00:15:06,850 Mimi daima kuchanganya Robby na Tom. 185 00:15:06,850 --> 00:15:10,940 Na kisha, hatimaye, safu ya tatu ni anwani ya barua pepe. 186 00:15:10,940 --> 00:15:18,500 Mara baada ya kuelewa kwamba, wengine wa mpango ni haki moja kwa moja kutekeleza. 187 00:15:18,500 --> 00:15:23,850 Nini tumekuwa kufanyika ili kuiga muundo sawa katika mpango wetu C 188 00:15:23,850 --> 00:15:27,510 ni tumekuwa kutumika muundo. 189 00:15:27,510 --> 00:15:30,520 Tutaweza kuanza kucheza na haya zaidi kidogo pia. 190 00:15:30,520 --> 00:15:35,790 Tuliona yao kwa kidogo kidogo kwanza katika tatizo kuweka 3, tulipokuwa kushughulika na Mkwawa. 191 00:15:35,790 --> 00:15:40,290 Lakini hii struct wafanyakazi maduka jina la mwisho, jina la kwanza, na barua pepe. 192 00:15:40,290 --> 00:15:44,500 Tu kama faili wetu CSV alikuwa kuhifadhi. 193 00:15:44,500 --> 00:15:47,950 Hivyo hii ni haki ya kuwabadili kutoka format moja hadi nyingine. 194 00:15:47,950 --> 00:15:54,630 Tuna kubadili, katika kesi hii, struct wafanyakazi katika mstari, 195 00:15:54,630 --> 00:15:59,060 line comma-waliojitenga, tu kama hiyo. 196 00:15:59,060 --> 00:16:01,500 Je, hiyo mantiki? You guys wote kuchukuliwa quiz, 197 00:16:01,500 --> 00:16:07,680 hivyo mimi kufikiria una angalau alikuwa na muda wa kufikiri juu ya hili. 198 00:16:07,680 --> 00:16:16,410 >> Katika kazi mshahara, tatizo anatuomba kuchukua katika - zoom we'll katika hii kidogo kidogo - 199 00:16:16,410 --> 00:16:22,480 kuchukua katika muundo wa wafanyakazi, struct wafanyakazi, kwa jina s, 200 00:16:22,480 --> 00:16:30,900 na append yaliyomo yake na faili wetu staff.csv. 201 00:16:30,900 --> 00:16:34,230 Ni zinageuka kuwa hii ni haki moja kwa moja kwa kutumia. 202 00:16:34,230 --> 00:16:37,430 Tutaweza aina ya kucheza karibu na kazi hizi kidogo zaidi leo. 203 00:16:37,430 --> 00:16:44,510 Lakini katika kesi hii, kazi fprintf ni kweli muhimu. 204 00:16:44,510 --> 00:16:51,960 Hivyo, pamoja na fprintf, tunaweza magazeti, kama wewe guys wamekuwa wakitumia printf muda huu wote. 205 00:16:51,960 --> 00:16:55,050 Unaweza printf line kwa faili. 206 00:16:55,050 --> 00:16:59,030 Hivyo badala ya maamuzi tu ya kawaida printf wito ambapo wewe kuwapa string format 207 00:16:59,030 --> 00:17:05,380 na kisha wewe kuchukua nafasi ya vigezo vyote kwa hoja zifuatazo, 208 00:17:05,380 --> 00:17:11,290 na fprintf, hoja yako ya kwanza ni badala faili unataka kuandika. 209 00:17:11,290 --> 00:17:21,170 Kama sisi kuangalia hii katika appliance, kwa mfano, mtu fprintf, 210 00:17:21,170 --> 00:17:25,980 tunaweza kuona tofauti kati ya printf na fprintf. 211 00:17:25,980 --> 00:17:28,960 Mimi itabidi zoom katika hapa kidogo. 212 00:17:28,960 --> 00:17:33,140 Hivyo, pamoja na printf, sisi kuwapa string format, na kisha hoja ya baadae 213 00:17:33,140 --> 00:17:37,580 ni vigezo vyote kwa ajili ya uwekaji au badala ndani ya muundo wa kamba yetu. 214 00:17:37,580 --> 00:17:47,310 Ambapo kwa fprintf, hoja ya kwanza ni kweli hii * faili inayoitwa mkondo. 215 00:17:47,310 --> 00:17:51,800 >> Kusonga nyuma zaidi ya hapa kwa kukodisha yetu, 216 00:17:51,800 --> 00:17:54,550 tumekuwa tayari got faili wetu * mkondo kufunguliwa kwa ajili yetu. 217 00:17:54,550 --> 00:17:57,810 Hiyo ni nini mstari huu kwanza gani; ni kufungua faili staff.csv, 218 00:17:57,810 --> 00:18:01,690 ni kufungua hiyo katika mode append, na wote wa kushoto kwa sisi kufanya ni 219 00:18:01,690 --> 00:18:08,640 andika muundo wafanyakazi na faili. 220 00:18:08,640 --> 00:18:10,870 Na, hebu angalia, kufanya mimi nataka kutumia iPad? 221 00:18:10,870 --> 00:18:17,900 Mimi itabidi kutumia iPad. Tuna utupu - basi s kuweka hii juu ya meza ili niweze kuandika kidogo bora - 222 00:18:17,900 --> 00:18:33,680 kuibatilisha kukodisha na inachukua katika hoja moja, muundo wafanyakazi kuitwa s. 223 00:18:33,680 --> 00:18:44,120 Got braces yetu, sisi tumepewa faili wetu * kuitwa faili, 224 00:18:44,120 --> 00:18:48,380 tuna fopen yetu line tuliyopewa 225 00:18:48,380 --> 00:18:51,890 na mimi itabidi kuandika ni kama dots tangu ni tayari katika pedia. 226 00:18:51,890 --> 00:19:00,530 Na kisha kwenye line yetu ijayo, sisi ni kwenda kufanya wito kwa fprintf 227 00:19:00,530 --> 00:19:03,700 na sisi ni kwenda kupita katika faili kwamba tunataka magazeti na, 228 00:19:03,700 --> 00:19:10,290 na kisha muundo wetu kamba, ambayo - 229 00:19:10,290 --> 00:19:14,300 Mimi itabidi basi guys kuniambia nini inaonekana kama. 230 00:19:14,300 --> 00:19:20,500 Vipi kuhusu wewe, Stella? Unajua nini sehemu ya kwanza ya string format inaonekana kama? 231 00:19:20,500 --> 00:19:24,270 [Stella] mimi nina uhakika. >> Jisikie huru kuuliza Jimmy. 232 00:19:24,270 --> 00:19:27,690 Unajua, Jimmy? 233 00:19:27,690 --> 00:19:31,000 [Jimmy] Je, ni tu kuwa mwisho? Mimi sijui. Mimi si uhakika kabisa. 234 00:19:31,000 --> 00:19:39,020 >> Sawa. Vipi kuhusu, hakuwa mtu yeyote kupata hii sahihi kwenye mtihani? 235 00:19:39,020 --> 00:19:41,770 No wote wa kulia. 236 00:19:41,770 --> 00:19:47,920 Ni zinageuka kuwa hapa wote sisi kufanya ni tunataka kila sehemu ya wafanyakazi muundo wetu 237 00:19:47,920 --> 00:19:53,290 kuchapishwa kwa kama kamba ndani ya faili wetu. 238 00:19:53,290 --> 00:19:59,900 Sisi tu kutumia badala string tabia ya mara tatu tofauti kwa sababu tuna jina la mwisho 239 00:19:59,900 --> 00:20:07,160 ikifuatiwa na comma, basi jina la kwanza na kufuatiwa na comma, 240 00:20:07,160 --> 00:20:12,430 na kisha hatimaye anuani ya barua pepe ambayo ni ikifuatiwa - ambayo si 241 00:20:12,430 --> 00:20:15,140 kufaa juu ya screen yangu - lakini ni ikifuatiwa na tabia newline. 242 00:20:15,140 --> 00:20:20,060 Hivyo nina kwenda kuandika tu chini huko. 243 00:20:20,060 --> 00:20:23,560 Na kisha kufuatia muundo wetu kamba, 244 00:20:23,560 --> 00:20:27,880 sisi tu substitutions, ambayo sisi kupata kutumia nukuu dot 245 00:20:27,880 --> 00:20:31,370 kuwa tuliona katika tatizo kuweka 3. 246 00:20:31,370 --> 00:20:48,820 Tunaweza kutumia s.last, s.first, na s.email 247 00:20:48,820 --> 00:20:58,990 mbadala katika maadili hayo matatu katika format string yetu. 248 00:20:58,990 --> 00:21:06,190 Hivyo ni jinsi gani kwamba kwenda? Mantiki? 249 00:21:06,190 --> 00:21:09,700 Ndiyo? Hakuna? Inawezekana? Sawa. 250 00:21:09,700 --> 00:21:14,180 >> Jambo la mwisho kwamba sisi kufanya baada tumekuwa kuchapishwa na baada tumekuwa kufunguliwa faili yetu: 251 00:21:14,180 --> 00:21:17,370 wakati wowote tumekuwa kufunguliwa faili, sisi daima kuwa kukumbuka kulifunga. 252 00:21:17,370 --> 00:21:19,430 Kwa sababu vinginevyo sisi kuishia kinachovuja kumbukumbu, 253 00:21:19,430 --> 00:21:22,500 kutumia up descriptors faili. 254 00:21:22,500 --> 00:21:25,950 Hivyo kuifunga, ambayo kazi gani sisi kutumia? Danieli? 255 00:21:25,950 --> 00:21:30,120 [Daniel] fclose? >> Fclose, hasa. 256 00:21:30,120 --> 00:21:37,520 Hivyo sehemu ya mwisho ya tatizo hili lilikuwa vizuri karibu faili, kutumia kazi fclose, 257 00:21:37,520 --> 00:21:40,370 ambayo tu inaonekana kama kwamba. 258 00:21:40,370 --> 00:21:43,880 Si pia mambo. 259 00:21:43,880 --> 00:21:46,990 Cool. 260 00:21:46,990 --> 00:21:49,520 Basi hiyo ni tatizo 33 juu ya chemsha bongo. 261 00:21:49,520 --> 00:21:52,480 Tutaweza kuwa dhahiri zaidi faili I / O kuja juu. 262 00:21:52,480 --> 00:21:55,130 Tutaweza kufanya kidogo zaidi katika hotuba ya leo, au katika sehemu ya leo, 263 00:21:55,130 --> 00:22:01,710 kwa sababu hiyo ni nini kinaendelea na kuunda wingi wa pset hii ujao. 264 00:22:01,710 --> 00:22:05,020 Hebu hoja juu ya kutoka Jaribio katika hatua hii. Ndiyo? 265 00:22:05,020 --> 00:22:10,880 >> [Charlotte]] Mbona fclose (faili) badala ya fclose (staff.csv)? 266 00:22:10,880 --> 00:22:19,100 >> Ah. Kwa sababu ni zinageuka kuwa - hivyo swali, ambayo ni moja kubwa, 267 00:22:19,100 --> 00:22:27,800 ni kwa nini, wakati sisi kuandika fclose, ni sisi kuandika fclose (faili) nyota variable 268 00:22:27,800 --> 00:22:33,680 kinyume na jina la faili, staff.csv? Ni kwamba ni sahihi? Yeah. 269 00:22:33,680 --> 00:22:39,570 Basi hebu tuangalie. Kama mimi kubadili nyuma kwa mbali yangu, 270 00:22:39,570 --> 00:22:45,040 na hebu angalia kazi fclose. 271 00:22:45,040 --> 00:22:51,460 Hivyo kazi fclose kufunga mkondo na inachukua katika pointer mkondo kwamba tunataka kuifunga, 272 00:22:51,460 --> 00:22:57,010 kinyume na jina halisi faili kwamba tunataka kuifunga. 273 00:22:57,010 --> 00:23:01,620 Na hii ni kwa sababu ya nyuma ya pazia, wakati kufanya wito kwa fopen, 274 00:23:01,620 --> 00:23:12,020 unapojitangaza SVG, wewe ni kweli kugawa kumbukumbu kuhifadhi habari kuhusu faili. 275 00:23:12,020 --> 00:23:16,380 Hivyo una faili pointer kwamba ina taarifa kuhusu faili, 276 00:23:16,380 --> 00:23:23,080 kama vile ni wazi, ukubwa wake, ambapo sasa uko katika faili, 277 00:23:23,080 --> 00:23:29,100 hivyo kwamba unaweza kufanya kusoma na kuandika wito kwa mahali fulani ndani ya faili. 278 00:23:29,100 --> 00:23:38,060 Unaishia kufunga pointer badala ya kufunga jina faili. 279 00:23:38,060 --> 00:23:48,990 >> Ndiyo? [Daniel] Hivyo ili kutumia mshahara, ungeweza kusema - jinsi gani kupata pembejeo user? 280 00:23:48,990 --> 00:23:53,830 Je fprintf kutenda kama GetString kwa maana kwamba itabidi kusubiri kwa ajili ya pembejeo user 281 00:23:53,830 --> 00:23:57,180 na kuuliza wewe andika haya - au kusubiri kwa wewe andika mambo haya matatu katika? 282 00:23:57,180 --> 00:24:00,480 Au wewe haja ya kutumia kitu kutekeleza kukodisha? 283 00:24:00,480 --> 00:24:04,100 >> Yeah. Hivyo sisi siyo - Swali, ni jinsi gani sisi kupata pembejeo user 284 00:24:04,100 --> 00:24:09,220 ili kutekeleza kukodisha? Na nini sisi hapa ni mpigaji wa kukodisha, 285 00:24:09,220 --> 00:24:17,690 kupita katika hii struct wafanyakazi na yote ya data kuhifadhiwa katika struct tayari. 286 00:24:17,690 --> 00:24:22,990 Hivyo fprintf ni uwezo wa kuandika tu kwamba data moja kwa moja na faili. 287 00:24:22,990 --> 00:24:25,690 Hakuna kusubiri kwa ajili ya pembejeo mtumiaji. 288 00:24:25,690 --> 00:24:32,110 user Tayari aliyopewa pembejeo na vizuri kuweka katika struct hii wafanyakazi. 289 00:24:32,110 --> 00:24:36,510 Na mambo, bila shaka, inaweza kuvunja kama yoyote ya kuyatumia wale walikuwa null, 290 00:24:36,510 --> 00:24:40,370 hivyo sisi kitabu nyuma hadi hapa na sisi kuangalia struct yetu. 291 00:24:40,370 --> 00:24:43,640 Tuna string mwisho, kamba ya kwanza, kamba ya barua pepe. 292 00:24:43,640 --> 00:24:48,530 Sasa tunajua kwamba wale wote kweli, chini ya Hood, ni Char * vigezo. 293 00:24:48,530 --> 00:24:53,470 Kwamba wanaweza au kuwa akizungumzia null. 294 00:24:53,470 --> 00:24:55,800 Wanaweza kuwa akizungumzia kumbukumbu juu ya chungu, 295 00:24:55,800 --> 00:24:59,650 labda kumbukumbu juu ya stack. 296 00:24:59,650 --> 00:25:04,580 Sisi kwa kweli sijui, lakini ikiwa yoyote ya kuyatumia haya ni null, au batili, 297 00:25:04,580 --> 00:25:08,120 kwamba utakuwa dhahiri ajali mshahara wetu kazi. 298 00:25:08,120 --> 00:25:11,050 Hiyo ilikuwa kitu ambacho ilikuwa ni aina ya zaidi ya upeo wa mtihani. 299 00:25:11,050 --> 00:25:16,440 Sisi siyo wasiwasi juu ya hilo. 300 00:25:16,440 --> 00:25:22,170 Mkuu. Sawa. Hivyo kuhama kutoka chemsha bongo. 301 00:25:22,170 --> 00:25:25,760 >> Hebu kuifunga guy, na sisi ni kwenda kuangalia pset 4. 302 00:25:25,760 --> 00:25:34,700 Hivyo kama wewe guys kuangalia spec pset, mara moja unaweza kupata hiyo, cs50.net/quizzes, 303 00:25:34,700 --> 00:25:42,730 sisi ni kwenda kupitia wachache wa matatizo leo sehemu. 304 00:25:42,730 --> 00:25:52,240 Mimi nina scrolling chini - sehemu ya maswali huanza kwenye ukurasa wa tatu wa spec pset. 305 00:25:52,240 --> 00:25:57,800 Na sehemu ya kwanza anauliza wewe kwenda na kuangalia mfupi juu ya imetuma na mabomba. 306 00:25:57,800 --> 00:26:02,820 Ambayo ilikuwa aina ya short baridi, inaonyesha baadhi ya mwezi, baridi tricks mstari amri kwamba unaweza kutumia. 307 00:26:02,820 --> 00:26:06,050 Na kisha sisi tumepewa maswali kadhaa kwa ajili yenu pia. 308 00:26:06,050 --> 00:26:10,860 Hii swali la kwanza kuhusu mito, ambayo printf anaandika by default, 309 00:26:10,860 --> 00:26:15,920 sisi aina ya kuguswa juu kidogo kidogo tu wakati iliyopita. 310 00:26:15,920 --> 00:26:22,380 Hii fprintf kwamba tulikuwa tu kujadili inachukua katika mkondo faili * kama hoja yake. 311 00:26:22,380 --> 00:26:26,580 fclose inachukua katika mkondo * faili kama vile, 312 00:26:26,580 --> 00:26:32,660 na thamani ya kurudi kwa fopen inakupa * faili mkondo pia. 313 00:26:32,660 --> 00:26:36,060 sababu hatujaona walio kabla wakati tumekuwa kushughulikiwa na printf 314 00:26:36,060 --> 00:26:39,450 ni kwa sababu ana printf mkondo default. 315 00:26:39,450 --> 00:26:41,810 Na mkondo default ambayo anaandika 316 00:26:41,810 --> 00:26:45,190 utagundua kuhusu katika muda mfupi. 317 00:26:45,190 --> 00:26:50,080 Hivyo dhahiri kuangalia ni. 318 00:26:50,080 --> 00:26:53,010 >> Katika sehemu ya leo, sisi ni kwenda kuzungumza kidogo kuhusu GDB, 319 00:26:53,010 --> 00:26:57,720 tangu zaidi ya ukoo wewe ni pamoja na hayo, mazoezi zaidi kupata pamoja na hayo, 320 00:26:57,720 --> 00:27:01,390 bora na uwezo utakuwa kwa kweli kuwasaka mende katika code yako mwenyewe. 321 00:27:01,390 --> 00:27:05,540 Hii kasi ya mchakato wa debugging juu mno. 322 00:27:05,540 --> 00:27:09,230 Hivyo kwa kutumia printf, kila wakati kufanya kwamba una recompile code yako, 323 00:27:09,230 --> 00:27:13,000 una kuendesha tena, wakati mwingine una hoja wito printf kote, 324 00:27:13,000 --> 00:27:17,100 maoni nje code, ni tu inachukua muda. 325 00:27:17,100 --> 00:27:20,850 Lengo letu ni kujaribu na kuwashawishi kwamba kwa GDB, unaweza kimsingi 326 00:27:20,850 --> 00:27:26,810 printf chochote katika hatua yoyote katika code yako na wewe kamwe kuwa na recompile yake. 327 00:27:26,810 --> 00:27:35,120 Huwezi kuwa na kuanza na kuendelea guessing ambapo kwa printf ijayo. 328 00:27:35,120 --> 00:27:40,910 Kitu cha kwanza kufanya ni nakala line hii na kupata kanuni ya sehemu ya mbali ya mtandao. 329 00:27:40,910 --> 00:27:47,530 Mimi nina kuiga line hii ya kificho kwamba anasema, "wget ​​http://cdn.cs50.net". 330 00:27:47,530 --> 00:27:49,510 Mimi naenda nakala yake. 331 00:27:49,510 --> 00:27:55,950 Mimi nina kwenda juu kwa appliance wangu, zoom nje hivyo unaweza kuona nini mimi kufanya, 332 00:27:55,950 --> 00:28:01,890 pasting ni huko, na wakati mimi hit Enter, amri hii wget literally ni mtandao kupata. 333 00:28:01,890 --> 00:28:06,210 Ni kwenda kubomoa faili hii mbali ya mtandao, 334 00:28:06,210 --> 00:28:11,790 na ni kwenda kuokoa ni saraka ya sasa. 335 00:28:11,790 --> 00:28:21,630 Sasa kama mimi kuorodhesha saraka yangu sasa unaweza kuona kwamba mimi nimepata faili hii section5.zip haki huko. 336 00:28:21,630 --> 00:28:25,260 njia ya kukabiliana na kwamba guy ni unzip yake, 337 00:28:25,260 --> 00:28:27,650 ambayo unaweza kufanya katika mstari amri, kama hii. 338 00:28:27,650 --> 00:28:31,880 Section5.zip. 339 00:28:31,880 --> 00:28:36,980 Kwamba kutakuwa na unzip yake, kutengeneza folda kwa ajili yangu, 340 00:28:36,980 --> 00:28:40,410 inflate yote yaliyomo, kuziweka katika huko. 341 00:28:40,410 --> 00:28:47,410 Hivyo sasa naweza kwenda katika sehemu ya saraka yangu 5 kutumia amri cd. 342 00:28:47,410 --> 00:28:58,310 Wazi screen kutumia wazi. Hivyo wazi screen. 343 00:28:58,310 --> 00:29:02,280 Sasa mimi nimepata nzuri safi terminal kushughulikia. 344 00:29:02,280 --> 00:29:06,200 >> Sasa kama mimi orodha files wote kwamba mimi kuona katika saraka hii, 345 00:29:06,200 --> 00:29:12,270 unaweza kuona kwamba mimi nimepata files nne: buggy1, buggy2, buggy3, na buggy4. 346 00:29:12,270 --> 00:29:16,180 Nimekuwa pia got files yao sambamba. C. 347 00:29:16,180 --> 00:29:20,400 Sisi siyo kwenda kuangalia files. C kwa sasa. 348 00:29:20,400 --> 00:29:24,140 Badala yake, tunakwenda kuzitumia wakati sisi kufungua GDB. 349 00:29:24,140 --> 00:29:28,220 Tumekuwa naendelea yao karibu ili tuweze kupata code halisi chanzo wakati sisi ni kutumia GDB, 350 00:29:28,220 --> 00:29:32,740 lakini lengo la sehemu hii ya sehemu ni kwa tinker karibu na GDB 351 00:29:32,740 --> 00:29:40,370 na kuona ni jinsi gani tunaweza kuitumia kufikiri nini kinaendelea kibaya na kila moja ya hizi programu Buggy nne. 352 00:29:40,370 --> 00:29:43,380 Hivyo sisi ni kwenda tu kuzunguka chumba kweli haraka, 353 00:29:43,380 --> 00:29:47,000 na mimi naenda kuuliza mtu kukimbia moja ya mipango Buggy, 354 00:29:47,000 --> 00:29:54,730 na kisha tutaweza kwenda kama kikundi kupitia GDB, na tutaweza kuona nini tunaweza kufanya kwa kurekebisha programu hizi, 355 00:29:54,730 --> 00:29:58,460 au kwa angalau kutambua nini kinaendelea katika makosa ya kila mmoja wao. 356 00:29:58,460 --> 00:30:04,760 Hebu kuanza hapa kwa Danieli. Je kukimbia buggy1? Hebu kuona nini kinatokea. 357 00:30:04,760 --> 00:30:09,470 [Daniel] Ni anasema kuna kosa maombi. >> Yeah. Hasa. 358 00:30:09,470 --> 00:30:12,460 Hivyo kama mimi kukimbia buggy1, mimi kupata kosa seg. 359 00:30:12,460 --> 00:30:16,210 Katika hatua hii, mimi naweza kwenda na kufungua buggy1.c, 360 00:30:16,210 --> 00:30:19,450 kujaribu na kufikiri nini kinaendelea vibaya, 361 00:30:19,450 --> 00:30:22,000 lakini moja ya mambo ya obnoxious kuhusu kosa hili seg kosa 362 00:30:22,000 --> 00:30:27,610 ni kwamba haina kukuambia juu ya nini mstari wa mambo mpango kweli potoka na kukatika. 363 00:30:27,610 --> 00:30:29,880 Wewe aina ya kuwa na kuangalia code 364 00:30:29,880 --> 00:30:33,990 na takwimu nje kwa kutumia dhana na kuangalia au printf kwa kuona nini kinaendelea vibaya. 365 00:30:33,990 --> 00:30:37,840 Moja ya mambo ya coolest kuhusu GDB ni kwamba ni kweli, kweli rahisi 366 00:30:37,840 --> 00:30:42,170 kufikiri mstari wa saa ambayo programu yako shambulio. 367 00:30:42,170 --> 00:30:46,160 Ni kabisa na thamani yake na kuitumia, hata kama tu kwa ajili hiyo. 368 00:30:46,160 --> 00:30:56,190 Hivyo kwa Boot juu GDB, ninapoandika GDB, na kisha mimi kuwapa njia ya executable kwamba nataka kukimbia. 369 00:30:56,190 --> 00:31:01,960 Hapa mimi nina kuandika gdb ./buggy1. 370 00:31:01,960 --> 00:31:06,600 Hit Ingiza. Anitiaye habari hii yote hakimiliki, 371 00:31:06,600 --> 00:31:13,000 na chini hapa utaona mstari huu kwamba anasema, "ishara Akisoma / nyumbani / 372 00:31:13,000 --> 00:31:17,680 jharvard/section5/buggy1. " 373 00:31:17,680 --> 00:31:22,060 Na kama yote inakwenda vizuri, utaona ni magazeti ujumbe kwamba inaonekana kama hii. 374 00:31:22,060 --> 00:31:25,500 Ni itabidi kusoma alama, hivyo itabidi kusema "mimi nina kusoma alama kutoka executable faili yako," 375 00:31:25,500 --> 00:31:29,900 na kisha itakuwa na hii "kufanyika" ujumbe zaidi ya hapa. 376 00:31:29,900 --> 00:31:35,410 Kama unaweza kuona baadhi ya tofauti nyingine ya hii, au unaweza kuona ni hakuweza kupata alama 377 00:31:35,410 --> 00:31:41,460 au kitu kama hicho, nini maana ya ni kwamba wewe tu si compiled executable yako vizuri. 378 00:31:41,460 --> 00:31:49,980 Wakati sisi kukusanya mipango kwa ajili ya matumizi na GDB, inabidi kutumia bendera maalum-g, 379 00:31:49,980 --> 00:31:54,540 na kwamba ni kosa kwa default kama wewe kukusanya mipango yako, tu na kuandika kufanya 380 00:31:54,540 --> 00:31:59,320 au kufanya Buggy au kufanya kuokoa, yoyote ya wale. 381 00:31:59,320 --> 00:32:07,800 Lakini kama wewe ni kuandaa manually na Clang, basi itabidi kwenda katika na ni pamoja na kwamba-g bendera. 382 00:32:07,800 --> 00:32:10,310 >> Katika hatua hii, sasa kwamba tuna GDB wetu haraka, 383 00:32:10,310 --> 00:32:12,310 ni pretty rahisi kuendesha programu. 384 00:32:12,310 --> 00:32:19,740 Tunaweza aidha aina ya kukimbia, au tunaweza aina tu r. 385 00:32:19,740 --> 00:32:22,820 Wengi GDB amri inaweza kuwa abbreviated. 386 00:32:22,820 --> 00:32:25,940 Kawaida kwa moja tu au barua wanandoa, ambayo ni pretty nice. 387 00:32:25,940 --> 00:32:30,980 Hivyo Saad, kama aina r na hit Enter, nini kitatokea? 388 00:32:30,980 --> 00:32:39,390 [Saad] I got SIGSEGV, kosa segmentation, na kisha gobbledygook hii yote. 389 00:32:39,390 --> 00:32:43,650 >> Yeah. 390 00:32:43,650 --> 00:32:47,990 Kama sisi ni kuona kwenye screen hivi sasa, na kama Saad alisema, 391 00:32:47,990 --> 00:32:53,430 wakati sisi aina kukimbia au r na hit Enter, sisi bado kupata huo seg kosa. 392 00:32:53,430 --> 00:32:55,830 Hivyo kutumia GDB haina kutatua tatizo letu. 393 00:32:55,830 --> 00:32:59,120 Lakini inatupa baadhi gobbledygook, na zinageuka kuwa hii gobbledygook 394 00:32:59,120 --> 00:33:03,080 kweli inatuambia ambapo ni kinachotokea. 395 00:33:03,080 --> 00:33:10,680 Kuchanganua hii kidogo kidogo, hii kidogo kwanza ni kazi ambayo kila kitu kinaendelea vibaya. 396 00:33:10,680 --> 00:33:20,270 Kuna hii __ strcmp_sse4_2, na inatuambia kwamba kinachotokea katika faili hii 397 00:33:20,270 --> 00:33:29,450 kuitwa sysdeps/i386, yote hii, tena, aina ya fujo - lakini line 254. 398 00:33:29,450 --> 00:33:31,670 Hiyo ni aina ya vigumu kuchanganua. Kawaida wakati unaweza kuona mambo kama haya, 399 00:33:31,670 --> 00:33:38,770 hiyo ina maana kwamba ni seg faulting katika moja ya maktaba mfumo. 400 00:33:38,770 --> 00:33:43,220 Hivyo kitu cha kufanya na strcmp. You guys tumeona strcmp kabla. 401 00:33:43,220 --> 00:33:52,730 Si pia mambo, lakini anafanya hii ina maana kwamba strcmp ni kuvunjwa au kwamba kuna tatizo na strcmp? 402 00:33:52,730 --> 00:33:57,110 Unafikiri, Alexander? 403 00:33:57,110 --> 00:34:04,890 [Alexander] Je kwamba - ni 254 mstari? Na - sio binary, lakini siyo taken zao, 404 00:34:04,890 --> 00:34:10,590 na kisha kuna lugha nyingine kwa ajili ya kazi ya kila. Ni kwamba 254 katika kazi hiyo, au -? 405 00:34:10,590 --> 00:34:21,460 >> Ni line 254. Inaonekana kama katika faili hii. Hii, hivyo ni mkutano code pengine. 406 00:34:21,460 --> 00:34:25,949 >> Lakini, mimi nadhani jambo kubwa zaidi ni, kwa sababu tumekuwa Gotten kosa seg, 407 00:34:25,949 --> 00:34:29,960 na inaonekana kama ni kuja kutoka kazi strcmp, 408 00:34:29,960 --> 00:34:38,030 nini hii inadokeza, basi, strcmp kwamba ni kuvunjwa? 409 00:34:38,030 --> 00:34:42,290 Ni lazima si, hopefully. Hivyo tu kwa sababu una kosa segmentation 410 00:34:42,290 --> 00:34:49,480 katika moja ya kazi za mfumo, kawaida hiyo ina maana kwamba wewe tu si iitwayo kwa usahihi. 411 00:34:49,480 --> 00:34:52,440 kitu ya haraka ya kufanya kufikiri nini ni kweli kinachoendelea 412 00:34:52,440 --> 00:34:55,500 wakati unaweza kuona kitu kama mambo haya, wakati wowote unaweza kuona kosa seg, 413 00:34:55,500 --> 00:34:59,800 hasa kama una mpango wa hiyo kutumia zaidi kuliko tu kuu, 414 00:34:59,800 --> 00:35:03,570 ni kutumia backtrace. 415 00:35:03,570 --> 00:35:13,080 Mimi abbreviate backtrace kwa kuandika bt, kinyume na neno kamili backtrace. 416 00:35:13,080 --> 00:35:16,510 Lakini Charlotte, nini kinatokea pale unapoandika bt na hit Enter? 417 00:35:16,510 --> 00:35:23,200 [Charlotte] Inaonyesha yangu mistari mbili, line 0 na mstari 1. 418 00:35:23,200 --> 00:35:26,150 >> Yeah. Hivyo mstari na mstari 0 1. 419 00:35:26,150 --> 00:35:34,560 Hizi ni halisi stack muafaka kuwa walikuwa sasa katika kucheza wakati mpango wako kugonga. 420 00:35:34,560 --> 00:35:42,230 Kuanzia sura topmost, sura 0, na kwenda chini-wengi, ambayo ni sura ya 1. 421 00:35:42,230 --> 00:35:45,140 Frame yetu topmost ni sura strcmp. 422 00:35:45,140 --> 00:35:50,080 Unaweza kufikiri ya hii kama sawa na kwamba tatizo tulikuwa tu kufanya juu ya chemsha bongo kwa kuyatumia, 423 00:35:50,080 --> 00:35:54,890 ambapo tulikuwa wabadilishane stack frame juu ya sura kuu stack, 424 00:35:54,890 --> 00:35:59,700 na tulikuwa na vigezo kwamba byta alikuwa kutumia juu ya vigezo kwamba alikuwa kutumia kuu. 425 00:35:59,700 --> 00:36:08,440 Hapa ajali wetu kilichotokea katika kazi yetu strcmp, ambayo aliitwa na kazi yetu kuu, 426 00:36:08,440 --> 00:36:14,370 na backtrace anatupa si tu kazi katika mambo ambayo alishindwa, 427 00:36:14,370 --> 00:36:16,440 lakini ni pia anatuambia ambapo kila kitu aliitwa kutoka. 428 00:36:16,440 --> 00:36:18,830 Hivyo kama mimi kitabu juu zaidi kidogo kwa haki, 429 00:36:18,830 --> 00:36:26,110 tunaweza kuona kwamba yeah, tulipokuwa kwenye mstari 254 ya faili hii strcmp-sse4.s. 430 00:36:26,110 --> 00:36:32,540 Lakini wito huo ulitolewa katika buggy1.c, mstari 6. 431 00:36:32,540 --> 00:36:35,960 Hivyo kwamba maana tunaweza kufanya - ni sisi unaweza tu kwenda kuangalia nje na kuona nini kinachoendelea 432 00:36:35,960 --> 00:36:39,930 katika buggy1.c, mstari 6. 433 00:36:39,930 --> 00:36:43,780 Tena, kuna njia kadhaa za kufanya hivyo. Moja ni exit nje ya GDB 434 00:36:43,780 --> 00:36:49,460 au kuwa na code yako wazi katika dirisha lingine na rejea msalaba. 435 00:36:49,460 --> 00:36:54,740 Kwamba, katika yenyewe, ni pretty Handy kwa sababu sasa kama wewe ni katika masaa ya ofisi 436 00:36:54,740 --> 00:36:57,220 na nimepata kosa seg na TF yako s wanashangaa ambapo kila kitu kilikuwa kuvunja, 437 00:36:57,220 --> 00:36:59,710 unaweza tu kusema, "Oh, mstari 6 sijui nini kinaendelea., 438 00:36:59,710 --> 00:37:03,670 lakini kitu kuhusu mstari 6 ni kusababisha mpango wangu kuvunja. " 439 00:37:03,670 --> 00:37:10,430 njia nyingine ya kufanya hivyo ni unaweza kutumia amri hii inaitwa orodha katika GDB. 440 00:37:10,430 --> 00:37:13,650 Unaweza pia abbreviate kwa l. 441 00:37:13,650 --> 00:37:18,910 Hivyo kama sisi hit l, je, sisi hapa? 442 00:37:18,910 --> 00:37:21,160 Sisi kupata rundo zima ya mambo weird. 443 00:37:21,160 --> 00:37:26,030 Hii ni halisi mkutano code 444 00:37:26,030 --> 00:37:29,860 kwamba ni katika strcmp_sse4_2. 445 00:37:29,860 --> 00:37:32,440 Hii inaonekana aina ya funky, 446 00:37:32,440 --> 00:37:36,520 na sababu sisi ni kupata hii ni kwa sababu sasa hivi, 447 00:37:36,520 --> 00:37:40,160 GDB ana yetu katika sura 0. 448 00:37:40,160 --> 00:37:43,070 >> Hivyo wakati wowote sisi kuangalia vigezo, wakati wowote sisi kuangalia chanzo code, 449 00:37:43,070 --> 00:37:50,530 sisi ni kuangalia chanzo code linafanywa na sura stack tuko sasa in 450 00:37:50,530 --> 00:37:53,200 Hivyo ili kupata kitu chochote maana, tuna 451 00:37:53,200 --> 00:37:57,070 hoja kwa frame stack kwamba mantiki zaidi. 452 00:37:57,070 --> 00:38:00,180 Katika kesi hiyo, kuu stack frame zingeweza kidogo maana zaidi, 453 00:38:00,180 --> 00:38:02,680 kwa sababu kwamba alikuwa kweli kificho kwamba sisi aliandika. 454 00:38:02,680 --> 00:38:05,330 Si code strcmp. 455 00:38:05,330 --> 00:38:08,650 njia unaweza hoja kati ya muafaka, katika kesi hii, kwa sababu tuna mbili, 456 00:38:08,650 --> 00:38:10,430 tuna 0 na 1, 457 00:38:10,430 --> 00:38:13,650 unaweza kufanya hivyo kwa juu na amri chini. 458 00:38:13,650 --> 00:38:18,480 Kama mimi hoja juu frame moja, 459 00:38:18,480 --> 00:38:21,770 sasa mimi nina katika sura kuu stack. 460 00:38:21,770 --> 00:38:24,330 Mimi unaweza hoja chini kwenda nyuma ambapo mimi nilikuwa, 461 00:38:24,330 --> 00:38:32,830 kwenda juu tena, kwenda chini tena, na kwenda juu tena. 462 00:38:32,830 --> 00:38:39,750 Kama umewahi kufanya mpango wako katika GDB, kupata ajali, unaweza kupata backtrace, 463 00:38:39,750 --> 00:38:42,380 na unaweza kuona kwamba ni katika baadhi faili kwamba huwezi kujua nini kinaendelea. 464 00:38:42,380 --> 00:38:45,460 Unaweza kujaribu orodha, code haangalii familiar na wewe, 465 00:38:45,460 --> 00:38:48,150 kuangalia muafaka yako na takwimu kutoka wapi. 466 00:38:48,150 --> 00:38:51,010 Wewe pengine katika sura makosa stack. 467 00:38:51,010 --> 00:38:58,760 Au angalau wewe ni katika sura ya stack ambayo si moja kuwa unaweza kweli Debug. 468 00:38:58,760 --> 00:39:03,110 Sasa kwa kuwa tuko katika sura sahihi stack, tuko katika kuu, 469 00:39:03,110 --> 00:39:08,100 sasa tunaweza kutumia amri orodha kufikiri nini line ilikuwa. 470 00:39:08,100 --> 00:39:13,590 Na unaweza kuona, ni printed hivyo kwa ajili yetu hapa hapa. 471 00:39:13,590 --> 00:39:19,470 Lakini tunaweza hit kuorodhesha wote ni sawa, na orodha hii inatupa printout nzuri 472 00:39:19,470 --> 00:39:23,920 wa chanzo halisi kificho kwamba kinaendelea katika hapa. 473 00:39:23,920 --> 00:39:26,420 >> Hasa, tunaweza kuangalia mstari 6. 474 00:39:26,420 --> 00:39:29,330 Tunaweza kuona nini kinaendelea hapa. 475 00:39:29,330 --> 00:39:31,250 Na inaonekana kama sisi ni kufanya kulinganisha string 476 00:39:31,250 --> 00:39:41,050 kati ya string "CS50 miamba" na argv [1]. 477 00:39:41,050 --> 00:39:45,700 Kitu kuhusu hili crashing. 478 00:39:45,700 --> 00:39:54,120 Hivyo Missy, je, una mawazo yoyote juu ya nini kinaweza kuwa kinachoendelea hapa? 479 00:39:54,120 --> 00:39:59,400 [Missy] Mimi sijui ni kwa nini ni crashing. >> Wewe sijui nini ni crashing? 480 00:39:59,400 --> 00:40:02,700 Jimmy, mawazo yoyote? 481 00:40:02,700 --> 00:40:06,240 [Jimmy] Mimi si uhakika kabisa, lakini mara ya mwisho sisi kutumika string kulinganisha, 482 00:40:06,240 --> 00:40:10,260 au strcmp, tulikuwa kama kesi tatu tofauti chini yake. 483 00:40:10,260 --> 00:40:12,800 Hatukuwa na ==, sidhani, haki katika mstari ule wa kwanza. 484 00:40:12,800 --> 00:40:16,700 Badala yake ilikuwa waliojitenga katika tatu, na moja ilikuwa == 0, 485 00:40:16,700 --> 00:40:19,910 moja alikuwa <0, nadhani, na moja ilikuwa> 0. 486 00:40:19,910 --> 00:40:22,590 Hivyo labda kitu kama hicho? >> Yeah. Hivyo kuna suala hili 487 00:40:22,590 --> 00:40:27,200 wa tunafanya kulinganisha kwa usahihi? 488 00:40:27,200 --> 00:40:31,660 Stella? Mawazo yoyote? 489 00:40:31,660 --> 00:40:38,110 [Stella] mimi nina uhakika. >> Si uhakika. Danieli? Mawazo? Sawa. 490 00:40:38,110 --> 00:40:44,770 Ni zinageuka nini kinatokea hapa hapa ni wakati sisi mbio mpango 491 00:40:44,770 --> 00:40:48,370 na sisi got kosa seg, wakati wewe mbio mpango kwa mara ya kwanza, Danieli, 492 00:40:48,370 --> 00:40:50,800 gani kuwapa yoyote hoja mstari amri? 493 00:40:50,800 --> 00:40:58,420 [Daniel] No No >> Katika kesi hiyo, ni nini thamani ya argv [1]? 494 00:40:58,420 --> 00:41:00,920 >> Kuna faida yeyote. >> Haki. 495 00:41:00,920 --> 00:41:06,120 Naam, hakuna mwafaka string thamani. 496 00:41:06,120 --> 00:41:10,780 Lakini kuna baadhi ya thamani. Nini thamani ya kwamba anapata kuhifadhiwa katika huko? 497 00:41:10,780 --> 00:41:15,130 >> Thamani takataka? >> Ni ama thamani ya takataka au, katika kesi hii, 498 00:41:15,130 --> 00:41:19,930 mwisho wa safu argv daima ni terminated na null. 499 00:41:19,930 --> 00:41:26,050 Basi nini kweli got kuhifadhiwa katika kuna null. 500 00:41:26,050 --> 00:41:30,810 njia nyingine ya kutatua hili, badala ya kufikiria njia, 501 00:41:30,810 --> 00:41:33,420 ni kujaribu kuchapa nje. 502 00:41:33,420 --> 00:41:35,880 Hii ni pale ambapo mimi alikuwa akisema kwamba kwa kutumia GDB ni kubwa, 503 00:41:35,880 --> 00:41:40,640 kwa sababu unaweza magazeti nje vigezo vyote, maadili yote ya kwamba unataka 504 00:41:40,640 --> 00:41:43,230 kutumia hii Handy-dandy p amri. 505 00:41:43,230 --> 00:41:48,520 Hivyo kama ninapoandika p na kisha ninapoandika thamani ya variable au jina la kutofautiana, 506 00:41:48,520 --> 00:41:55,320 kusema, argc, naona ya kuwa argc ni 1. 507 00:41:55,320 --> 00:42:01,830 Kama mimi nataka magazeti nje argv [0], siwezi kufanya hivyo tu kama hiyo. 508 00:42:01,830 --> 00:42:04,840 Na kama tuliona, argv [0] daima ni jina la mpango wako, 509 00:42:04,840 --> 00:42:06,910 daima jina la kutekelezwa. 510 00:42:06,910 --> 00:42:09,740 Hapa unaweza kuona ni got kamili njia jina. 511 00:42:09,740 --> 00:42:15,920 Mimi pia magazeti nje argv [1] na kuona nini kinatokea. 512 00:42:15,920 --> 00:42:20,890 >> Hapa sisi got aina hii ya thamani ya fumbo. 513 00:42:20,890 --> 00:42:23,890 Sisi got hii 0x0. 514 00:42:23,890 --> 00:42:27,850 Kumbuka mwanzoni mwa muhula wakati sisi aliyesema kuhusu idadi hexadesimoli? 515 00:42:27,850 --> 00:42:34,680 Au swali kidogo mwisho wa pset 0 kuhusu jinsi ya kuwakilisha 50 katika hex? 516 00:42:34,680 --> 00:42:39,410 njia ya sisi kuandika hex idadi katika CS, tu si kuwavurugia wenyewe 517 00:42:39,410 --> 00:42:46,080 pamoja na idadi decimal, ni sisi daima kiambishi yao na 0x. 518 00:42:46,080 --> 00:42:51,420 Hivyo hii kiambishi awali 0x daima tu ina maana kutafsiri idadi zifuatazo kama idadi hexadesimoli, 519 00:42:51,420 --> 00:42:57,400 si kama kamba, si kama idadi decimal, si kama idadi binary. 520 00:42:57,400 --> 00:43:02,820 Tangu idadi 5-0 ni idadi halali katika hexadesimoli. 521 00:43:02,820 --> 00:43:06,240 Na ni idadi katika decimal, 50. 522 00:43:06,240 --> 00:43:10,050 Hivyo hii ni jinsi tu sisi disambiguate. 523 00:43:10,050 --> 00:43:14,860 Hivyo 0x0 njia hexadesimoli 0, ambayo pia ni decimal 0, binary 0. 524 00:43:14,860 --> 00:43:17,030 Ni tu 0 thamani. 525 00:43:17,030 --> 00:43:22,630 Ni zinageuka kuwa hii ni nini null ni, kwa kweli, katika kumbukumbu. 526 00:43:22,630 --> 00:43:25,940 Null ni 0. 527 00:43:25,940 --> 00:43:37,010 Hapa, kipengele kuhifadhiwa katika argv [1] ni null. 528 00:43:37,010 --> 00:43:45,220 Hivyo sisi ni kujaribu kulinganisha yetu "miamba CS50" kamba kamba null. 529 00:43:45,220 --> 00:43:48,130 Hivyo dereferencing null, kujaribu kupata mambo katika null, 530 00:43:48,130 --> 00:43:55,050 wale ni kawaida ya kwenda kusababisha baadhi ya aina ya segmentation kosa au nyingine mambo mabaya kutokea. 531 00:43:55,050 --> 00:43:59,350 Na zinageuka kuwa strcmp haina kuangalia kuona 532 00:43:59,350 --> 00:44:04,340 kama au wewe ve kupita katika thamani hiyo null. 533 00:44:04,340 --> 00:44:06,370 Badala yake, ni tu inakwenda mbele, anajaribu kufanya jambo yake, 534 00:44:06,370 --> 00:44:14,640 na kama ni seg makosa, ni seg makosa, na ni tatizo lako. Una kwenda kurekebisha. 535 00:44:14,640 --> 00:44:19,730 Kweli haraka, jinsi tunavyoweza kurekebisha tatizo hili? Charlotte? 536 00:44:19,730 --> 00:44:23,540 [Charlotte] Unaweza kuangalia kama kutumia. 537 00:44:23,540 --> 00:44:32,240 Hivyo kama argv [1] ni null, == 0, kisha kurudi 1, au kitu [unintelligible]. 538 00:44:32,240 --> 00:44:34,590 >> Yeah. Basi hiyo ni moja kubwa njia ya kufanya hivyo, kama tunaweza kuangalia kuona, 539 00:44:34,590 --> 00:44:39,230 thamani sisi ni juu ya kupita katika strcmp, argv [1] Je, ni null? 540 00:44:39,230 --> 00:44:45,830 Kama ni null, basi tunaweza kusema sawa, abort. 541 00:44:45,830 --> 00:44:49,450 >> njia zaidi ya kawaida ya kufanya hivyo ni kutumia thamani argc. 542 00:44:49,450 --> 00:44:52,040 Unaweza kuona haki hapa katika mwanzo wa kuu, 543 00:44:52,040 --> 00:44:58,040 sisi omitted kwamba mtihani wa kwanza kwamba sisi kawaida kufanya wakati sisi kutumia hoja mstari amri, 544 00:44:58,040 --> 00:45:05,240 ambayo ni mtihani kama au thamani yetu argc ni nini sisi kutarajia. 545 00:45:05,240 --> 00:45:10,290 Katika kesi hii, sisi ni kutarajia hoja angalau mbili, 546 00:45:10,290 --> 00:45:13,660 jina la mpango plus moja nyingine. 547 00:45:13,660 --> 00:45:17,140 Kwa sababu sisi ni juu ya kutumia hoja pili kulia hapa. 548 00:45:17,140 --> 00:45:21,350 Hivyo kuwa na baadhi ya aina ya mtihani kabla, kabla ya wito wetu strcmp 549 00:45:21,350 --> 00:45:37,390 kwamba vipimo kama au argv ni angalau 2, ingekuwa pia kufanya aina moja ya kitu. 550 00:45:37,390 --> 00:45:40,620 Tunaweza kuona kama kwamba kazi kwa kuendesha mpango tena. 551 00:45:40,620 --> 00:45:45,610 Daima unaweza kuanzisha upya mpango wako ndani ya GDB, ambayo ni nzuri kwa kweli. 552 00:45:45,610 --> 00:45:49,310 Unaweza kukimbia, na wakati kupita katika hoja kwa mpango wako, 553 00:45:49,310 --> 00:45:53,060 wewe kupita yao katika wakati wito kukimbia, si wakati Boot juu GDB. 554 00:45:53,060 --> 00:45:57,120 Kwa njia hiyo unaweza kushika kuliungama mpango wako kwa hoja tofauti kila wakati. 555 00:45:57,120 --> 00:46:08,080 Hivyo kukimbia, au tena, mimi unaweza aina r, na hebu angalia nini kinatokea kama sisi aina "hello". 556 00:46:08,080 --> 00:46:11,140 Ni daima kuuliza wewe kama unataka kuanza yake tangu mwanzo tena. 557 00:46:11,140 --> 00:46:17,490 Kawaida, wewe unataka kuanza yake tangu mwanzo tena. 558 00:46:17,490 --> 00:46:25,010 Na katika hatua hii, ni restarts tena, ni Prints nje 559 00:46:25,010 --> 00:46:28,920 mpango kwamba sisi ni mbio, buggy1, na hoja hello, 560 00:46:28,920 --> 00:46:32,720 na Prints hii nje ya kiwango; inasema, "Unaweza kupata D," sura ya huzuni. 561 00:46:32,720 --> 00:46:37,610 Lakini hatukuwa seg kosa. Ni alisema mchakato kwamba exited kawaida. 562 00:46:37,610 --> 00:46:39,900 Hivyo kwamba inaonekana pretty nzuri. 563 00:46:39,900 --> 00:46:43,050 Hakuna kosa zaidi seg, sisi kuifanya nyuma, 564 00:46:43,050 --> 00:46:48,190 hivyo inaonekana kama kwamba ilikuwa kweli seg kosa bug kwamba sisi kupata. 565 00:46:48,190 --> 00:46:51,540 Bahati mbaya, ni inatuambia kwamba sisi ni kupata D. 566 00:46:51,540 --> 00:46:54,090 >> Tunaweza kwenda nyuma na kuangalia code na kuona nini kinaendelea huko 567 00:46:54,090 --> 00:46:57,980 kufikiri nini ilikuwa - ni kwa nini alikuwa akitwambia kwamba tulipata D. 568 00:46:57,980 --> 00:47:03,690 Hebu angalia, hapa ilikuwa hii printf akisema kwamba got D. 569 00:47:03,690 --> 00:47:08,540 Kama sisi aina orodha, kama wewe kushika kuandika orodha, ni kuvaa iterating chini kupitia mpango wako, 570 00:47:08,540 --> 00:47:10,940 hivyo nitawaonyesheani kwanza mistari michache ya programu yako. 571 00:47:10,940 --> 00:47:15,450 Kisha nitawaonyesheani ijayo mistari michache, na chunk ijayo na chunk ijayo. 572 00:47:15,450 --> 00:47:18,240 Na nitaendelea kujaribu kwenda chini. 573 00:47:18,240 --> 00:47:21,180 Na sasa tutaweza kupata na "kujipanga idadi 16 ni nje ya mbalimbali." 574 00:47:21,180 --> 00:47:23,940 Kwa sababu tu ina mistari 15. 575 00:47:23,940 --> 00:47:30,310 Kama wewe kupata hatua hii na wako anashangaa, "Nitafanya nini?" unaweza kutumia amri msaada. 576 00:47:30,310 --> 00:47:34,340 Matumizi ya kusaidia na kisha kuwapa jina la amri. 577 00:47:34,340 --> 00:47:36,460 Na unaona GDB inatupa aina hii yote ya mambo. 578 00:47:36,460 --> 00:47:43,870 Ni anasema, "Kwa hoja hakuna, orodha ya kumi mistari zaidi baada ya au karibu na orodha ya awali. 579 00:47:43,870 --> 00:47:47,920 Orodha - orodha ya mistari kumi kabla - " 580 00:47:47,920 --> 00:47:52,960 Basi hebu jaribu kutumia minus orodha. 581 00:47:52,960 --> 00:47:57,000 Na kwamba orodha ya mistari 10 ya awali; unaweza kucheza karibu na orodha kidogo. 582 00:47:57,000 --> 00:48:02,330 Unaweza kufanya orodha, orodha -, unaweza hata kutoa orodha ya namba, kama orodha 8, 583 00:48:02,330 --> 00:48:07,500 na kutakuwa na kuorodhesha mistari 10 kuzunguka mstari 8. 584 00:48:07,500 --> 00:48:10,290 Na unaweza kuona nini kinaendelea hapa ni nimepata rahisi kama mwingine. 585 00:48:10,290 --> 00:48:13,980 Kama aina katika miamba CS50, ni Prints nje "Unaweza kupata A." 586 00:48:13,980 --> 00:48:16,530 Vinginevyo Prints nje "Unaweza kupata D." 587 00:48:16,530 --> 00:48:23,770 Bummer mji. Wote haki. Ndiyo? 588 00:48:23,770 --> 00:48:26,730 >> [Daniel] Basi nilipojaribu kufanya miamba CS50 bila quotes, 589 00:48:26,730 --> 00:48:29,290 inasema "Unaweza kupata D." 590 00:48:29,290 --> 00:48:32,560 Mimi zinahitajika quotes kwa kupata kazi, kwa nini ni hivyo? 591 00:48:32,560 --> 00:48:38,490 >> Yeah. Ni zinageuka kuwa wakati - hii ni mwingine furaha kidogo tidbit - 592 00:48:38,490 --> 00:48:47,900 wakati kukimbia mpango, kama sisi kukimbia na sisi aina katika miamba CS50, 593 00:48:47,900 --> 00:48:50,800 tu kama Danieli alikuwa akisema alifanya hivyo, na wewe hit Enter, 594 00:48:50,800 --> 00:48:52,870 bado anasema sisi kupata D. 595 00:48:52,870 --> 00:48:55,580 Na swali ni, nini hii? 596 00:48:55,580 --> 00:49:02,120 Na zinageuka kuwa wote terminal wetu na GDB Hazrat hizi mbili kama hoja tofauti. 597 00:49:02,120 --> 00:49:04,800 Kwa sababu wakati kuna nafasi, kwamba ni kumaanisha kama 598 00:49:04,800 --> 00:49:08,730 Hoja ya kwanza kumalizika; hoja ya pili ni kuhusu kuanza. 599 00:49:08,730 --> 00:49:13,260 njia ya kuchanganya wale mara mbili au sorry, ndani ya hoja moja, 600 00:49:13,260 --> 00:49:18,510 ni kutumia quotes. 601 00:49:18,510 --> 00:49:29,560 Hivyo sasa, kama sisi kuiweka katika quotes na kukimbia tena, sisi kupata A. 602 00:49:29,560 --> 00:49:38,780 Hivyo tu kwa kurejea, quotes hakuna, CS50 na miamba ni parsed kama hoja mbili tofauti. 603 00:49:38,780 --> 00:49:45,320 Pamoja na quotes, ni parsed kama moja hoja kabisa. 604 00:49:45,320 --> 00:49:53,070 >> Tunaweza kuona kwa breakpoint. 605 00:49:53,070 --> 00:49:54,920 Hadi sasa tumekuwa mbio mpango wetu, na imekuwa ni mbio 606 00:49:54,920 --> 00:49:58,230 mpaka ama ni seg makosa au hitilafu hits 607 00:49:58,230 --> 00:50:05,930 au mpaka ina exited na wote imekuwa kabisa faini. 608 00:50:05,930 --> 00:50:08,360 Hii ni lazima si kitu manufaa zaidi, kwa sababu wakati mwingine 609 00:50:08,360 --> 00:50:11,840 una kosa katika mpango wako, lakini si kosa na kusababisha segmentation. 610 00:50:11,840 --> 00:50:16,950 Si kusababisha mpango wako na kuacha au kitu kama hicho. 611 00:50:16,950 --> 00:50:20,730 njia ya kupata GDB pause mpango wako katika hatua fulani 612 00:50:20,730 --> 00:50:23,260 ni kuweka breakpoint. 613 00:50:23,260 --> 00:50:26,520 Unaweza ama kufanya hili kwa kuweka breakpoint juu ya jina kazi 614 00:50:26,520 --> 00:50:30,770 au unaweza kuweka breakpoint kwenye mstari fulani ya code. 615 00:50:30,770 --> 00:50:34,450 Mimi kama kuweka breakpoints juu ya majina ya kazi, kwa sababu - rahisi kukumbuka, 616 00:50:34,450 --> 00:50:37,700 na kama kweli kwenda katika na kubadili chanzo yako code juu kidogo, 617 00:50:37,700 --> 00:50:42,020 kisha breakpoint yako itakuwa kweli kukaa katika sehemu moja ndani ya code yako. 618 00:50:42,020 --> 00:50:44,760 Wakati kama wewe ni kutumia namba line, na idadi ya mstari kubadilika 619 00:50:44,760 --> 00:50:51,740 kwa sababu wewe kuongeza au kufuta baadhi ya kanuni, basi breakpoints yako yote kabisa Star up. 620 00:50:51,740 --> 00:50:58,590 Moja ya mambo ya kawaida mimi kufanya ni kuweka breakpoint juu ya kazi kuu. 621 00:50:58,590 --> 00:51:05,300 Mara nyingi mimi itabidi Boot juu GDB, mimi itabidi aina b kuu, hit Enter, na kwamba kutakuwa na kuweka breakpoint 622 00:51:05,300 --> 00:51:10,630 juu ya kazi kuu ambayo husema tu "pause mpango haraka kama wewe kuanza mbio," 623 00:51:10,630 --> 00:51:17,960 na kwa njia hiyo, wakati mimi kuendesha programu yangu na, kusema, miamba CS50 kama mbili hoja 624 00:51:17,960 --> 00:51:24,830 na hit Enter, anapata kwa kazi kuu na ataacha haki katika mstari wa kwanza kabisa, 625 00:51:24,830 --> 00:51:30,620 haki kabla ya kutathmini kazi strcmp. 626 00:51:30,620 --> 00:51:34,940 >> Tangu mimi nina paused, sasa naweza kuanza mucking karibu na kuona nini kinaendelea 627 00:51:34,940 --> 00:51:40,250 na wote wa vigezo mbalimbali ambayo ni kupita katika mpango wangu. 628 00:51:40,250 --> 00:51:43,670 Hapa naweza magazeti nje argc na kuona nini kinaendelea. 629 00:51:43,670 --> 00:51:50,030 Kuona kwamba argc ni 3, kwa sababu ni got 3 maadili tofauti ndani yake. 630 00:51:50,030 --> 00:51:54,060 Ni got jina la mpango, ni got hoja kwanza na hoja ya pili. 631 00:51:54,060 --> 00:52:09,330 Tunaweza magazeti wale nje kwa kuangalia argv [0], argv [1], na argv [2]. 632 00:52:09,330 --> 00:52:12,030 Hivyo sasa unaweza pia kuona nini wito huu strcmp ataenda kushindwa, 633 00:52:12,030 --> 00:52:21,650 kwa sababu unaweza kuona kwamba hawakuwa wameigawanya CS50 na miamba katika hoja mbili tofauti. 634 00:52:21,650 --> 00:52:27,250 Katika hatua hii, mara moja umefanya hit breakpoint, unaweza kuendelea na hatua ya kupitia mpango wako 635 00:52:27,250 --> 00:52:32,920 mstari kwa mstari, kinyume na kuanza programu yako tena. 636 00:52:32,920 --> 00:52:35,520 Hivyo kama wewe hawataki kuanza programu yako tena na kuendelea tu kutoka hapa, 637 00:52:35,520 --> 00:52:41,970 unaweza kutumia amri kuendelea na kuendelea kukimbia mpango wa mwisho. 638 00:52:41,970 --> 00:52:45,010 Tu kama ilivyokuwa hapa. 639 00:52:45,010 --> 00:52:54,880 Hata hivyo, kama mimi kuanzisha upya mpango, miamba CS50, ni hits breakpoint yangu tena, 640 00:52:54,880 --> 00:52:59,670 na wakati huu, kama mimi sitaki tu kwenda njia zote wengine wa mpango, 641 00:52:59,670 --> 00:53:08,040 Naweza kutumia amri ya pili, ambayo mimi pia abbreviate na n. 642 00:53:08,040 --> 00:53:12,960 Na hii hatua kupitia line mpango na mstari. 643 00:53:12,960 --> 00:53:17,530 Hivyo unaweza kuangalia kama mambo nitafanya, vigezo kama mabadiliko, kama mambo kupata updated. 644 00:53:17,530 --> 00:53:21,550 Ambayo ni pretty nice. 645 00:53:21,550 --> 00:53:26,570 nyingine kitu baridi ni badala ya kurudia amri sawa juu na juu tena na tena, 646 00:53:26,570 --> 00:53:30,670 kama wewe tu hit Enter - hivyo unaweza kuona hapa mimi si typed katika kitu chochote - 647 00:53:30,670 --> 00:53:33,780 kama mimi tu hit Enter, itakuwa kurudia amri ya awali, 648 00:53:33,780 --> 00:53:36,900 au uliopita GDB amri kwamba mimi tu ya kuweka in 649 00:53:36,900 --> 00:53:56,000 Naweza kushika kupiga Ingiza na itabidi kuweka wanazidi kupitia line code yangu na mstari. 650 00:53:56,000 --> 00:53:59,310 Napenda moyo guys kwenda kuangalia nje ya mipango Buggy nyingine pia. 651 00:53:59,310 --> 00:54:01,330 Hatuna muda wa kupata njia ya wote leo katika sehemu. 652 00:54:01,330 --> 00:54:05,890 chanzo code ni huko, hivyo unaweza aina ya kuona nini kinaendelea 653 00:54:05,890 --> 00:54:07,730 nyuma ya pazia kama wewe kupata kweli kukwama, 654 00:54:07,730 --> 00:54:11,940 lakini kwa uchache sana, tu mazoezi ya booting up GDB, 655 00:54:11,940 --> 00:54:13,940 mbio mpango mpaka inavunja juu yenu, 656 00:54:13,940 --> 00:54:18,260 kupata backtrace, kuhesabia nje nini kazi ajali alikuwa katika, 657 00:54:18,260 --> 00:54:24,450 nini mstari huu ulikuwa katika, uchapishaji nje maadili baadhi variable, 658 00:54:24,450 --> 00:54:30,140 hivyo tu kupata kujisikia kwa ajili yake, kwa sababu kwamba itakuwa kweli kukusaidia kwenda mbele. 659 00:54:30,140 --> 00:54:36,340 Katika hatua hii, sisi ni kwenda nje ya kujiondoa GDB, ambayo huna kutumia kujiondoa au tu q. 660 00:54:36,340 --> 00:54:40,460 Kama mpango wako ni katikati ya mbio bado, na ina si exited, 661 00:54:40,460 --> 00:54:43,510 itakuwa daima kukuuliza, "Je una uhakika kweli unataka kuacha?" 662 00:54:43,510 --> 00:54:48,770 Unaweza tu hit ndiyo. 663 00:54:48,770 --> 00:54:55,250 >> Sasa sisi ni kwenda kuangalia tatizo ijayo tuna, ambayo ni programu ya paka. 664 00:54:55,250 --> 00:54:59,880 Kama wewe kuangalia mfupi juu ya imetuma na mabomba, utaona kwamba Tommy anatumia programu hii ya 665 00:54:59,880 --> 00:55:07,540 kwamba kimsingi Prints pato yote ya faili screen. 666 00:55:07,540 --> 00:55:12,660 Hivyo kama mimi kukimbia paka, hii ni kweli mpango wa kujengwa katika appliance, 667 00:55:12,660 --> 00:55:16,860 na kama una Macs unaweza kufanya hili juu ya Mac yako pia, kama wewe kufungua terminal. 668 00:55:16,860 --> 00:55:25,630 Na sisi - paka, hebu sema, cp.c, na hit Enter. 669 00:55:25,630 --> 00:55:29,640 Nini hii alivyofanya, kama sisi kitabu juu kidogo na kuona ambapo sisi mbio line, 670 00:55:29,640 --> 00:55:40,440 au ambapo sisi mbio amri paka, ni literally tu kuchapishwa yaliyomo ya cp.c na screen zetu. 671 00:55:40,440 --> 00:55:44,140 Tunaweza kukimbia tena na unaweza kuweka katika files nyingi pamoja. 672 00:55:44,140 --> 00:55:49,880 Hivyo unaweza kufanya paka cp.c, na kisha tunaweza pia concatenate faili cat.c, 673 00:55:49,880 --> 00:55:53,250 ambayo ni mpango sisi ni juu ya kuandika, 674 00:55:53,250 --> 00:55:58,140 na kutakuwa na magazeti files wote nyuma kwa nyuma na screen zetu. 675 00:55:58,140 --> 00:56:05,490 Hivyo kama sisi kitabu juu kidogo, tunaona kwamba wakati sisi mbio hii cp.c paka, cat.c, 676 00:56:05,490 --> 00:56:17,110 kwanza ni kuchapishwa faili linganisha, na kisha chini yake, kuchapishwa faili cat.c haki ya chini hapa. 677 00:56:17,110 --> 00:56:19,650 Sisi ni kwenda kutumia hii kupata tu miguu yetu mvua. 678 00:56:19,650 --> 00:56:25,930 Kucheza karibu na uchapishaji rahisi terminal, kuona jinsi kazi. 679 00:56:25,930 --> 00:56:39,170 Kama wewe guys kufungua na gedit cat.c, hit Enter, 680 00:56:39,170 --> 00:56:43,760 unaweza kuona kwamba mpango tuko tayari kuandika. 681 00:56:43,760 --> 00:56:48,980 Tumekuwa pamoja hii nice boiler sahani, hivyo hatuna kutumia muda kuandika nje kwamba wote. 682 00:56:48,980 --> 00:56:52,310 Sisi pia kuangalia idadi ya hoja kupita in 683 00:56:52,310 --> 00:56:56,910 Sisi magazeti nje nzuri ya matumizi ya ujumbe. 684 00:56:56,910 --> 00:57:00,950 >> Hii ni aina ya kitu tena kuwa, kama tumekuwa kuzungumza juu, 685 00:57:00,950 --> 00:57:04,490 kwa karibu ni kama kumbukumbu ya misuli. 686 00:57:04,490 --> 00:57:07,190 Kumbuka tu kuendelea kufanya aina moja ya mambo 687 00:57:07,190 --> 00:57:11,310 na daima uchapishaji nje baadhi ya aina ya ujumbe kusaidia 688 00:57:11,310 --> 00:57:17,670 ili watu kujua jinsi ya kuendesha programu yako. 689 00:57:17,670 --> 00:57:21,630 Na paka, ni pretty rahisi; sisi ni kwenda tu kwenda kwa yote ya hoja mbalimbali 690 00:57:21,630 --> 00:57:24,300 kwamba walikuwa kupita kwa programu yetu, na sisi ni kwenda magazeti 691 00:57:24,300 --> 00:57:29,950 yaliyomo yao nje na screen moja kwa wakati mmoja. 692 00:57:29,950 --> 00:57:35,670 Ili magazeti files nje screen, tunakwenda kufanya kitu sawa sana 693 00:57:35,670 --> 00:57:38,120 kwa nini tulifanya mwisho wa chemsha bongo. 694 00:57:38,120 --> 00:57:45,350 Wakati wa mwisho wa jaribio, kwamba kuajiri mpango, tulikuwa na kufungua faili, 695 00:57:45,350 --> 00:57:48,490 na kisha tulikuwa na magazeti hayo. 696 00:57:48,490 --> 00:57:54,660 Katika kesi hii, sisi ni kwenda kufungua faili, na sisi ni kwenda kusoma kutoka humo badala yake. 697 00:57:54,660 --> 00:58:00,630 Kisha tunakwenda magazeti, badala ya SVG, tunakwenda magazeti kwa screen. 698 00:58:00,630 --> 00:58:05,830 Hivyo uchapishaji na screen ve yote kufanyika kabla na printf. 699 00:58:05,830 --> 00:58:08,290 Hivyo si kwamba pia mambo. 700 00:58:08,290 --> 00:58:12,190 Lakini kusoma faili ni aina ya weird. 701 00:58:12,190 --> 00:58:17,300 Tutaweza kwenda kupitia kidogo kidogo kwa wakati. 702 00:58:17,300 --> 00:58:20,560 Kama wewe guys kurejea tatizo kwamba mwisho juu ya chemsha bongo yako, tatizo 33, 703 00:58:20,560 --> 00:58:27,280 mstari wa kwanza kwamba sisi ni kwenda kufanya hapa, kufungua faili, ni sawa na sisi alivyofanya huko. 704 00:58:27,280 --> 00:58:36,370 Hivyo Stella, ni nini kwamba kuangalia line kama, wakati sisi kufungua faili? 705 00:58:36,370 --> 00:58:47,510 [Stella] Capital JALADA *, faili - >> Sawa. >> - Ni sawa na fopen. >> Yup. 706 00:58:47,510 --> 00:58:55,980 Ambayo katika kesi hii ni? Ni katika maoni. 707 00:58:55,980 --> 00:59:06,930 >> Ni katika maoni? argv [i] na r? 708 00:59:06,930 --> 00:59:11,300 >> Hasa. Haki juu. Hivyo ni Stella kabisa kulia. 709 00:59:11,300 --> 00:59:13,720 Hii ni nini mstari inaonekana kama. 710 00:59:13,720 --> 00:59:19,670 Sisi ni kwenda kupata mkondo faili variable, kuhifadhi katika * JALADA, hivyo wote kofia, 711 00:59:19,670 --> 00:59:25,720 JALADA, *, na jina la kutofautiana hii itakuwa faili. 712 00:59:25,720 --> 00:59:32,250 Tunaweza kuuita chochote sisi kama. Tunaweza kuuita first_file, au file_i, chochote tunatarajia. 713 00:59:32,250 --> 00:59:37,590 Na kisha jina la faili ilipitishwa katika juu ya mstari amri kwa mpango huu. 714 00:59:37,590 --> 00:59:44,450 Hivyo ni kuhifadhiwa katika argv [i,] na kisha tunakwenda kufungua faili hii katika mode kusoma. 715 00:59:44,450 --> 00:59:48,100 Sasa kwa kuwa tumekuwa kufunguliwa faili, nini kitu sisi daima kuwa kukumbuka kufanya 716 00:59:48,100 --> 00:59:52,230 wakati wowote tumekuwa kufunguliwa faili? Funga. 717 00:59:52,230 --> 00:59:57,220 Hivyo Missy, jinsi gani sisi karibu faili? 718 00:59:57,220 --> 01:00:01,020 [Missy] fclose (faili) >> fclose (faili). Hasa. 719 01:00:01,020 --> 01:00:05,340 Mkuu. Sawa. Kama sisi kuangalia hii kufanya comment haki hapa, 720 01:00:05,340 --> 01:00:11,940 inasema, "Open argv [i] na magazeti yaliyomo yake kwa stdout." 721 01:00:11,940 --> 01:00:15,460 >> Darasa la nje ni jina weird. Stdout ni njia yetu ya kusema 722 01:00:15,460 --> 01:00:22,880 tunataka magazeti kwa terminal; tunataka magazeti kwa mkondo kiwango pato. 723 01:00:22,880 --> 01:00:26,450 Tunaweza kweli kujikwamua ya maoni hayo hapa hapa. 724 01:00:26,450 --> 01:00:36,480 Mimi naenda nakala yake na kuuweka tangu kwamba ni nini sisi alivyofanya. 725 01:00:36,480 --> 01:00:41,290 Katika hatua hii, sasa tuna kusoma kidogo faili kidogo. 726 01:00:41,290 --> 01:00:46,300 Tumekuwa kujadiliwa michache ya njia za files kusoma. 727 01:00:46,300 --> 01:00:51,830 Ambayo ndio ni favorites yako hadi sasa? 728 01:00:51,830 --> 01:00:57,960 Ambayo njia umeona au unakumbuka, kusoma files? 729 01:00:57,960 --> 01:01:04,870 [Daniel] fread? >> Fread? Hivyo fread ni moja. Jimmy, unajua wengine yoyote? 730 01:01:04,870 --> 01:01:12,150 [Jimmy] No >> Sawa. Nope. Charlotte? Alexander? Yoyote ya wengine? Sawa. 731 01:01:12,150 --> 01:01:20,740 Hivyo wale wengine ni fgetc, ni moja kwamba tutaweza matumizi mengi. 732 01:01:20,740 --> 01:01:26,410 Kuna pia fscanf; guys kuona ruwaza hapa? 733 01:01:26,410 --> 01:01:29,170 Wao wote kuanza na f. Kitu cha kufanya na faili. 734 01:01:29,170 --> 01:01:35,260 Kuna fread, fgetc, fscanf. Haya yote ni ya kazi ya kusoma. 735 01:01:35,260 --> 01:01:49,120 Kwa kuandika tuna fwrite, tuna fputc badala ya fgetc. 736 01:01:49,120 --> 01:01:58,250 Sisi pia fprintf kama tuliona juu ya chemsha bongo. 737 01:01:58,250 --> 01:02:01,680 Tangu hii ni tatizo kwamba inahusisha kusoma kutoka faili, 738 01:02:01,680 --> 01:02:04,940 tunakwenda kutumia moja ya kazi hizi tatu. 739 01:02:04,940 --> 01:02:10,890 Sisi siyo kwenda kutumia kazi hizo chini hapa. 740 01:02:10,890 --> 01:02:14,880 Kazi hizi ni wote kupatikana katika maktaba standard I / O. 741 01:02:14,880 --> 01:02:17,510 Hivyo kama wewe kuangalia juu ya mpango huu, 742 01:02:17,510 --> 01:02:24,110 unaweza kuona kwamba tumekuwa tayari ni pamoja na faili header kwa ajili ya maktaba standard I / O. 743 01:02:24,110 --> 01:02:27,120 Kama tunataka kufikiri ambayo moja tunataka kutumia, 744 01:02:27,120 --> 01:02:29,690 tunaweza daima kufungua kurasa mtu. 745 01:02:29,690 --> 01:02:34,350 Hivyo tunaweza aina mtu stdio 746 01:02:34,350 --> 01:02:43,180 na kusoma yote juu ya pembejeo stdio na kazi pato katika C. 747 01:02:43,180 --> 01:02:49,870 Na sisi tayari kuona oh, kuangalia. Ni kutaja fgetc, kutajwa fputc. 748 01:02:49,870 --> 01:02:57,220 Hivyo unaweza drill chini kidogo na kuangalia, kusema, fgetc 749 01:02:57,220 --> 01:03:00,060 na kuangalia mtu ukurasa wake. 750 01:03:00,060 --> 01:03:03,430 Unaweza kuona kwamba huenda pamoja na rundo zima la kazi nyingine: 751 01:03:03,430 --> 01:03:12,640 fgetc, fgets, getc, getchar, anapata, ungetc, na mchango wake wa wahusika na masharti. 752 01:03:12,640 --> 01:03:19,180 Hivyo hii ni jinsi sisi kusoma katika wahusika na masharti kutoka files kutoka pembejeo kiwango, 753 01:03:19,180 --> 01:03:21,990 ambayo kimsingi ni kutoka kwa mtumiaji. 754 01:03:21,990 --> 01:03:24,780 Na hii ni jinsi sisi kufanya hivyo katika C. halisi 755 01:03:24,780 --> 01:03:30,850 Hivyo hii si kutumia GetString na kazi GetChar 756 01:03:30,850 --> 01:03:36,840 kwamba sisi kutumika kutoka maktaba CS50. 757 01:03:36,840 --> 01:03:39,710 Sisi ni kwenda kufanya tatizo hili katika michache ya njia 758 01:03:39,710 --> 01:03:43,430 hivyo kwamba unaweza kuona njia mbili tofauti ya kufanya hivyo. 759 01:03:43,430 --> 01:03:48,490 Wote kazi fread kwamba Danieli zilizotajwa na fgetc ni nzuri njia ya kufanya hivyo. 760 01:03:48,490 --> 01:03:53,790 Nadhani fgetc ni rahisi kidogo, kwa sababu tu ana, kama unaweza kuona, 761 01:03:53,790 --> 01:03:59,660 moja hoja, * JALADA kwamba sisi ni kujaribu kusoma tabia kutoka, 762 01:03:59,660 --> 01:04:02,740 na kurudi thamani yake ni int. 763 01:04:02,740 --> 01:04:05,610 Na hii ni utata kidogo, haki? 764 01:04:05,610 --> 01:04:11,450 >> Kwa sababu sisi ni kupata tabia, hivyo kwa nini hana hii kurudi Char? 765 01:04:11,450 --> 01:04:18,700 You guys kuwa na mawazo yoyote juu ya nini hii ili asirudi Char? 766 01:04:18,700 --> 01:04:25,510 [Missy majibu, unintelligible] >> Yeah. Hivyo ni Missy kabisa kulia. 767 01:04:25,510 --> 01:04:31,570 Kama ni ASCII, basi integer hii inaweza mapped Char halisi. 768 01:04:31,570 --> 01:04:33,520 Inaweza kuwa tabia ASCII, na hiyo ni haki. 769 01:04:33,520 --> 01:04:36,220 Hiyo ni nini hasa kinatokea. 770 01:04:36,220 --> 01:04:39,190 Sisi ni kutumia int kwa sababu tu ana bits zaidi. 771 01:04:39,190 --> 01:04:44,750 Ni kubwa kuliko Char; Char yetu pekee ya bits 8, kwamba 1 Byte juu ya mashine yetu 32-bit. 772 01:04:44,750 --> 01:04:48,520 Na int ina thamani yote ka 4 'wa nafasi. 773 01:04:48,520 --> 01:04:50,940 Na zinageuka kuwa njia fgetc kazi, 774 01:04:50,940 --> 01:04:53,940 kama sisi kitabu chini katika Synopsis wetu katika ukurasa huu mtu kidogo kidogo, 775 01:04:53,940 --> 01:05:05,000 kitabu njia yote chini. Ni zinageuka kuwa wao kutumia thamani hii maalum iitwayo EOF. 776 01:05:05,000 --> 01:05:09,640 Ni mara kwa mara maalum kama thamani ya kurudi kwa kazi fgetc 777 01:05:09,640 --> 01:05:14,570 wakati wowote wewe hit mwisho wa faili au kama wewe kupata kosa. 778 01:05:14,570 --> 01:05:18,170 Na zinageuka kuwa kufanya kulinganisha hizi na EOF vizuri, 779 01:05:18,170 --> 01:05:24,060 unataka kuwa na kwamba kiasi ya ziada ya habari kwamba una katika int 780 01:05:24,060 --> 01:05:28,420 kinyume na kutumia variable Char. 781 01:05:28,420 --> 01:05:32,130 Hata ingawa fgetc Inazidi tabia kutoka faili, 782 01:05:32,130 --> 01:05:38,450 unataka kukumbuka kwamba ni kurudi kitu ambacho ni cha int aina na wewe. 783 01:05:38,450 --> 01:05:41,360 Kwamba alisema, ni haki rahisi kutumia. 784 01:05:41,360 --> 01:05:44,960 Ni kwenda kutupa tabia, hivyo wote sisi kufanya ni kuendelea kuuliza faili, 785 01:05:44,960 --> 01:05:48,440 "Nipe tabia ijayo, nipe tabia ijayo, nipe tabia ijayo," 786 01:05:48,440 --> 01:05:51,400 mpaka sisi kupata mwisho wa faili. 787 01:05:51,400 --> 01:05:54,730 Na kwamba kuvuta katika tabia moja kwa wakati mmoja kutoka faili yetu, 788 01:05:54,730 --> 01:05:56,250 na basi tunaweza kufanya chochote sisi kama na hayo. 789 01:05:56,250 --> 01:06:00,160 Tunaweza kukihifadhi, tunaweza kuongeza kwa kamba, tunaweza magazeti nje. 790 01:06:00,160 --> 01:06:04,630 Je yoyote ya kwamba. 791 01:06:04,630 --> 01:06:09,600 >> Zooming nyuma nje na kurejea kwa programu yetu cat.c, 792 01:06:09,600 --> 01:06:16,170 kama sisi ni kwenda kutumia fgetc, 793 01:06:16,170 --> 01:06:21,710 jinsi tunavyoweza mbinu line hii ya pili ya kificho? 794 01:06:21,710 --> 01:06:26,020 Sisi ni kwenda kutumia - fread kufanya kitu tofauti kidogo. 795 01:06:26,020 --> 01:06:32,600 Na wakati huu, tuko tu kwenda kutumia fgetc kupata moja tabia kwa wakati. 796 01:06:32,600 --> 01:06:40,910 Kuchakata faili nzima, nini kinaweza tuna kufanya? 797 01:06:40,910 --> 01:06:44,030 Ngapi wahusika ni pale katika faili? 798 01:06:44,030 --> 01:06:47,390 Kuna mengi. Hivyo pengine wanataka kupata moja 799 01:06:47,390 --> 01:06:49,860 na kisha kupata mwingine na kupata mwingine na kupata mwingine. 800 01:06:49,860 --> 01:06:53,330 Ni aina gani ya algorithm unafikiri sisi tupate kuwa na matumizi ya hapa? 801 01:06:53,330 --> 01:06:55,470 Ni aina gani ya -? [Alexander] A kwa kitanzi? >> Hasa. 802 01:06:55,470 --> 01:06:57,500 Baadhi ya aina ya kitanzi. 803 01:06:57,500 --> 01:07:03,380 kwa kitanzi ni kweli mkuu, katika kesi hii. 804 01:07:03,380 --> 01:07:08,620 Na kama wewe walikuwa wakisema, inaonekana kama unataka kitanzi juu ya faili nzima, 805 01:07:08,620 --> 01:07:11,820 kupata tabia kwa wakati. 806 01:07:11,820 --> 01:07:13,850 Mapendekezo yoyote juu ya nini kuwa ili kuangalia kama? 807 01:07:13,850 --> 01:07:22,090 [Alexander, unintelligible] 808 01:07:22,090 --> 01:07:30,050 >> Sawa, niambie tu katika Kiingereza unachojaribu kufanya? [Alexander, unintelligible] 809 01:07:30,050 --> 01:07:36,270 Hivyo katika kesi hii, inaonekana kama sisi ni kujaribu tu kitanzi juu ya faili nzima. 810 01:07:36,270 --> 01:07:45,330 [Alexander] Hivyo i > Ukubwa wa -? 811 01:07:45,330 --> 01:07:49,290 Nadhani ukubwa wa faili, haki? kawaida - we'll andika tu kama hii. 812 01:07:49,290 --> 01:07:57,470 Ukubwa wa faili kwa wakati kuwa, i + +. 813 01:07:57,470 --> 01:08:04,610 Hivyo ni zinageuka kuwa njia hii huna kutumia fgetc, na hii ni mpya, 814 01:08:04,610 --> 01:08:10,460 ni kwamba hakuna njia rahisi tu kupata ukubwa wa faili 815 01:08:10,460 --> 01:08:16,979 pamoja na "sizeof" aina ya kujenga kwamba ve kuona mbele. 816 01:08:16,979 --> 01:08:20,910 Wakati sisi kutumia kwamba kazi fgetc, sisi ni kuanzisha aina fulani ya 817 01:08:20,910 --> 01:08:29,069 mpya, funky syntax kwa hii kwa kitanzi, ambapo badala ya kutumia tu counter ya msingi 818 01:08:29,069 --> 01:08:33,920 kwenda tabia na tabia, sisi ni kwenda kuvuta moja tabia kwa wakati, 819 01:08:33,920 --> 01:08:37,120 mhusika mmoja kwa wakati, na njia ya sisi kujua tuko mwishoni 820 01:08:37,120 --> 01:08:41,290 si wakati tumekuwa kuhesabiwa idadi fulani ya wahusika, 821 01:08:41,290 --> 01:08:49,939 lakini wakati sisi tabia kujiondoa ni kwamba mwisho wa tabia maalum faili. 822 01:08:49,939 --> 01:08:58,689 Hivyo tunaweza kufanya hivyo kwa - Mimi wito huu ch, na tunakwenda initialize ni 823 01:08:58,689 --> 01:09:08,050 na wito wetu wa kwanza kupata tabia ya kwanza nje ya faili. 824 01:09:08,050 --> 01:09:14,979 Hivyo hii sehemu haki hapa, hii ni kwenda kupata tabia nje ya faili 825 01:09:14,979 --> 01:09:20,840 na kuhifadhi katika ch kutofautiana. 826 01:09:20,840 --> 01:09:25,420 Sisi ni kwenda kuendelea kufanya hili mpaka sisi kupata mwisho wa faili, 827 01:09:25,420 --> 01:09:41,170 ambayo sisi kufanya kwa kupima kwa ajili ya tabia si kuwa sawa na tabia ya kuwa maalum EOF. 828 01:09:41,170 --> 01:09:48,750 Na kisha badala ya kufanya ch + +, ambayo ingekuwa tu increment thamani, 829 01:09:48,750 --> 01:09:52,710 hivyo kama sisi kusoma nje ya SVG, mji mkuu, wanasema, 830 01:09:52,710 --> 01:09:56,810 ch + + atatupa b, na kisha tunatarajia kupata c na kisha d. 831 01:09:56,810 --> 01:09:59,310 Hiyo ni wazi si nini tunataka. Tunachotaka hapa 832 01:09:59,310 --> 01:10:05,830 katika kidogo hii ya mwisho ni tunataka kupata tabia ijayo kutoka faili. 833 01:10:05,830 --> 01:10:09,500 >> Hivyo jinsi tunavyoweza kupata tabia ijayo kutoka faili? 834 01:10:09,500 --> 01:10:13,470 Jinsi gani sisi kupata tabia ya kwanza kutoka faili? 835 01:10:13,470 --> 01:10:17,200 [Mwanafunzi] fgetfile? >> Fgetc, au, sorry, ungekuwa kabisa kulia. 836 01:10:17,200 --> 01:10:20,470 Mimi misspelled ni haki pale. Hivyo yeah. 837 01:10:20,470 --> 01:10:26,240 Hapa badala ya kufanya ch + +, 838 01:10:26,240 --> 01:10:29,560 sisi ni tu kwenda kuwaita fgetc (faili) tena 839 01:10:29,560 --> 01:10:39,180 na kuhifadhi matokeo katika variable yetu sawa ch. 840 01:10:39,180 --> 01:10:43,730 [Mwanafunzi swali, unintelligible] 841 01:10:43,730 --> 01:10:52,390 >> Hii ni wapi hawa * JALADA guys ni maalum. 842 01:10:52,390 --> 01:10:59,070 njia ya wao kufanya kazi ni wao - wakati wa kwanza kufungua - wakati wewe kwanza kufanya wito fopen, 843 01:10:59,070 --> 01:11:04,260 * JALADA ufanisi mtumishi kama pointer mwanzo ya faili. 844 01:11:04,260 --> 01:11:12,830 Na kisha kila wakati wewe piga fgetc, ni hatua moja tabia kupitia faili. 845 01:11:12,830 --> 01:11:23,280 Hiyo wakati wowote wewe piga hii, wewe incrementing pointer faili na tabia moja. 846 01:11:23,280 --> 01:11:26,210 Na wakati wewe fgetc tena, wewe ni kusonga ni mwingine tabia 847 01:11:26,210 --> 01:11:28,910 na mwingine tabia na mwingine tabia na mwingine tabia. 848 01:11:28,910 --> 01:11:32,030 [Mwanafunzi swali, unintelligible] >> Na that's - yeah. 849 01:11:32,030 --> 01:11:34,810 Ni aina ya uchawi huu chini ya Hood. 850 01:11:34,810 --> 01:11:37,930 Wewe tu kuweka incrementing kupitia. 851 01:11:37,930 --> 01:11:46,510 Katika hatua hii, uko na uwezo wa kweli kazi pamoja na tabia. 852 01:11:46,510 --> 01:11:52,150 Hivyo jinsi tunavyoweza magazeti hii nje ya screen, sasa? 853 01:11:52,150 --> 01:11:58,340 Tunaweza kutumia moja printf kitu kwamba sisi kutumika kabla. 854 01:11:58,340 --> 01:12:00,330 Kwamba sisi tumekuwa kutumia wote muhula. 855 01:12:00,330 --> 01:12:05,450 Tunaweza kuwaita printf, 856 01:12:05,450 --> 01:12:21,300 na tunaweza kupita katika tabia kama hiyo. 857 01:12:21,300 --> 01:12:27,430 Njia nyingine ya kufanya hivyo ni badala ya kutumia printf na baada ya kufanya hii string format, 858 01:12:27,430 --> 01:12:29,490 tunaweza pia kutumia moja ya kazi nyingine. 859 01:12:29,490 --> 01:12:40,090 Tunaweza kutumia fputc, ambayo Prints tabia ya screen, 860 01:12:40,090 --> 01:12:52,580 isipokuwa kama tunaangalia fputc - ngoja zoom nje kidogo. 861 01:12:52,580 --> 01:12:56,430 Sisi kuona nini ni nzuri ni inachukua katika tabia ya kuwa sisi kusoma nje kwa kutumia fgetc, 862 01:12:56,430 --> 01:13:05,100 lakini basi tuna kuwapa mkondo wa magazeti ya. 863 01:13:05,100 --> 01:13:11,850 Tunaweza pia kutumia kazi putchar, ambayo kuweka moja kwa moja na nje ya kiwango. 864 01:13:11,850 --> 01:13:16,070 Hivyo kuna rundo zima ya chaguzi mbalimbali kwamba tunaweza kutumia kwa ajili ya uchapishaji. 865 01:13:16,070 --> 01:13:19,580 Wao ni wote katika maktaba standard I / O. 866 01:13:19,580 --> 01:13:25,150 Kila unataka na magazeti - hivyo printf, kwa default, itakuwa magazeti kwa kiwango maalum nje mkondo, 867 01:13:25,150 --> 01:13:27,910 ambayo ni stdout kwamba. 868 01:13:27,910 --> 01:13:41,300 Hivyo tunaweza tu rejea ni kama aina ya thamani hii uchawi, stdout katika hapa. 869 01:13:41,300 --> 01:13:48,410 Lo. Weka semicolon nje. 870 01:13:48,410 --> 01:13:52,790 >> Hii ni mengi ya habari mpya, funky katika hapa. 871 01:13:52,790 --> 01:13:58,600 mengi ya hii ni nahau au msemo wenye sana, kwa maana kwamba hii ni code 872 01:13:58,600 --> 01:14:05,700 yaliyoandikwa kwa njia hii tu kwa sababu ni safi kusoma, rahisi kusoma. 873 01:14:05,700 --> 01:14:11,520 Kuna njia nyingi tofauti ya kufanya hivyo, wengi tofauti kazi unaweza kutumia, 874 01:14:11,520 --> 01:14:14,680 lakini sisi huwa tu kufuata ruwaza hizi sawa juu na juu. 875 01:14:14,680 --> 01:14:20,180 Hivyo msishangae kama wewe kuona kanuni kama hii kuja tena na tena. 876 01:14:20,180 --> 01:14:25,690 Wote haki. Katika hatua hii, tunahitaji kuvunja kwa siku. 877 01:14:25,690 --> 01:14:31,300 Shukrani kwa kuja. Shukrani kwa ajili ya kuangalia kama uko online. Na tutaweza kuona wewe wiki ijayo. 878 01:14:31,300 --> 01:14:33,890 [CS50.TV]