[Powered by Google Translate] [Kommandolinjeargumenter]
[Christopher Bartholomew - Harvard University]
[Dette er CS50 - CS50.TV]
En nyttig funksjon for et program er å akseptere brukerens input.
Så langt har vi utforsket noen funksjoner innenfor CS50 bibliotek
å akseptere brukerens input, for eksempel "få streng,"
som ber brukeren, mens programmet kjører, for en streng.
>> Men det er tilfeller hvor du ønsker å gi programmet innspill
før det faktisk kjører.
Denne måten, trenger du ikke å spørre tilleggsinformasjon fra brukeren din
mens utføre en enkel oppgave.
Ta for eksempel MV eller flytte kommando i UNIX.
Denne kommandoen lar brukeren å flytte en fil fra ett sted til et annet.
Ifølge de manuelle sider, aksepterer mv to kommandolinjeargumenter:
filen som flyttes og plasseringen filen blir flyttet til.
Så dette eksempelet har en kommando med to argumenter.
Så hvordan forteller vi våre C-program for å utnytte disse kommandolinjeargumenter?
>> Vel, det viser seg at main, som vi bruker i alle C-programmer, har en hemmelighet.
Viktigste aksepterer to parametre: argc og argv.
La oss gå over disse vilkårene.
>> Den første parameteren, argc, som står for argument teller,
har en datatype av heltall.
Den argc parameteren inneholder antall argumenter, inkludert kommandoen.
I vår flytte kommandoen, selv om vi bare har to argumenter vises,
argc verdi vil være 3.
Den andre parameteren, argv, som står for argument vektor,
er en rekke røye pekere som peker til strenger.
>> Dette betyr at hvert element i argv, fra null,
inneholder kommandoen og argumenter.
For eksempel argv [0], som jeg vil referere til som argv null,
vil alltid inneholde kommandoen som blir kjørt -
i dette tilfellet, mv.
argv [1] vil inneholde det første argumentet, file.txt,
og argv [2] vil inneholde det andre argumentet, ~ / CS50 /.
Den siste argumentet argv vil alltid være null.
Så la oss gjennomføre disse kommandolinjeargumenter.
I tidligere øvelser, la vi ugyldig, betyr ingenting, som viktigste parameter.
Men for at vi skal bruke kommandolinjeargumenter,
Vi må fjerne ugyldig og plass inne i main int argc, char * argv [].
Nå, for å få tilgang til hele elementet fra argv, som er dine argumenter,
kan du bare iterate, eller sløyfe gjennom rekken som dette.
Så, på innsiden av hoved kropp, kommer vi til å gå videre og skrive en for loop:
for (int i = 0; i <argc; i + +).
>> Vi trenger ikke en krøllete brace her fordi vi bare gjennomføre en linje med kode
i kroppen av denne sløyfen.
Vi vil gå videre og traff kategorien én gang,
skriv deretter printf ("argv [% d], for å representere et heltall,
er% s, for streng, og deretter den nye linjen tegnet.
Så vi gir printf jeg for den aktuelle iterasjonen av loopen
og argv [i] for streng representasjon av gjeldende kommandolinje-argument.
Når vi kjører det med to argumenter, vil vi se argumentene som vises i terminalen.
Tidligere sa vi at argv holdt en rekke røye pekere.
>> Så hvis dette er tilfelle, hvordan vi da tilgang individuelle tegn i hvert argument?
For eksempel, hva om jeg ønsket å se etter et bestemt tegn i det første argumentet?
Vel, svaret er at vi må bruke en nestet løkke
som vil da iterate gjennom hvert av elementene i argumentet strengen.
Dette er hvordan du gjør det.
>> Først skal vi lage en kopi av example2.c.
Deretter, på innsiden av den første for-løkken,
Vi kommer til å legge en ekstra for loop.
Så for (int j = 0, n = strlen (argv [i]),
som gir oss da lengden på gjeldende argumentet,
J <n j + +)
Vi kommer til å skrive ut plasseringen av hvert tegn
innsiden av gjeldende argumentet ved hjelp printf.
Så printf ("argv [% d], til å representere indeksen for nåværende argument,
deretter [% d] en gang, å representere den nåværende karakter av dagens argument,
er:% c, for strømmen tegnet i argumentet.
Til slutt gir vi printf i indeksen til den ytre loop,, jeg
vil indeks av den indre sløyfen.
>> Og vår siste argument til er printf selve tegnet fra argumentasjonsrekker
på kommandolinjen.
Nå, fordi jeg brukte strengfunksjon strlen å få lengden på en streng,
Jeg må også legge til string.h biblioteket til toppen av vår omfatter.
Så, for å gjøre det, vil vi gå opp, og i underkant av stdio.h, vi kommer til å gjøre
# Include .
>> Så, la oss kompilere og kjøre og gi det en faktisk argument.
>> Og, som vi kan se, har vi nå den nøyaktige plasseringen av hver enkelt røye i argumentet.
Så det er det. Jeg er Christopher Bartholomew, dette er CS50.
[CS50.TV]