[Powered by Google Translate] [Amri-Line Hoja]
[Christopher Bartholomayo - Chuo Kikuu cha Harvard]
[Hii ni CS50 - CS50.TV]
Kipengele muhimu kwa ajili ya mpango huo ni kukubali mtumiaji pembejeo.
Hivi sasa, tumekuwa Kugundua baadhi ya majukumu ndani ya maktaba CS50
kukubali mtumiaji pembejeo, kama vile "kupata kamba,"
ambayo humshauri mtumiaji, wakati maombi ni mbio, kwa kamba.
>> Hata hivyo, kuna matukio ambapo unataka kutoa programu yako ya pembejeo
kabla ni kweli mbio.
Kwa njia hii, huna haja ya kuuliza maelezo ya ziada kutoka kwa mtumiaji yako
wakati wa utekelezaji kazi rahisi.
Chukua, kwa mfano, mv au amri ya hoja katika UNIX.
Amri hii inaruhusu mtumiaji hoja faili kutoka eneo moja hadi jingine.
Kulingana na kurasa mwongozo, mv anapokea mbili hoja mstari amri:
faili kwamba inahamishwa na mahali faili inahamishwa kwa.
Basi mfano hii ina amri kwa hoja mbili.
Hivyo ni jinsi gani sisi tunasema wetu C mpango wa kutumia hoja hizi amri ya mstari?
>> Naam, ni zinageuka kuwa kuu, ambayo sisi kutumia katika mipango yote C, ana siri.
Kuu anapokea vigezo mbili: argc na argv.
Hebu kwenda juu ya maneno haya.
>> parameter kwanza, argc, ambayo inasimamia kwa kuhesabu hoja,
ina aina ya data integer.
parameter argc ina idadi ya hoja, ikiwa ni pamoja na amri.
Katika hatua ya amri yetu, ingawa sisi tu kuwa wawili hoja visas,
thamani argc itakuwa 3.
parameter pili, argv, ambayo inasimamia kwa vector hoja,
ni safu ya kuyatumia Char kwamba kumweka kwa masharti.
>> Hii ina maana kwamba kila kipengele katika argv, kuanzia sifuri,
ina amri na hoja.
Kwa mfano, argv [0], ambayo mimi itabidi rejea kama argv sifuri,
daima vyenye amri kwamba ni kuwa kukimbia -
katika kesi hiyo, mv.
argv [1] yana hoja ya kwanza, file.txt,
na argv [2] yana hoja ya pili, ~ / cs50 /.
Hoja ya mwisho ya argv daima kuwa null.
Basi hebu kutekeleza hoja hizi amri-line.
Katika mazoezi ya awali, sisi kuwekwa utupu, kwa maana ya kitu, kama parameter kuu ya.
Hata hivyo, ili kwa ajili yetu kwa kutumia hoja amri-line,
tunahitaji kuondoa batili na mahali ndani ya kuu int argc, char * argv [].
Sasa, ili kupata kipengele mzima kutoka argv, ambayo ni hoja yako,
unaweza tu iterate, au kitanzi, kupitia safu kama hii.
Hivyo, ndani ya mwili kuu, sisi ni kwenda kwenda mbele na aina kwa kitanzi:
kwa ajili ya (i = 0 int; i <argc; i + +).
>> Hatuna haja brace curly hapa kwa sababu tuko tu utekelezaji moja mstari wa kanuni
ndani ya mwili wa kitanzi hii.
Tutaweza kwenda mbele na hit tab mara moja,
basi aina ya printf ("argv [% d], kuwakilisha thamani integer,
ni% s, kwa kamba, basi mwezi line tabia.
Kisha sisi kutoa printf i kwa iteration ya sasa ya kitanzi
na argv [i] kwa ajili ya uwakilishi kamba ya hoja ya sasa amri-line.
Wakati sisi kukimbia kwa hoja mbili, tutaweza kuona hoja kuwa visas katika terminal.
Mapema sisi alisema kwamba argv uliofanyika safu ya kuyatumia Char.
>> Hivyo, kama hii ni kesi, ni jinsi gani sisi basi upatikanaji wahusika binafsi katika hoja kila?
Kwa mfano, ni kama alitaka kuangalia kwa ajili ya tabia maalum katika hoja ya kwanza?
Naam, jibu ni kwamba tunahitaji kuomba kitanzi nested
ambayo baadaye iterate kupitia kila kipengele katika string hoja.
Hii ni jinsi ya kufanya hivyo.
>> Kwanza, sisi ni kwenda kufanya nakala ya example2.c.
Kisha, ndani ya kwanza kwa kitanzi,
sisi ni kwenda kuongeza ziada kwa kitanzi.
Hivyo kwa (int j = 0, n = strlen (argv [i]),
ambayo kisha anatupa urefu wa hoja ya sasa,
; J <n; j + +)
Sisi ni kwenda magazeti eneo la tabia ya kila
ndani ya hoja ya sasa kwa kutumia printf.
Hivyo, printf ("argv [% d], kuwakilisha index ya hoja ya sasa,
kisha [% d] kwa mara nyingine tena, kuwakilisha tabia ya sasa ya hoja ya sasa,
ni:% c, kwa ajili ya tabia ya sasa katika hoja.
Mwisho, sisi kutoa printf na index ya kitanzi nje, i,
kisha index ya kitanzi ndani.
>> Na hoja yetu ya mwisho ni tabia halisi printf kutoka hoja zinazotolewa
katika mstari amri.
Sasa, kwa sababu mimi kutumika kazi string strlen kupata urefu wa kamba,
Mimi lazima pia kuongeza maktaba string.h juu ya ni pamoja na wetu.
Hivyo, kwa kufanya hivyo, tutaweza kwenda juu, na tu chini ya stdio.h, tunakwenda kufanya
# Pamoja .
>> Hivyo, hebu kukusanya na kukimbia na kutoa hiyo hoja halisi.
>> Na, kama tunaweza kuona, sasa tuna eneo halisi ya Char kila mtu binafsi katika hoja.
Hivyo hiyo ni yake. Mimi nina Christopher Bartholomayo, hii ni CS50.
[CS50.TV]