[Powered by Google Translate] [Command-Line Argumentet]
[Christopher Bartolomeu - Universiteti i Harvardit]
[Kjo është CS50 - CS50.TV]
Një tipar i dobishëm për një program është të pranojë të dhëna përdoruesi.
Deri tani, ne kemi hulumtuar disa funksione brenda bibliotekës CS50
të pranojë të dhëna përdoruesi, të tilla si "të marrë string"
e cila bën përdorues, ndërsa aplikimi është i rrjedhshëm, për një varg.
>> Megjithatë, ka raste ku ju doni të japin kontributin tuaj program
para se ajo është në fakt running.
Në këtë mënyrë, ju nuk keni nevojë të kërkojë informata shtesë nga përdoruesit tuaj
ndërsa ekzekutimin e një detyrë e thjeshtë.
Merrni, për shembull, TM ose komandën lëvizin në UNIX.
Kjo komandë lejon përdoruesin për të lëvizur një skedë nga një vend në një tjetër.
Sipas të faqeve manuale, mv pranon dy argumente command line:
file që është duke lëvizur dhe vendndodhjen file është duke u lëvizur për të.
Pra ky shembull ka një komandë me dy argumente.
Pra, si nuk kemi treguar C programin tonë për të shfrytëzuar këto argumente command-line?
>> E pra, del se kryesore, të cilat ne i përdorim në të gjitha programet C, ka një sekret.
Kryesore pranon dy parametra: argc dhe argv.
Le të shkojë mbi këto terma.
>> Parametri i parë, argc, i cili qëndron për numërimin argumentit,
ka një lloj të dhënave të numër të plotë.
Parametri argc përmban numrin e argumenteve, duke përfshirë komandën.
Në komandën tonë të lëvizë, edhe pse ne kemi vetëm dy argumente shfaqet,
vlera argc do të jetë 3.
Parametri i dytë, argv, i cili qëndron për vektor argumentit,
është një grup i pointers char që tregojnë për vargjet.
>> Kjo do të thotë që çdo element në argv, duke filluar nga zero,
përmban komandën dhe argumentet.
Për shembull, argv [0], të cilën unë do të referohen si argv zero,
gjithmonë do të përmbajë urdhrin që është duke u drejtuar -
në këtë rast, mv.
argv [1] do të përmbajë argumentin e parë, file.txt,
dhe argv [2] do të përmbajë Argumenti i dytë, ~ / CS50 /.
Argumenti i fundit i argv do të jetë gjithmonë null.
Pra, le të zbatojë këto argumente command-line.
Në ushtrimet e mëparshme, ne kemi vendosur pavlefshëm, do të thotë asgjë, si parametër kryesor.
Megjithatë, në mënyrë që ne të përdorim argumente command-line,
ne kemi nevojë për të hequr dhe vendin void brenda int argc kryesore, char * argv [].
Tani, për të hyrë në elementin tërë nga argv, të cilat janë argumentet tuaja,
ju thjesht mund të iterate, ose loop, nëpërmjet rrjet si kjo.
Pra, brenda e trupit kryesor, ne jemi duke shkuar për të shkuar përpara dhe të shtypni një për lak:
për (int i = 0; i <argc; i + +).
>> Ne nuk kemi nevojë për një mbajtëse kaçurrel këtu, sepse ne jemi vetëm ekzekutimin e një linjë të kodit
brenda trupit të këtë lak.
Ne do të shkojnë përpara dhe e goditi tab herë,
pastaj shtypni printf ("argv [% d], për të përfaqësuar një vlerë numër të plotë,
është% s, për vargun, atëherë karakter të ri vijë.
Pastaj ne të sigurojë printf i për përsëritje aktuale të lak
dhe argv [i] për përfaqësimin harqesh e argumentit aktual command-line.
Kur ne të drejtuar atë me dy argumente, ne do të shohim argumentet duke u shfaqur në terminalin.
Më herët kemi thënë se argv mbajtur një rrjet të char pointers.
>> Pra, në qoftë se ky është rasti, atëherë si nuk kemi qasje individuale në secilën karakteret argument?
Për shembull, çfarë nëse kam kërkuar për të shikoni për një karakter të veçantë në argumentin e parë?
Well, përgjigja është se ne kemi nevojë për të aplikuar një lak mbivendosur
se pastaj do iterate nëpër secilën prej elementeve në vargun e argumentit.
Kjo është se si ju të bëjë atë.
>> Së pari, ne jemi duke shkuar për të bërë një kopje të example2.c.
Pastaj, brenda të parë për lak,
ne jemi duke shkuar për të shtuar një shtesë për lak.
Pra, për (int j = 0, n = strlen (argv [i]),
të cilat pastaj na jep gjatësinë e argumentit aktual,
J <n j + +)
Ne jemi duke shkuar për të shtypur lokacionin e çdo karakter
brenda argumentit aktual duke përdorur printf.
Pra, printf ("argv [% d], për të përfaqësuar indeksin e argumentit aktual,
pastaj [% d] edhe një herë, për të përfaqësuar karakterin aktual të argumentit aktual,
është: c%, për karakter aktuale në argumentit.
Së fundi, ne ofrojme printf me indeksin e lak e jashtme, i,
atëherë indeksi i lak brendshme.
>> Dhe argumenti ynë i fundit për të printf është karakteri aktuale nga argumenti kusht
në rreshtin e komandave.
Tani, sepse kam përdorur funksionin string strlen për të marrë gjatësinë e një varg,
Unë gjithashtu duhet të shtoni bibliotekë string në krye të përfshinë tonë.
Pra, për të bërë këtë, ne do të shkojnë lart, dhe vetëm nën stdio.h, ne jemi duke shkuar për të bërë
# Include .
>> Pra, le të hartojnë dhe të drejtuar dhe të sigurojë asaj një argument të vërtetë.
>> Dhe, si ne mund të shohim, tani ne kemi vendndodhjen e saktë të çdo char individuale në argument.
Pra, kjo është ajo. Unë jam Christopher Bartolomeu; kjo është CS50.
[CS50.TV]