[MUSIC SPILLE] DOUG LLOYD: Greit, så la oss snakke om kommandolinjeargumenter. Så, så langt i løpet pen sett alle programmene dine har trolig startet som dette-- int main annullert. Vi har vært å samle brukerundersøkelser hvis vi trenger det i våre programmer, slik som Mario program, f.eks av in-program instruksjonene. Vi har ikke behov for å modifisere erklæringen av hoved, fordi stedet innsiden av hoved vi bare si, du kan kalle det å få int. Hvor stor vil du ha pyramiden for å bli? Eller du kan kalle det å få float-- hvor mye endring burde jeg utgang til brukeren? Det er en annen måte skjønt, og hvis vi ønsker at våre brukere å være i stand til å gi data til vårt program under kjøring i stedet for mens programmet kjører, en subtil forskjell, men og til en meget nyttig ett, vi trenger en ny form for erklære viktigste. Vi kan ikke bruke int main ugyldig dersom vi ønsker å samle andre data på kommandolinjen når brukeren kjører programmet, dermed kommandolinjeargumenter. Å samle disse kommandolinje argumenter fra brukeren, endre erklæring Hoved å ligne dette-- int viktigste, åpne paren, int argc, komma, string argv, klammer, og åpne klammeparentes. Så hva betyr det allerede? Vel, vi passerer i to parametre, eller argumenter, eller innganger til hoved. One, et tall som kalles argc, og den andre er hva? Det er en rekke strenger, ikke sant? Vi ser at hakeparentes notasjon. Det er en rekke strenger. Det er ikke en individuell streng, det er en rekke strenger. Og disse to argumentene, argc og argv, at du skal kunne vite hvilke data brukerens har gitt på kommandolinjen og hvor mange ting de gitt på kommandolinjen. Ganske nyttige ting å jobbe med. Argc står for argumentet teller, og du bør vite, forresten, at du kan kalle argc hva du vil det. Du kan ringe argv hva du ønsket. Dette er bare vanlige navn som vi bruker for them-- argument teller, og som vi vil se i et sekund, argument vektor, argv. Men du trenger ikke å kalle dem argc og argv hvis du ikke vil, men konvensjonelt, det er hva vi gjør. Så uansett, argc, argumentet teller. Det er et tall-type variabel og så, som du kanskje forventer, hvis vi har to ting at vi kommer til å være å finne ut hva disse er skrevet og hvor mye ting på brukeren har skrevet, er argc kommer til å fortelle oss hvor mye stappe brukeren har skrevet. Så det gir deg en rekke kommandolinjeargumenter bruker skrev da programmet ble henrettet. Så hvis programmet er kjøre dot slash grådig, og innsiden av grådige programmere din viktigste funksjon har erklæringen int main int argc, string argv hakeparenteser, deretter argc i så fall er en. Nå merker vi ikke telle hvor mange ting brukeren har skrevet etter programnavnet. Programmet navnet i seg selv teller som et kommandolinjeargument. Så dot slash grådig, i Da er argc en. Hvis brukeren skrev slash grådig 1024 CS50 på kommandolinjen, argc i så fall ville være tre. Og vi vet dette fordi veien at skillet mellom strengene oppdages er om det er en plass, eller en fane, eller noe sånt mellom dem. Så et beløp av tomrom, såkalt, mellom verdiene skrevet kommandolinje indikerer hvor mange det er. Så dot slash grådig plass 1024 plass CS50, argc, i så fall, er tre. Argv er argumentet vektor. Vector, forresten, er bare et annet ord for en matrise, og dette er en matrise som lagrer strenger. En streng per element, som er strengene som brukeren faktisk skrev på kommandolinjen da programmet ble henrettet. Nå er som tilfellet med noen array, hvis du husker fra vår diskusjon av matriser, det første elementet i argv er alltid kommer til å bli funnet på argv hakeparentes null. Det er den første indeks av argv array. Slik at will-- og faktisk, at viljen alltid være navnet på programmet, vil alltid være plassert argv hakeparentes null. Det siste elementet i argv er alltid funnet på argv firkantet parentes argc minus én. Ser du hvorfor? Husk hvor mange elementer finnes i denne matrisen. Vel, vi vet at-- det er argc antall elementer. Hvis brukeren har skrevet tre ting på en kommandolinjen, er argc tre. Men fordi i c, når vi jobber med matriser, hvert element i matrisen, eller snarere indeksene av rekken, starter på null. Hvis vi har tre elementer i vår array, har vi et element på argv null, et element i argv en, og et element på argv to. Det er ingen element på argv tre, og en matrise av størrelse tre. Så det er derfor det siste element av argv kan alltid finnes på argv torget parentes argc minus én. Så la oss anta bruker Utfører grådige program som follows-- hvis de skriver i kommandolinje dot slash grådig plass 1024 plass CS50, og uansett grunn vi har allerede forberedt vår grådige program å kjenne og arbeide med disse kommandolinjeargumenter. Vi gjorde ikke tidligere når vi jobbet på den for den grådige problem, men la oss si vi har nå endret det slik at vi gjør prosessen kommandolinjeargumenter på noen måte. I dette tilfellet, argv null er dot slash grådig. Hva er argv en? Vel, det er 1024, ikke sant? Det er 1024, men her er en veldig viktig distinction-- husker du datatypen argv? Den lagrer strenger, ikke sant? Men det ser ut som 1 024 er et helt tall verdi. Dette er en veldig viktig utmerkelse, og er faktisk kommer til å bli noe som du kan støte på i senere problemer. Alt i argv er lagret som en streng. Så argv ens innholdet er det en streng, null, to, fire, som består av de fire tegnene. Det er som om brukeren har skrevet en, null, to, fire som individuelle bokstaver eller tegn. Det er ikke heltallet 1024, og så du kan ikke direkte jobbe med det ved å si int 1000, eller heller int x lik argv en minus 24. Intuitivt, kan du tenke på at som, OK, vel det er 1024 minus 24, slik at x er lik 1.000. Men faktisk, det er ikke tilfelle, fordi argv ene er en streng. Strengen 1024. Nå er det en funksjon som kan være brukes til å konvertere strenger til heltall. Jeg vil ikke ødelegge det for deg nå, men jeg er sikker Zamyla vil gjerne fortelle deg om det i walkthrough for en fremtidig problem. Men du kan også finne problemer like-- unnskyldning meg, funksjoner som ville Dette gjør i referanse 50, Hvis du går til referansehåndbok du kan finne en funksjon som vil gjøre denne konverteringen for deg. Men igjen, i walkthrough for en fremtidig problem, Zamyla vil gjerne fortelle deg hvilken funksjon er det som vil konvertere strengen 1024 til 1024 heltall. Greit, så går videre. Vi har dekket våre argv null, vi har dekket argv en. Hva er i argv to? CS50. At man er nok ganske selvforklarende. Hva er i argv tre? Vel igjen, vi vet egentlig ikke, ikke sant? Vi har en rekke størrelse tre, det er hvor mange elementer brukeren skrev på kommandolinjen, så hvis vi går til argv tre, vi nå overskridelser grensene for vår matrise. Kompilatoren vil la oss gjøre dette, det er ingen intuitiv problem med det, men når det gjelder faktisk hva som kommer å skje, vet vi ikke egentlig vet. Det kommer an på hva som er ligger på minnet der argv tre ville være forventet å være. Og så vi kan ende opp komme bort scot gratis. Mer sannsynlig enn ikke, spesielt når du arbeider med argv motsetning til en annen matrise det er i vårt program, vi sannsynligvis kommer til å lide en segmentering feil. Så igjen, være sikker på ikke å overskride grensene av arrays, spesielt argv, gitt sin høye grad av betydning i programmene dine. Jeg er Doug Lloyd. Dette er CS50.