[Powered by Google Translate] [Ukazni vrstici nekaj argumentov]
[Christopher Jerneja - Harvard University]
[To je CS50 - CS50.TV]
Uporabna funkcija za program, je, da sprejme vnos uporabnika.
Doslej smo raziskali nekatere funkcije v knjižnici CS50
sprejeti vnos uporabnika, kot so "dobili niz"
ki od uporabnika zahteva, medtem ko teče aplikacija za niz.
>> Vendar pa obstajajo primeri, ko želite zagotoviti svoj prispevek programa
preden se dejansko izvaja.
Na ta način, vam ni treba vprašati dodatne informacije od svojega uporabnika
medtem ko je izvršilni preprosto nalogo.
Vzemimo za primer, MV ali ukaz Premakni v UNIX.
Ta ukaz omogoča uporabniku, da premakne datoteko z ene lokacije na drugo.
Glede na straneh man, mv sprejme dva argumenta ukazne vrstice:
datoteka, ki se premakne, in njena lokacija se datoteka premakne.
Torej ta primer je ukaz z dvema trditvama.
Torej, kako bomo povem našo C program, ki uporabljajo te v ukazni vrstici argumenti?
>> No, izkazalo se je, da je glavni, ki ga uporabljamo v vseh programih C, je skrivnost.
Glavna sprejme dva parametra: argc in argv.
Pojdimo nad temi pogoji.
>> Prvi parameter, argc, ki stoji za štetje argumenta,
ima celo vrsto podatkov.
The argc parameter vsebuje številne argumente, vključno s poveljstvom.
V našem gibanju ukaz, čeprav smo le dva argumenta prikaže,
vrednost argc je bo 3.
Drugi parameter, argv, ki stoji za msgstr,
je niz char kazalcev, ki kažejo na strune.
>> To pomeni, da je vsak element v argv, od nič,
Vsebuje ukaz in argumenti.
Na primer, argv [0], v katerem bom imenujemo argv nič,
bo vedno vsebovala ukaz, da se zažene -
V tem primeru je mv.
argv bo [1] so s prvim argumentom, datoteka.txt,
in argv [2], bo vsebovala drugo trditvijo, ~ / cs50 /.
Zadnji argument argv bo vedno nič.
Torej, kaj je izvajanje teh ukazni vrstici nekaj argumentov.
V prejšnjih vajah smo dali neveljavna, kar pomeni ničesar, saj je glavni parameter.
Vendar, da bi za nas, da v ukazni vrstici nekaj argumentov,
moramo odpraviti praznino in kraj notranjost glavnega int argc, char * argv [].
Zdaj, za dostop do celotnega element iz argv, ki so vaši argumenti,
lahko preprosto izbirate, ali zanka, skozi niz, kot je ta.
Torej, v notranjosti telesa je glavni, bomo iti naprej in vpišite v zanko:
for (int i = 0; i <argc, i + +).
>> Mi ne potrebujemo kodraste opornico sem, ker smo samo izvedbo eno vrstico kode
v telesu te zanke.
Mi bomo iti naprej in zadeti kartico enkrat,
vnesite printf ("argv [% d], ki predstavlja celo število,
je% s za niz, nato pa je nova linija znak.
Potem nudimo printf i za tekoče ponovitev zanke
in argv [i] za godalni zastopanje trenutno ukazno vrstico argumenta.
Ko smo ga pognali z dvema trditvama, bomo videli argumente, ki so prikazane v terminalu.
Prej smo rekli, da je argv potekal niz char kazalca.
>> Torej, če je temu tako, kako bomo potem dostop do posameznih znakov v vsak argument?
Na primer, kaj če sem hotel, da si za določen lik v prvem argumentu?
No, odgovor je, da moramo uporabiti ugnezdeno zanko
, ki bo nato Ponovil skozi vse elemente v argumentu niz.
To je, kako si to naredil.
>> Najprej bomo narediti kopijo example2.c.
Potem, znotraj prvega za zanke,
bomo dodali dodatno za zanko.
Torej for (int j = 0, n = strlen (argv [i]),
kar pa nam daje dolžino trenutnega trditev,
, J <n, j + +)
Bomo natisnili lokacijo vsake značaja
znotraj sedanje trditve z printf.
Torej, printf ("argv [% d], ki predstavlja indeks trenutnega trditev,
potem [% d] še enkrat, da predstavljajo trenutno značaj sedanje trditve,
je:% c za tekoče znaka v argumentu.
Nazadnje, nudimo printf z indeksom zunanjega zanke, i,
Nato indeks notranje zanke.
>> In naš zadnji argument printf je dejanski učinek iz predloženih trditev
v ukazni vrstici.
Zdaj, ker sem uporabil niz funkcijo strlen pridobiti dolžino niza,
Moram tudi dodati string.h knjižnico na vrhu naše vključuje.
Torej, za to, da bomo šli gor, in samo pod stdio.h, bomo narediti
# Vključujejo .
>> Torej, kaj je pripraviti in voditi in zagotoviti njeno dejansko argument.
>> In, kot smo lahko videli, sedaj imamo točno lokacijo posameznega char v argumentu.
Torej, to je to. Sem Christopher Jerneja, to je CS50.
[CS50.TV]