>> [Musik spiller]
>> DOUG LLOYD: Okay, så lad os taler om kommandolinje-argumenter.
Så indtil videre i løbet temmelig meget alle dine programmer
har sikkert begyndt ligesom denne-- int main tomrum.
Vi har været at indsamle brugerinput, hvis vi har brug for det
i vores programmer, såsom Mario program, for eksempel
af in-program prompter.
Vi har ikke nødvendigt at ændre erklæringen om vigtigste,
fordi i stedet inde i vigtigste, vi bare sige, du kan kalde det for at få int.
Hvor stor vil du have pyramiden være?
Eller du kan kalde det for at få float-- hvor meget forandring
skal jeg output til brugeren?
>> Der er en anden måde selv, og hvis vi ønsker, at vores brugere
at kunne tilvejebringe data til vores program
på runtime i stedet for, mens programmet kører,
en subtil forskel, men undertiden en meget nyttig,
vi har brug for en ny form for erklære vigtigste.
Vi kan ikke bruge int main ugyldige, hvis vi ønsker at indsamle andre data på kommandolinjen
når brugeren kører programmet, dermed kommandolinjeargumenter.
>> At indsamle disse kommandolinjen argumenter fra brugeren,
ændre din erklæring om vigtigste at ligne denne-- int
vigtigste, åbne parentes, int argc, komma, string argv, kantede parenteser,
og derefter åbne krøllet tandbøjle.
Så hvad betyder det allerede?
Nå, vi passerer i to parametre, eller argumenter, eller input til vigtigste.
One, et helt tal kaldes argc, og den anden er hvad?
Det er en bred vifte af strenge, ikke?
Vi ser, at firkantede beslag notation.
Det er en bred vifte af strenge.
Det er ikke en individuel streng, Det er en bred vifte af strenge.
Og disse to argumenter, argc og argv, gøre det muligt for dig at vide, hvilke data brugeren
har givet på kommandolinjen og hvor mange ting, de
leveres på kommandolinjen.
Temmelig nyttige ting at arbejde med.
>> Argc står for argument tæller, og du skal vide, ved den måde,
at man kunne kalde argc uanset hvad du ønsker det.
Du kan ringe til argv hvad du ville.
Disse er blot konventionelle navne som vi bruger til them-- argument tæller,
og som vi vil se i en anden, argument vektor, argv.
Men du behøver ikke at kalde dem argc og argv, hvis du ikke vil,
men konventionelt, det er hvad vi gør.
>> Så alligevel, argc, argumentet tæller.
Det er et heltal-typen variabel og så, som man kunne forvente, hvis vi har to ting
at vi kommer til at være at finde ud af, hvad disse er indtastet
og hvor meget stuff bruger skrevet, argc er
vil fortælle os, hvor meget kram brugeren har skrevet.
Så det giver dig en række kommandolinjeargumenter bruger
indtastet, da programmet blev henrettet.
Så hvis dit program er køre prik skråstreg grådige,
og indersiden af ​​din grådige programmere din vigtigste funktion
har erklæringen int vigtigste int argc, snor argv firkantede parenteser, så
argc i dette tilfælde er en.
Nu opdager vi ikke tælle, hvor mange ting
brugeren har skrevet efter navnet programmet.
Programnavnet selv tæller som en kommando-linje argument.
>> Så dot skråstreg grådige, i så fald argc er én.
Hvis brugeren har skrevet skråstreg grådige 1024 CS50 på kommandolinjen, argc i dette tilfælde
ville være tre.
Og vi ved dette, fordi den måde, at opdelingen mellem strengene
detekteres, om der er et mellemrum, eller en fane,
eller sådan noget mellem dem.
Så enhver mængde hvidt rum, såkaldte, mellem værdierne indtastet kommando-linje
angiver, hvor mange der er.
Så dot skråstreg grådige plads 1024 plads CS50, argc, i dette tilfælde, er tre.
>> Argv er vektoren argument.
Vector, ved den måde, er bare et andet ord for et array,
og dette er et array der gemmer strenge.
En streng pr element, som er strengene at brugeren rent faktisk
indtastes på kommandolinjen da programmet blev henrettet.
Nu som det er tilfældet med enhver matrix, hvis du
husker fra vores diskussion af arrays, det første element i argv
vil altid findes ved argv firkantet beslag nul.
Det er den første indeks af argv array.
Således at will-- og i virkeligheden, vil altid være navnet på programmet,
vil altid være placeret på argv firkantede beslag nul.
>> Det sidste element i argv er altid fundet ved argv firkantet parentes argc minus en.
Kan du se hvorfor?
Husk, hvor mange elementer findes i denne række.
Tja, vi ved at-- det er argc række elementer.
Hvis brugeren har skrevet tre ting på kommandolinjen, argc er tre.
Men fordi i C, når vi arbejder med arrays, hvert element i array,
eller rettere indeksene for array, starter ved nul.
Hvis vi har tre elementer i vores array, har vi et element på argv nul,
et element på argv én, og et element i argv to.
Der er ingen elementer i argv tre, og en bred vifte af størrelse tre.
Så det er derfor det sidste element i argv kan altid
findes på argv firkantet parentes argc minus en.
>> Så lad os antage brugeren Udfører den grådige program follows--
hvis de skriver i kommandolinjen prik skråstreg grådige plads 1024 plads CS50,
og uanset af hvilken grund vi har allerede forberedt vores grådige program
at kende og arbejde med disse kommandolinjeargumenter.
Vi gjorde ikke tidligere, da vi arbejdede på det for den grådige problem,
men lad os sige, vi har nu ændret det, så vi gør processen
de kommandolinje-argumenter i nogle måde.
I dette tilfælde, argv nul er dot skråstreg grådige.
Hvad er argv en?
Tja, det er 1024, ikke?
Det er 1024, men her er en virkelig vigtigt distinction--
husker du datatypen for argv?
>> Den gemmer strygere, ikke?
Men det ligner 1024 er en heltalsværdi.
Dette er en virkelig vigtig forskel, og er faktisk
kommer til at blive noget, som du kan komme i senere problemer.
Alt i argv er lagres som en streng.
Så argv ens indholdet er det string én, nul, to, fire,
bestående af de fire karakterer.
Det er som om brugeren har indtastet en, nul, to, fire
som enkelte bogstaver eller tegn.
Det er ikke det hele tal 1024, og så kan du ikke direkte
arbejde med det ved at sige int 1000, eller snarere int x lig argv én minus 24.
>> Intuitivt, kunne man tro på, at som, OK, godt det er 1.024 minus 24,
så x er lig med 1.000.
Men i virkeligheden, det er ikke tilfældet, fordi argv ene er en streng.
Strengen 1024.
Nu er der en funktion, der kan være anvendes til at konvertere strenge til heltal.
Jeg vil ikke ødelægge det for dig nu, men jeg er sikker på Zamyla
vil være glade for at fortælle dig om det i walkthrough for en fremtidig problem.
Men du kan også finde problemer like-- undskyldning
mig, funktioner, der ville gøre dette i henvisning 50,
Hvis du går til reference guide du kan finde en funktion,
vil gøre denne konvertering for dig.
Men igen, i walkthrough for en fremtidig problem,
Zamyla vil være glade for fortælle dig, hvad funktion
det er, vil konvertere string 1024 til heltal 1024.
>> Okay, så går videre.
Vi har dækket vores argv nul, Vi har dækket argv én.
Hvad der er i argv to?
CS50.
At man er nok temmelig selvforklarende.
Hvad der er i argv tre?
Nå igen, vi ved ikke rigtig, vel?
Vi har en bred vifte af størrelse tre, det er, hvor mange elementer brugeren
indtastes på kommandolinjen, så hvis vi går til argv tre,
vi nu overskride grænserne for vores matrix.
Den compiler vil lade os gøre det, der er ikke noget intuitivt problem med det,
men i form af faktisk, hvad der foregår til at ske, vi ikke rigtig kender.
Det afhænger af, hvad der er placeret på den hukommelse, hvor
argv tre ville forventes at være.
Og så vi kunne ende komme væk scot gratis.
Mere sandsynligt end ikke, især når du arbejder med argv i modsætning
til en anden matrix der er i vores program,
vi formentlig kommer til at lide en segmentering fejl. Så igen,
være sikker på ikke at overskride grænserne af dine arrays, især argv,
da de i høj grad af betydning i dine programmer.
>> Jeg er Doug Lloyd.
Det er CS50.