1 00:00:00,000 --> 00:00:02,480 >> [MUSIC JOC] 2 00:00:02,480 --> 00:00:06,460 3 00:00:06,460 --> 00:00:09,350 >> DOUG LLOYD: Bine, Să vorbesc despre argumente în linia de comandă. 4 00:00:09,350 --> 00:00:11,800 Deci, până în prezent în curs destul de mult toate programele 5 00:00:11,800 --> 00:00:16,360 au început, probabil, ca asta: void main Int. 6 00:00:16,360 --> 00:00:18,310 Am fost de colectare datele introduse de utilizator dacă avem nevoie de ea 7 00:00:18,310 --> 00:00:21,080 în programele noastre, cum ar fi Programul Mario, de exemplu, 8 00:00:21,080 --> 00:00:22,990 de solicitări în program. 9 00:00:22,990 --> 00:00:25,190 Nu am nevoie de a modifica declarația de principal, 10 00:00:25,190 --> 00:00:30,684 pentru că în loc de noi în interiorul principal doar spun, s-ar putea numi pentru a obține Int. 11 00:00:30,684 --> 00:00:32,350 Cât de mare vrei piramida să fie? 12 00:00:32,350 --> 00:00:34,455 Sau s-ar putea numi pentru a obține float-- cât de mult o schimbare 13 00:00:34,455 --> 00:00:36,400 ar trebui să am de ieșire pentru utilizator? 14 00:00:36,400 --> 00:00:38,630 >> Nu este un alt mod, deși, și dacă dorim utilizatorii noștri 15 00:00:38,630 --> 00:00:40,580 să fie în măsură să furnizeze date programul nostru 16 00:00:40,580 --> 00:00:43,320 în timpul rulării în loc de în timp ce programul se execută, 17 00:00:43,320 --> 00:00:45,910 o distincție subtilă, dar uneori unul foarte util, 18 00:00:45,910 --> 00:00:48,120 avem nevoie de o nouă formă de declarare principal. 19 00:00:48,120 --> 00:00:53,320 Nu putem folosi void main int dacă vrem să colecta alte date la linia de comandă 20 00:00:53,320 --> 00:00:57,540 atunci când utilizatorul execută programul, prin urmare, argumente în linia de comandă. 21 00:00:57,540 --> 00:00:59,810 >> Pentru a colecta aceste linie de comandă argumente de la utilizator, 22 00:00:59,810 --> 00:01:03,140 schimba declarația dumneavoastră de principal pentru a arata ca asta: int 23 00:01:03,140 --> 00:01:10,450 Principalele paren, deschise, Int argc, virgulă, string argv, între paranteze drepte, 24 00:01:10,450 --> 00:01:12,670 și apoi deschideți bretele buclat. 25 00:01:12,670 --> 00:01:14,415 Deci, ce înseamnă asta deja? 26 00:01:14,415 --> 00:01:19,410 Ei bine, trecem în doi parametri, sau argumente, sau intrari la principalele. 27 00:01:19,410 --> 00:01:23,800 Unul, un număr întreg numit argc, iar celălalt este ceea ce? 28 00:01:23,800 --> 00:01:26,430 29 00:01:26,430 --> 00:01:29,640 Este o serie de siruri de caractere, nu? 30 00:01:29,640 --> 00:01:31,140 Vedem că notație suport pătrat. 31 00:01:31,140 --> 00:01:32,181 Este o serie de siruri de caractere. 32 00:01:32,181 --> 00:01:35,110 Nu este un șir individ, este o serie de siruri de caractere. 33 00:01:35,110 --> 00:01:39,640 Și aceste două argumente, argc și argv, vă permit să știi ce datele utilizatorului 34 00:01:39,640 --> 00:01:42,912 a oferit la linia de comandă și cât de multe lucruri pe care le 35 00:01:42,912 --> 00:01:44,120 furnizate la linia de comandă. 36 00:01:44,120 --> 00:01:46,570 Lucruri destul de utile pentru a lucra cu. 37 00:01:46,570 --> 00:01:50,310 >> Argc reprezintă numărul de argument, și ar trebui să știți, de altfel, 38 00:01:50,310 --> 00:01:52,600 pe care le-ar putea suna argc orice vrei. 39 00:01:52,600 --> 00:01:54,710 Puteți apela argv orice ai vrut. 40 00:01:54,710 --> 00:01:58,740 Acestea sunt numele doar convenționale pe care le folosim pentru them-- conta argument, 41 00:01:58,740 --> 00:02:00,907 si ca vom vedea într-o secundă, vector argument, argv. 42 00:02:00,907 --> 00:02:03,698 Dar nu trebuie să le numim argc și argv dacă nu doriți să, 43 00:02:03,698 --> 00:02:05,570 dar convențional, asta e ceea ce facem. 44 00:02:05,570 --> 00:02:07,500 >> Deci, oricum, argc, numărul argument. 45 00:02:07,500 --> 00:02:11,569 Este o variabilă de tip întreg și astfel, ca s-ar putea aștepta, dacă avem două lucruri 46 00:02:11,569 --> 00:02:13,860 că vom fi găsirea ce acestea sunt tastate 47 00:02:13,860 --> 00:02:16,070 și cât de mult chestii utilizator introdus, argc este 48 00:02:16,070 --> 00:02:18,559 O să ne spună cât de mult chestii utilizatorul tastat. 49 00:02:18,559 --> 00:02:20,850 Așa că vă oferă o serie de utilizator argumente în linia de comandă 50 00:02:20,850 --> 00:02:22,470 tastat când programul a fost executat. 51 00:02:22,470 --> 00:02:25,780 Deci, dacă programul este rula punct slash lacomi, 52 00:02:25,780 --> 00:02:28,670 și în interiorul lacomi dvs. programa funcția principală 53 00:02:28,670 --> 00:02:34,800 are declarație int int main argc, string argv paranteze pătrate, apoi 54 00:02:34,800 --> 00:02:37,950 argc în acest caz este unul. 55 00:02:37,950 --> 00:02:40,200 Acum observați noi nu conta cât de multe lucruri 56 00:02:40,200 --> 00:02:42,590 utilizatorul tastat după numele programului. 57 00:02:42,590 --> 00:02:46,710 Numele programului în sine contează ca un argument în linia de comandă. 58 00:02:46,710 --> 00:02:51,770 >> Deci dot slash lacomi, în acest caz, argc este unul. 59 00:02:51,770 --> 00:02:57,910 În cazul în care utilizatorul tastat slash lacomi 1,024 CS50 la-linia de comandă, argc în acest caz 60 00:02:57,910 --> 00:02:59,520 ar fi trei. 61 00:02:59,520 --> 00:03:03,720 Și știm asta pentru că drumul că repartizarea între siruri de caractere 62 00:03:03,720 --> 00:03:06,030 este detectată este dacă există un spațiu, sau o filă, 63 00:03:06,030 --> 00:03:08,230 sau ceva de genul asta între ei. 64 00:03:08,230 --> 00:03:13,860 Deci, orice cantitate de spațiu alb, așa-numitele, între valorile tastat linie de comandă 65 00:03:13,860 --> 00:03:15,720 indică cât de multe sunt. 66 00:03:15,720 --> 00:03:24,040 Deci dot slash spațiu lacomi 1024 spațiu CS50, argc, în acest caz, este de trei. 67 00:03:24,040 --> 00:03:26,600 >> Argv este vectorul argument. 68 00:03:26,600 --> 00:03:29,240 Vector, apropo, este doar un alt cuvânt pentru o matrice, 69 00:03:29,240 --> 00:03:31,510 și aceasta este o matrice care stochează siruri de caractere. 70 00:03:31,510 --> 00:03:35,540 Unul șir pe elemente, care este siruri de caractere pe care utilizatorul de fapt 71 00:03:35,540 --> 00:03:39,230 tastat la linia de comandă în cazul în care programul a fost executat. 72 00:03:39,230 --> 00:03:40,990 Acum, așa cum este cazul cu orice matrice, dacă 73 00:03:40,990 --> 00:03:44,380 amintesc din discuția noastră de matrice, primul element al argv 74 00:03:44,380 --> 00:03:49,150 este întotdeauna o să fie găsite la argv suport pătrat zero. 75 00:03:49,150 --> 00:03:51,800 Asta e primul indice de matrice argv. 76 00:03:51,800 --> 00:03:55,720 Astfel încât will-- și, de fapt, că voința fie întotdeauna numele programului, 77 00:03:55,720 --> 00:03:59,730 va fi întotdeauna situat la argv suport pătrat zero. 78 00:03:59,730 --> 00:04:08,590 >> Ultimul element de argv este întotdeauna găsit la argv pătrat paranteze argc minus unul. 79 00:04:08,590 --> 00:04:10,300 Vedeți de ce? 80 00:04:10,300 --> 00:04:14,180 Amintiți-vă cât de multe elemente există în această matrice. 81 00:04:14,180 --> 00:04:16,660 Ei bine, știm că e that-- Numărul argc de elemente. 82 00:04:16,660 --> 00:04:21,279 În cazul în care utilizatorul tastat trei lucruri la linia de comandă, argc este de trei. 83 00:04:21,279 --> 00:04:27,070 Dar, pentru că în c, atunci când lucrăm cu tablouri, fiecare element al tabloului, 84 00:04:27,070 --> 00:04:30,190 sau mai degrabă indicii matrice, începe de la zero. 85 00:04:30,190 --> 00:04:34,000 Dacă avem trei elemente nostru matrice, avem un element la argv la zero, 86 00:04:34,000 --> 00:04:37,930 un element la un argv, și un element de la argv două. 87 00:04:37,930 --> 00:04:41,700 Nu există nici un element în argv trei, și o serie de dimensiuni de trei. 88 00:04:41,700 --> 00:04:43,990 Deci, de aceea ultimul element de argv pot întotdeauna 89 00:04:43,990 --> 00:04:49,510 fi consultat pe piața argv paranteze argc minus unul. 90 00:04:49,510 --> 00:04:52,420 >> Deci, haideți să-și asume executa utilizator programul lacomi ca follows-- 91 00:04:52,420 --> 00:04:57,970 în cazul în care introduceți în dot linie de comandă slash lacomi spațiu 1,024 spațiu CS50, 92 00:04:57,970 --> 00:05:00,720 și pentru orice motiv ne-am pregătit deja programul nostru de lacomi 93 00:05:00,720 --> 00:05:04,050 să cunoască și să lucreze cu acestea argumente în linia de comandă. 94 00:05:04,050 --> 00:05:07,030 Nu am anterior atunci când am lucrat pe ea pentru problema lacomi, 95 00:05:07,030 --> 00:05:09,660 dar să spunem că am modificat acum în așa fel încât să facem proces 96 00:05:09,660 --> 00:05:11,480 argumentele de linie de comandă într-un fel. 97 00:05:11,480 --> 00:05:15,720 În acest caz, argv la zero este slash dot lacom. 98 00:05:15,720 --> 00:05:17,042 Ce este argv unul? 99 00:05:17,042 --> 00:05:19,030 Ei bine, e 1024, nu? 100 00:05:19,030 --> 00:05:22,620 Este 1024, dar aici e un distinction-- foarte important 101 00:05:22,620 --> 00:05:26,410 îți amintești de tipul de date de argv? 102 00:05:26,410 --> 00:05:31,020 >> Acesta stochează siruri de caractere, nu? 103 00:05:31,020 --> 00:05:34,140 Dar se pare ca 1024 este o valoare întreagă. 104 00:05:34,140 --> 00:05:36,530 Acesta este un foarte important distincție, și este de fapt 105 00:05:36,530 --> 00:05:40,200 va deveni ceva ce s-ar putea întâlni în probleme mai tarziu. 106 00:05:40,200 --> 00:05:43,770 Totul în argv este stocate ca un șir. 107 00:05:43,770 --> 00:05:48,775 Deci, conținutul argv cuiva sunt string unu, zero, două, patru, 108 00:05:48,775 --> 00:05:50,275 alcătuit din cele patru caractere. 109 00:05:50,275 --> 00:05:53,870 E ca și cum utilizatorul tastat unu, zero, două, patru 110 00:05:53,870 --> 00:05:56,680 ca scrisori individuale sau caractere. 111 00:05:56,680 --> 00:06:00,730 Nu este numărul întreg 1024, și astfel încât să nu se poate direct 112 00:06:00,730 --> 00:06:11,580 lucra cu ea prin a spune Int 1000, sau mai degrabă int x este egal cu argv un minus de 24. 113 00:06:11,580 --> 00:06:15,550 >> Intuitiv, ai putea crede că a ca, OK, bine e 1024 minus 24, 114 00:06:15,550 --> 00:06:17,920 deci x este egal cu 1,000. 115 00:06:17,920 --> 00:06:22,020 Dar, de fapt, că nu e cazul, pentru că argv unul este un șir. 116 00:06:22,020 --> 00:06:23,940 Șirul 1024. 117 00:06:23,940 --> 00:06:28,739 Acum există o funcție care poate fi folosit pentru a converti șiruri la numere întregi. 118 00:06:28,739 --> 00:06:30,780 Eu nu-l va strica pentru tine acum, dar eu sunt sigur Zamyla 119 00:06:30,780 --> 00:06:34,380 va fi bucuros să vă spun despre ea în walkthrough pentru o problemă în viitor. 120 00:06:34,380 --> 00:06:36,390 Dar puteți găsi, de asemenea Probleme like-- scuză 121 00:06:36,390 --> 00:06:39,921 ma, funcții care ar face acest lucru în referință 50, 122 00:06:39,921 --> 00:06:42,462 dacă te duci la ghidul de referință puteți găsi o funcție care 123 00:06:42,462 --> 00:06:43,820 va face această conversie pentru tine. 124 00:06:43,820 --> 00:06:45,980 Dar, din nou, în Walkthrough pentru o problemă în viitor, 125 00:06:45,980 --> 00:06:48,290 Zamyla va fi fericit să vă spun ce funcție 126 00:06:48,290 --> 00:06:53,280 este că va converti string 1024 la numărul întreg 1024. 127 00:06:53,280 --> 00:06:54,560 >> Bine, așa mai departe. 128 00:06:54,560 --> 00:06:56,726 Ne-am acoperit la zero nostru argv, am acoperit argv unul. 129 00:06:56,726 --> 00:06:58,000 Ce e in argv doi? 130 00:06:58,000 --> 00:06:58,620 CS50. 131 00:06:58,620 --> 00:07:01,350 Asta e, probabil, unul destul de auto-explicativ. 132 00:07:01,350 --> 00:07:02,950 Ce e in argv trei? 133 00:07:02,950 --> 00:07:04,970 Ei bine, din nou, noi nu prea știu, nu? 134 00:07:04,970 --> 00:07:08,060 Avem o serie de dimensiuni trei, care este cât de multe elemente de utilizator 135 00:07:08,060 --> 00:07:11,610 tastat la linia de comandă, Deci, dacă mergem la argv trei, 136 00:07:11,610 --> 00:07:14,660 suntem acum depășirea limitele gama noastră. 137 00:07:14,660 --> 00:07:18,570 Compilatorul va să facem acest lucru, nu e nici o problemă cu el intuitiv, 138 00:07:18,570 --> 00:07:22,890 dar în termeni de ceea ce se întâmplă de fapt să se întâmple, nu prea stiu. 139 00:07:22,890 --> 00:07:25,380 Aceasta depinde de ceea ce este situat la memoria în 140 00:07:25,380 --> 00:07:28,060 argv trei ar fi de așteptat să fie. 141 00:07:28,060 --> 00:07:30,716 Și astfel am putea ajunge obtinerea departe scot gratuit. 142 00:07:30,716 --> 00:07:33,840 Mai multe sanse decat nu, în special atunci când lucrați cu argv, spre deosebire 143 00:07:33,840 --> 00:07:35,548 la orice alt matrice care este în programul nostru, 144 00:07:35,548 --> 00:07:38,660 ne, probabil, va suferi o eroare de segmentare. Deci, din nou, 145 00:07:38,660 --> 00:07:42,756 Aveți grijă să nu depășească limitele de matrice dvs., argv în special, 146 00:07:42,756 --> 00:07:47,170 având în vedere gradul ridicat de importanță în programele dumneavoastră. 147 00:07:47,170 --> 00:07:48,100 >> Sunt Doug Lloyd. 148 00:07:48,100 --> 00:07:50,170 Acest lucru este CS50. 149 00:07:50,170 --> 00:07:51,457