>> [MUSIC JOC]
>> DOUG LLOYD: Bine, Să vorbesc despre argumente în linia de comandă.
Deci, până în prezent în curs destul de mult toate programele
au început, probabil, ca asta: void main Int.
Am fost de colectare datele introduse de utilizator dacă avem nevoie de ea
în programele noastre, cum ar fi Programul Mario, de exemplu,
de solicitări în program.
Nu am nevoie de a modifica declarația de principal,
pentru că în loc de noi în interiorul principal doar spun, s-ar putea numi pentru a obține Int.
Cât de mare vrei piramida să fie?
Sau s-ar putea numi pentru a obține float-- cât de mult o schimbare
ar trebui să am de ieșire pentru utilizator?
>> Nu este un alt mod, deși, și dacă dorim utilizatorii noștri
să fie în măsură să furnizeze date programul nostru
în timpul rulării în loc de în timp ce programul se execută,
o distincție subtilă, dar uneori unul foarte util,
avem nevoie de o nouă formă de declarare principal.
Nu putem folosi void main int dacă vrem să colecta alte date la linia de comandă
atunci când utilizatorul execută programul, prin urmare, argumente în linia de comandă.
>> Pentru a colecta aceste linie de comandă argumente de la utilizator,
schimba declarația dumneavoastră de principal pentru a arata ca asta: int
Principalele paren, deschise, Int argc, virgulă, string argv, între paranteze drepte,
și apoi deschideți bretele buclat.
Deci, ce înseamnă asta deja?
Ei bine, trecem în doi parametri, sau argumente, sau intrari la principalele.
Unul, un număr întreg numit argc, iar celălalt este ceea ce?
Este o serie de siruri de caractere, nu?
Vedem că notație suport pătrat.
Este o serie de siruri de caractere.
Nu este un șir individ, este o serie de siruri de caractere.
Și aceste două argumente, argc și argv, vă permit să știi ce datele utilizatorului
a oferit la linia de comandă și cât de multe lucruri pe care le
furnizate la linia de comandă.
Lucruri destul de utile pentru a lucra cu.
>> Argc reprezintă numărul de argument, și ar trebui să știți, de altfel,
pe care le-ar putea suna argc orice vrei.
Puteți apela argv orice ai vrut.
Acestea sunt numele doar convenționale pe care le folosim pentru them-- conta argument,
si ca vom vedea într-o secundă, vector argument, argv.
Dar nu trebuie să le numim argc și argv dacă nu doriți să,
dar convențional, asta e ceea ce facem.
>> Deci, oricum, argc, numărul argument.
Este o variabilă de tip întreg și astfel, ca s-ar putea aștepta, dacă avem două lucruri
că vom fi găsirea ce acestea sunt tastate
și cât de mult chestii utilizator introdus, argc este
O să ne spună cât de mult chestii utilizatorul tastat.
Așa că vă oferă o serie de utilizator argumente în linia de comandă
tastat când programul a fost executat.
Deci, dacă programul este rula punct slash lacomi,
și în interiorul lacomi dvs. programa funcția principală
are declarație int int main argc, string argv paranteze pătrate, apoi
argc în acest caz este unul.
Acum observați noi nu conta cât de multe lucruri
utilizatorul tastat după numele programului.
Numele programului în sine contează ca un argument în linia de comandă.
>> Deci dot slash lacomi, în acest caz, argc este unul.
În cazul în care utilizatorul tastat slash lacomi 1,024 CS50 la-linia de comandă, argc în acest caz
ar fi trei.
Și știm asta pentru că drumul că repartizarea între siruri de caractere
este detectată este dacă există un spațiu, sau o filă,
sau ceva de genul asta între ei.
Deci, orice cantitate de spațiu alb, așa-numitele, între valorile tastat linie de comandă
indică cât de multe sunt.
Deci dot slash spațiu lacomi 1024 spațiu CS50, argc, în acest caz, este de trei.
>> Argv este vectorul argument.
Vector, apropo, este doar un alt cuvânt pentru o matrice,
și aceasta este o matrice care stochează siruri de caractere.
Unul șir pe elemente, care este siruri de caractere pe care utilizatorul de fapt
tastat la linia de comandă în cazul în care programul a fost executat.
Acum, așa cum este cazul cu orice matrice, dacă
amintesc din discuția noastră de matrice, primul element al argv
este întotdeauna o să fie găsite la argv suport pătrat zero.
Asta e primul indice de matrice argv.
Astfel încât will-- și, de fapt, că voința fie întotdeauna numele programului,
va fi întotdeauna situat la argv suport pătrat zero.
>> Ultimul element de argv este întotdeauna găsit la argv pătrat paranteze argc minus unul.
Vedeți de ce?
Amintiți-vă cât de multe elemente există în această matrice.
Ei bine, știm că e that-- Numărul argc de elemente.
În cazul în care utilizatorul tastat trei lucruri la linia de comandă, argc este de trei.
Dar, pentru că în c, atunci când lucrăm cu tablouri, fiecare element al tabloului,
sau mai degrabă indicii matrice, începe de la zero.
Dacă avem trei elemente nostru matrice, avem un element la argv la zero,
un element la un argv, și un element de la argv două.
Nu există nici un element în argv trei, și o serie de dimensiuni de trei.
Deci, de aceea ultimul element de argv pot întotdeauna
fi consultat pe piața argv paranteze argc minus unul.
>> Deci, haideți să-și asume executa utilizator programul lacomi ca follows--
în cazul în care introduceți în dot linie de comandă slash lacomi spațiu 1,024 spațiu CS50,
și pentru orice motiv ne-am pregătit deja programul nostru de lacomi
să cunoască și să lucreze cu acestea argumente în linia de comandă.
Nu am anterior atunci când am lucrat pe ea pentru problema lacomi,
dar să spunem că am modificat acum în așa fel încât să facem proces
argumentele de linie de comandă într-un fel.
În acest caz, argv la zero este slash dot lacom.
Ce este argv unul?
Ei bine, e 1024, nu?
Este 1024, dar aici e un distinction-- foarte important
îți amintești de tipul de date de argv?
>> Acesta stochează siruri de caractere, nu?
Dar se pare ca 1024 este o valoare întreagă.
Acesta este un foarte important distincție, și este de fapt
va deveni ceva ce s-ar putea întâlni în probleme mai tarziu.
Totul în argv este stocate ca un șir.
Deci, conținutul argv cuiva sunt string unu, zero, două, patru,
alcătuit din cele patru caractere.
E ca și cum utilizatorul tastat unu, zero, două, patru
ca scrisori individuale sau caractere.
Nu este numărul întreg 1024, și astfel încât să nu se poate direct
lucra cu ea prin a spune Int 1000, sau mai degrabă int x este egal cu argv un minus de 24.
>> Intuitiv, ai putea crede că a ca, OK, bine e 1024 minus 24,
deci x este egal cu 1,000.
Dar, de fapt, că nu e cazul, pentru că argv unul este un șir.
Șirul 1024.
Acum există o funcție care poate fi folosit pentru a converti șiruri la numere întregi.
Eu nu-l va strica pentru tine acum, dar eu sunt sigur Zamyla
va fi bucuros să vă spun despre ea în walkthrough pentru o problemă în viitor.
Dar puteți găsi, de asemenea Probleme like-- scuză
ma, funcții care ar face acest lucru în referință 50,
dacă te duci la ghidul de referință puteți găsi o funcție care
va face această conversie pentru tine.
Dar, din nou, în Walkthrough pentru o problemă în viitor,
Zamyla va fi fericit să vă spun ce funcție
este că va converti string 1024 la numărul întreg 1024.
>> Bine, așa mai departe.
Ne-am acoperit la zero nostru argv, am acoperit argv unul.
Ce e in argv doi?
CS50.
Asta e, probabil, unul destul de auto-explicativ.
Ce e in argv trei?
Ei bine, din nou, noi nu prea știu, nu?
Avem o serie de dimensiuni trei, care este cât de multe elemente de utilizator
tastat la linia de comandă, Deci, dacă mergem la argv trei,
suntem acum depășirea limitele gama noastră.
Compilatorul va să facem acest lucru, nu e nici o problemă cu el intuitiv,
dar în termeni de ceea ce se întâmplă de fapt să se întâmple, nu prea stiu.
Aceasta depinde de ceea ce este situat la memoria în
argv trei ar fi de așteptat să fie.
Și astfel am putea ajunge obtinerea departe scot gratuit.
Mai multe sanse decat nu, în special atunci când lucrați cu argv, spre deosebire
la orice alt matrice care este în programul nostru,
ne, probabil, va suferi o eroare de segmentare. Deci, din nou,
Aveți grijă să nu depășească limitele de matrice dvs., argv în special,
având în vedere gradul ridicat de importanță în programele dumneavoastră.
>> Sunt Doug Lloyd.
Acest lucru este CS50.