[Powered by Google Translate] [Komandinės eilutės argumentai]
[Christopher Baltramiejus - Harvardo universiteto]
[Tai CS50 - CS50.TV]
Naudinga funkcija programą yra priimti naudotojo įvesties.
Iki šiol, mes ištirti kai kurias funkcijas per CS50 bibliotekoje
priimti vartotojo įvestimi kaip "gauti eilutę,
paragina vartotoją, o programa veikia, eilutę.
>> Tačiau yra atvejų, kai norite suteikti savo programos indėlį
, kol ji faktiškai veikia.
Tokiu būdu, jums nereikia prašyti papildomos informacijos iš jūsų naudotojo
vykdydama paprastas uždavinys.
Paimkite, pavyzdžiui, MV arba perkelti komandą UNIX.
Ši komanda leidžia vartotojui perkelti failą iš vienos vietos į kitą.
Pagal vadovo puslapius, mv priima dviejų komandų eilutės argumentai:
failas, kuris yra perkeltas ir vieta, failas yra perkeliamas į.
Taigi šis pavyzdys komandą su dviem argumentais.
Taigi, kaip mes pasakyti savo C programą naudoti šias komandų eilutės argumentus?
>> Na, pasirodo, kad pagrindinė, kuri mes naudojame C programos, yra paslaptis.
Pagrindinis priima du parametrus: argc ir argv.
Eikime per šiuos terminus.
>> Pirmasis parametras, argc, kuris reiškia argumentas skaičius,
yra sveikojo skaičiaus duomenų tipas.
Argc parametras yra argumentų, įskaitant komandų.
Mūsų komandą Perkelti, nors mes tik du argumentai rodomas,
argc vertė bus 3.
Antrasis parametras, argv, kuris reiškia argumentas, vektoriaus,
yra masyvas char rodykles, kad rodytų į eilutes.
>> Tai reiškia, kad kiekvienas argv elementas, nuo nulio,
yra komanda ir argumentus.
Pavyzdžiui, argv [0], kurį aš jums kreiptis kaip argv nulio,
visada turėti komandą, kuri yra paleisti -
šiuo atveju, mv.
argv [1] bus pateikta apie pirmąjį argumentą, plik.txt
ir argv [2] bus pateikta apie antrąjį argumentą, ~ / CS50 /.
Argv visada paskutinis argumentas yra niekinis.
Todėl galime įgyvendinti šių komandų eilutės argumentai.
Ankstesniais metais, mes įdėjome negaliojančiu, o tai reiškia, nieko, nes pagrindinis jo parametras.
Tačiau tam, kad mums naudoti komandų eilutės argumentus,
reikia pašalinti negaliojančiu ir vieta viduje pagrindinio int argc, char * argv [].
Dabar atidarykite visą elementą iš argv, kurie yra jūsų argumentai,
galite tiesiog kartoti, arba kilpa, per kaip tai masyvo.
Taigi, viduje pagrindinis kūno, mes ketiname eiti į priekį ir įveskite for ciklas:
už (int i = 0; i <argc; i + +).
>> Mums nereikia garbanotas petnešomis čia, nes mes tik surašant vieną eilutę kodo
per šio ciklo kūną.
Mes eiti į priekį ir spauskite klavišą "Tab" ir vieną kartą,
tada įveskite printf ("argv [% d], atstovauti skaitinę vertę,
yra% s, eilutė, tada naujos eilutės simbolį.
Tada mes teikiame printf i einamaisiais iteracijos kilpos
ir argv [i] styginių atstovavimo dabartinės komandų eilutės argumentas.
Kai mes paleisti jį su dviem argumentais, mes pamatyti rodomi terminale argumentus.
Anksčiau mums sakė,,, kad argv surengė Char gairėmis masyvo.
>> Taigi, jei tai yra tuo atveju,, kaip mes tada eikite į atskirus simbolius kiekvieno argumento?
Pavyzdžiui, ką daryti, jei aš norėjau ieškoti specifinių savybių pirmojo argumento?
Na, atsakymas yra, kad mes turime taikyti lizdinė kilpos
kad tada kartoti per kiekvieną argumento eilutės elementų.
Tai, kaip jūs tai darote.
>> Pirma, mes ketiname padaryti kopiją example2.c.
Tada, viduje už linijos,
mes ketiname pridėti papildoma kilpa.
Taigi (int j = 0, n = strlen (argv [i]),
, kuri suteikia mums dabartinės argumento ilgis,
J <n ir j + +)
Mes ketiname spausdinti kiekvieno simbolio vietą
viduje dabartinės argumento naudojant printf.
Taigi, printf ("argv [% d], atstovauti dabartinio argumentą indeksą,
[% d] dar kartą, atitinka esamą dabartinės argumentų pobūdį,
yra:% c, dabartinio pobūdžio argumentą,.
Galiausiai, mes teikiame printf su išorinės linijos. Indeksu, i
tada vidinės linijos indeksas.
>> Ir mūsų paskutinis argumentas printf yra tikrasis personažas iš samprotavimą, jeigu
į komandų eilutę.
Dabar, nes aš naudojamas eilutės funkcijos strlen gauti eilutės ilgį,
Aš taip pat pridėti string.h biblioteką į mūsų apima viršuje.
Taigi, tai padaryti, mes eiti, ir tik pagal stdio.h, mes ketiname daryti
# Include .
>> Taigi, galime sukompiliuoti ir paleisti ir suteikti jai faktinis argumentą.
>> Ir, kaip matome, mes dabar turime tikslią vietą kiekvienu atskiru char teigiant.
Taigi, kad viskas. Aš tikiu, Christopher Baltramiejus; tai CS50.
[CS50.TV]