1 00:00:00,000 --> 00:00:02,480 >> [Muzika] 2 00:00:02,480 --> 00:00:06,460 3 00:00:06,460 --> 00:00:09,350 >> DOUG Lloyd: Të gjithë të drejtë, kështu që le të flasin për argumente command-line. 4 00:00:09,350 --> 00:00:11,800 Pra, deri më tani gjatë goxha shumë të gjitha programet tuaja 5 00:00:11,800 --> 00:00:16,360 kanë filluar ndoshta si this-- zbrazëti int main. 6 00:00:16,360 --> 00:00:18,310 Ne kemi qenë mbledhur input përdorues në qoftë se ne kemi nevojë për atë 7 00:00:18,310 --> 00:00:21,080 në programet tona, të tilla si Programi Mario, për shembull, 8 00:00:21,080 --> 00:00:22,990 nga në-programi bën. 9 00:00:22,990 --> 00:00:25,190 Ne nuk kemi nevojë për të ndryshuar deklarata e kryesor, 10 00:00:25,190 --> 00:00:30,684 sepse në vend brenda ne kryesore them vetëm, ju mund të telefononi atë për të marrë int. 11 00:00:30,684 --> 00:00:32,350 Sa i madh ju dëshironi piramidale të jetë? 12 00:00:32,350 --> 00:00:34,455 Ose ju mund të telefononi atë për të marrë float-- ndryshojë mënyrën se si shumë 13 00:00:34,455 --> 00:00:36,400 Unë duhet të prodhimit të përdoruesit? 14 00:00:36,400 --> 00:00:38,630 >> Nuk është një tjetër mënyrë edhe pse, dhe në qoftë se ne duam përdoruesit tonë 15 00:00:38,630 --> 00:00:40,580 të jenë në gjendje të ofrojnë të dhëna për programin tonë 16 00:00:40,580 --> 00:00:43,320 në kohën e duhur në vend të kohë programi është i rrjedhshëm, 17 00:00:43,320 --> 00:00:45,910 një dallim delikate, por nganjëherë një shumë të dobishme, 18 00:00:45,910 --> 00:00:48,120 ne kemi nevojë për një formë të re të deklaruar kryesore. 19 00:00:48,120 --> 00:00:53,320 Ne nuk mund të përdorim boshllëkun int main në qoftë se ne duam të të mbledhë të dhëna të tjera në command-line 20 00:00:53,320 --> 00:00:57,540 kur përdoruesi shkon programi, prandaj argumente command-line. 21 00:00:57,540 --> 00:00:59,810 >> Për të mbledhur këto command-line Argumentet nga përdoruesit, 22 00:00:59,810 --> 00:01:03,140 ndryshojë deklaratën tuaj të kryesor për të duken si this-- int 23 00:01:03,140 --> 00:01:10,450 kryesore, paren hapura, int argc, presje, string argv, kllapa katrore, 24 00:01:10,450 --> 00:01:12,670 dhe pastaj të hapur mbajtëse kaçurrel. 25 00:01:12,670 --> 00:01:14,415 Pra, çfarë do të thotë tashmë? 26 00:01:14,415 --> 00:01:19,410 E pra, ne jemi duke kaluar në dy parametra, apo argumentet, apo inputet për kryesor. 27 00:01:19,410 --> 00:01:23,800 Një, një numër i plotë i quajtur argc, dhe tjetra është ajo? 28 00:01:23,800 --> 00:01:26,430 29 00:01:26,430 --> 00:01:29,640 Është një grup i tela, e drejtë? 30 00:01:29,640 --> 00:01:31,140 Ne e shohim se simbol katror kllapa. 31 00:01:31,140 --> 00:01:32,181 Është një grup i strings. 32 00:01:32,181 --> 00:01:35,110 Kjo nuk është një varg individ, është një grup i strings. 33 00:01:35,110 --> 00:01:39,640 Dhe këto dy argumente, argc dhe argv, të mundësojë që të dini se çfarë të dhënave të përdoruesit 34 00:01:39,640 --> 00:01:42,912 ka siguruar në command-line dhe sa gjëra të 35 00:01:42,912 --> 00:01:44,120 dhënë në command-line. 36 00:01:44,120 --> 00:01:46,570 Gjëra mjaft të dobishme për të punuar me të. 37 00:01:46,570 --> 00:01:50,310 >> Argc qëndron për numërimin argument, dhe ju duhet të dini, nga rruga, 38 00:01:50,310 --> 00:01:52,600 që ju mund të telefononi argc çdo gjë që ju doni atë. 39 00:01:52,600 --> 00:01:54,710 Ju mund të telefononi argv çdo gjë që dëshironte. 40 00:01:54,710 --> 00:01:58,740 Këto janë emrat e vetëm konvencionale që ne përdorim për të, porsi numërimin argument, 41 00:01:58,740 --> 00:02:00,907 dhe si ne do të shohim në një të dytë, vektor Argumenti, argv. 42 00:02:00,907 --> 00:02:03,698 Por ju nuk keni për të thirrur ata argc dhe argv në qoftë se ju nuk doni të, 43 00:02:03,698 --> 00:02:05,570 por konvencionale, kjo është ajo që ne bëjmë. 44 00:02:05,570 --> 00:02:07,500 >> Pra, gjithsesi, argc, numërimi argumenti. 45 00:02:07,500 --> 00:02:11,569 Kjo është një variabël integer-lloj dhe kështu, si ju mund të presin, në qoftë se ne kemi dy gjëra 46 00:02:11,569 --> 00:02:13,860 se ne jemi duke shkuar për të gjetur se çfarë këto janë shtypur 47 00:02:13,860 --> 00:02:16,070 dhe sa stuff përdorues shtypur, argc është 48 00:02:16,070 --> 00:02:18,559 do të na tregoni se sa të stuff përdoruesit shtypur. 49 00:02:18,559 --> 00:02:20,850 Pra, kjo ju jep një numër të argumente command-line përdorues 50 00:02:20,850 --> 00:02:22,470 shtypur kur u ekzekutua programi. 51 00:02:22,470 --> 00:02:25,780 Pra, në qoftë se programi juaj është i drejtuar dot çaj lakmitar, 52 00:02:25,780 --> 00:02:28,670 dhe brenda lakmitar tuaj programit funksionin tuaj kryesor 53 00:02:28,670 --> 00:02:34,800 ka deklaratë int int kryesor argc, string argv kllapa katrore, atëherë 54 00:02:34,800 --> 00:02:37,950 argc në këtë rast është një. 55 00:02:37,950 --> 00:02:40,200 Tani vini re, ne nuk bëjmë numërimin e sa shumë gjëra 56 00:02:40,200 --> 00:02:42,590 përdoruesi shtypur me emrin e programit. 57 00:02:42,590 --> 00:02:46,710 Emri Programi vetë numëron si një argument command-line. 58 00:02:46,710 --> 00:02:51,770 >> Pra dot çaj babëzitur, në se rasti, argc është një. 59 00:02:51,770 --> 00:02:57,910 Nëse përdoruesi typed slash babëzitur 1024 CS50 në command-line, argc në këtë rast 60 00:02:57,910 --> 00:02:59,520 do të jetë tre. 61 00:02:59,520 --> 00:03:03,720 Dhe ne e dimë këtë, sepse rruga se ndarja mes strings 62 00:03:03,720 --> 00:03:06,030 është zbuluar është nëse ka një hapësirë, ose nje tab, 63 00:03:06,030 --> 00:03:08,230 ose diçka të tillë mes tyre. 64 00:03:08,230 --> 00:03:13,860 Pra, çdo shumë hapësirë ​​të bardhë, ashtu-quajtur, midis vlerave shtypur command-line 65 00:03:13,860 --> 00:03:15,720 tregon se sa ka. 66 00:03:15,720 --> 00:03:24,040 Pra dot çaj hapësirë ​​babëzitur 1024 hapësirë CS50, argc, në këtë rast, është tre. 67 00:03:24,040 --> 00:03:26,600 >> Argv është vektori argumenti. 68 00:03:26,600 --> 00:03:29,240 Vector, nga rruga, është vetëm një tjetër fjalë për një grup, 69 00:03:29,240 --> 00:03:31,510 dhe kjo është një grup që ruan strings. 70 00:03:31,510 --> 00:03:35,540 Një varg për element, i cili është vargjet që përdoruesi në fakt 71 00:03:35,540 --> 00:03:39,230 shtypur në command-line kur programi u ekzekutua. 72 00:03:39,230 --> 00:03:40,990 Tani, siç është rasti me ndonjë grup, në qoftë se ju 73 00:03:40,990 --> 00:03:44,380 kujtojnë nga diskutimit tonë të vargjeve, elementi i parë i argv 74 00:03:44,380 --> 00:03:49,150 është gjithmonë do të gjendet në argv kllapa katrore zero. 75 00:03:49,150 --> 00:03:51,800 Kjo është indeksi i parë e array argv. 76 00:03:51,800 --> 00:03:55,720 Kështu që will-- dhe në fakt, se vullneti gjithmonë të jetë emri i programit, 77 00:03:55,720 --> 00:03:59,730 gjithmonë do të jetë e vendosur në argv kllapa katrore zero. 78 00:03:59,730 --> 00:04:08,590 >> Elementi i fundit i argv është gjetur gjithmonë në argv kllapave argc minus një. 79 00:04:08,590 --> 00:04:10,300 A e shihni se pse? 80 00:04:10,300 --> 00:04:14,180 Mos harroni se si shumë elemente ekzistojnë në këtë grup. 81 00:04:14,180 --> 00:04:16,660 E pra, ne e dimë se është that-- Numri argc i elementeve. 82 00:04:16,660 --> 00:04:21,279 Nëse përdoruesi shtypur tri gjëra në komanda-line, argc është tre. 83 00:04:21,279 --> 00:04:27,070 Por për shkak se në C, kur ne jemi duke punuar me vargjeve, çdo element i vektorit, 84 00:04:27,070 --> 00:04:30,190 ose më mirë indekset e array, të fillojë në zero. 85 00:04:30,190 --> 00:04:34,000 Nëse kemi tre elemente në tonë grup, ne kemi një element në argv zero, 86 00:04:34,000 --> 00:04:37,930 një element në argv një, dhe një element në argv dy. 87 00:04:37,930 --> 00:04:41,700 Nuk ka asnjë element në argv tre, dhe një koleksion të madhësisë tre. 88 00:04:41,700 --> 00:04:43,990 Pra, kjo është arsyeja pse e fundit element i argv mund gjithmonë 89 00:04:43,990 --> 00:04:49,510 të gjenden në sheshin argv argc kllapa minus një. 90 00:04:49,510 --> 00:04:52,420 >> Pra, le të supozojmë që e ekzekuton përdoruesit programi i pangopur si follows-- 91 00:04:52,420 --> 00:04:57,970 nëse shkruani në command-line dot çaj babëzitur hapësirë ​​1024 hapësirë ​​CS50, 92 00:04:57,970 --> 00:05:00,720 dhe për çfarëdo arsye ne kemi përgatitur tashmë programin tonë lakmitar 93 00:05:00,720 --> 00:05:04,050 të njohin dhe të punojnë me këto argumente command-line. 94 00:05:04,050 --> 00:05:07,030 Ne nuk e bëri më parë, kur ne kemi punuar në atë për problemin babëzitur, 95 00:05:07,030 --> 00:05:09,660 por le të themi që kemi modifikuar tani ajo që ne bëjmë procesin 96 00:05:09,660 --> 00:05:11,480 argumente komanda-line në një farë mënyre. 97 00:05:11,480 --> 00:05:15,720 Në këtë rast, argv zero është plagë dot lakmitar. 98 00:05:15,720 --> 00:05:17,042 Çfarë është argv një? 99 00:05:17,042 --> 00:05:19,030 E pra, kjo është 1024, e drejtë? 100 00:05:19,030 --> 00:05:22,620 Është e 1024, por këtu është një distinction-- vërtetë e rëndësishme 101 00:05:22,620 --> 00:05:26,410 a ju kujtohet llojin e të dhënave e argv? 102 00:05:26,410 --> 00:05:31,020 >> Ajo ruan vargjet, e drejtë? 103 00:05:31,020 --> 00:05:34,140 Por kjo duket si 1024 është një vlerë e plotë. 104 00:05:34,140 --> 00:05:36,530 Kjo është një të vërtetë e rëndësishme dallim, dhe në fakt është 105 00:05:36,530 --> 00:05:40,200 duke shkuar për të bërë diçka që ju mund të hasni në probleme më vonë. 106 00:05:40,200 --> 00:05:43,770 Çdo gjë në argv është ruhet si një varg. 107 00:05:43,770 --> 00:05:48,775 Pra, përmbajtja argv dikujt janë string një, zero, dy, katër, 108 00:05:48,775 --> 00:05:50,275 i përbërë nga këto katër karaktere. 109 00:05:50,275 --> 00:05:53,870 Është sikur përdoruesi shtypur një, zero, dy, katër 110 00:05:53,870 --> 00:05:56,680 si letra individuale apo karaktere. 111 00:05:56,680 --> 00:06:00,730 Ajo nuk është numër i plotë 1024, dhe kështu që ju nuk mund të drejtpërdrejt 112 00:06:00,730 --> 00:06:11,580 punojnë me të duke thënë int 1000, ose në vend të int x është e barabartë me një të tillë argv minus 24. 113 00:06:11,580 --> 00:06:15,550 >> Intuitive, ju mund të mendoni për atë si, OK, edhe kjo është 1,024 minus 24, 114 00:06:15,550 --> 00:06:17,920 kështu x është i barabartë me 1,000. 115 00:06:17,920 --> 00:06:22,020 Por në fakt, kjo nuk është rasti, sepse argv një është një varg. 116 00:06:22,020 --> 00:06:23,940 String 1024. 117 00:06:23,940 --> 00:06:28,739 Tani ka një funksion që mund të jetë përdoret për të kthyer në vargjet në integers. 118 00:06:28,739 --> 00:06:30,780 Unë nuk do të prishin atë për ju tani, por unë jam i sigurt Zamyla 119 00:06:30,780 --> 00:06:34,380 do të jetë i lumtur të ju tregojë për atë në walkthrough për një problem në të ardhmen. 120 00:06:34,380 --> 00:06:36,390 Por ju mund të gjeni edhe PROBLEMET like-- justifikim 121 00:06:36,390 --> 00:06:39,921 mua, funksionet që do të bëni këtë duke iu referuar 50, 122 00:06:39,921 --> 00:06:42,462 në qoftë se ju shkoni në udhëzues referimi ju mund të gjeni një funksion që 123 00:06:42,462 --> 00:06:43,820 do ta bëjë këtë konvertim për ju. 124 00:06:43,820 --> 00:06:45,980 Por përsëri, në walkthrough për një problem në të ardhmen, 125 00:06:45,980 --> 00:06:48,290 Zamyla do të jenë të lumtur për po ju them se çfarë funksioni 126 00:06:48,290 --> 00:06:53,280 ajo është se do të konvertohet string 1024 në numrin e plotë 1024. 127 00:06:53,280 --> 00:06:54,560 >> Të gjithë të drejtë, kështu duke lëvizur në. 128 00:06:54,560 --> 00:06:56,726 Ne kemi mbuluar zero tonë argv, ne kemi mbuluar argv një. 129 00:06:56,726 --> 00:06:58,000 Çfarë është në argv dy? 130 00:06:58,000 --> 00:06:58,620 CS50. 131 00:06:58,620 --> 00:07:01,350 Kjo është ndoshta një shumë vetë-shpjeguese. 132 00:07:01,350 --> 00:07:02,950 Çfarë është në argv tre? 133 00:07:02,950 --> 00:07:04,970 Mirë përsëri, ne nuk të vërtetë e di, e drejtë? 134 00:07:04,970 --> 00:07:08,060 Ne kemi një grup të madhësisë tre, kjo është si shumë elemente përdorues 135 00:07:08,060 --> 00:07:11,610 shtypur në command-line, kështu që në qoftë se ne do të shkojmë në argv tre, 136 00:07:11,610 --> 00:07:14,660 ne jemi tani tejkaluar caqet e array tonë. 137 00:07:14,660 --> 00:07:18,570 Përpiluesit do të na bëjë këtë, nuk ka asnjë problem intuitive me të, 138 00:07:18,570 --> 00:07:22,890 por në aspektin e në fakt çfarë po ndodh të ndodhë, ne vërtetë nuk e di. 139 00:07:22,890 --> 00:07:25,380 Kjo varet nga ajo që është që ndodhet në memorie ku 140 00:07:25,380 --> 00:07:28,060 argv tre do të pritet të jetë. 141 00:07:28,060 --> 00:07:30,716 Dhe kështu që ne mund të përfundojë duke u larguar Scot falas. 142 00:07:30,716 --> 00:07:33,840 Më shumë gjasa se jo, veçanërisht kur ju jeni duke punuar me argv krahasim 143 00:07:33,840 --> 00:07:35,548 çdo grup tjetër kjo është në programin tonë, 144 00:07:35,548 --> 00:07:38,660 ne jeni me siguri do të vuajnë një faji segmentimit. Pra, përsëri, 145 00:07:38,660 --> 00:07:42,756 të sigurt që të mos kaloj kufijtë e vargjeve tuaja, veçanërisht argv, 146 00:07:42,756 --> 00:07:47,170 duke pasur parasysh shkallën e lartë të Rëndësia në programet tuaja. 147 00:07:47,170 --> 00:07:48,100 >> Unë jam Doug Lloyd. 148 00:07:48,100 --> 00:07:50,170 Kjo është CS50. 149 00:07:50,170 --> 00:07:51,457