[Powered by Google Translate] [Command-Line érvei]
[Christopher Bartholomew - Harvard University]
[Ez CS50 - CS50.TV]
A hasznos funkció a program célja, hogy fogadja el a felhasználó bemenet.
Eddig, már feltárt bizonyos funkciók a CS50 könyvtár
elfogadni felhasználói bevitel, például "kap string,"
amely figyelmezteti a felhasználót, miközben az alkalmazás fut, egy string.
>> Vannak azonban olyan esetek, amikor azt szeretnénk, hogy a program input
mielőtt azt ténylegesen fut.
Így nem kell kérni további adatokat a felhasználói
míg a végrehajtó egyszerű feladat.
Vegyük például a mv vagy áthelyezni parancs UNIX.
Ez a parancs lehetővé teszi a felhasználó számára, hogy mozog egy fájlt egyik helyről a másikra.
Szerint a kézikönyv oldalakat, mv fogad 2 parancssori argumentumok:
A fájl mozgatása és a helyét a fájl költöztették.
Így ez a példa egy parancsot két argumentummal.
Szóval hogyan lehet mondjuk a C program kihasználni ezeket a parancssori argumentumok?
>> Nos, kiderült, hogy a legfontosabb, amit használ az összes C program, van egy titka.
Main elfogadja két paraméter: argc és argv.
Menjünk át ezeket a feltételeket.
>> Az első paraméter argc, amely áll a vita számítanak,
egy adattípusa integer.
A argc paraméter tartalmazza az argumentumok számát, beleértve a parancsot.
A mi move parancs, bár csak két érv jelenik meg,
argc értéke 3 lesz.
A második paraméter, argv, amely áll a vita vektor,
egy tömb char mutatókat, hogy mutassanak szálakat.
>> Ez azt jelenti, hogy minden egyes eleme argv, nullától kezdve
tartalmazza a parancsot és érveket.
Például, argv [0], amely fogok hivatkozni, mint argv nulla,
mindig tartalmazza a parancs éppen fut -
ebben az esetben, mv.
argv [1] tartalmazza az első érv, file.txt,
és argv [2] tartalmazza a második érvet ~ / CS50 /.
Az utolsó érve argv mindig null.
Szóval végre ezeket a parancssori argumentumok.
A korábbi gyakorlatok, mi hozott semmis, vagyis semmit, mint fő a paraméter.
Ahhoz azonban, hogy számunkra, hogy parancssori argumentumok,
el kell távolítani void helye és belső fő int argc, char * argv [].
Most, hogy elérje a teljes elemet argv, amelyek az Ön érveit,
egyszerűen navigálhat, vagy hurok, a tömb, mint ez.
Szóval, belső fő testén, fogunk menni előre, és írja be a hurok:
for (int i = 0; i <argc; i + +).
>> Nem kell a kapcsos zárójel itt, mert mi csak a végrehajtó egy sor kód
belül a test ezen hurok.
Megyünk előre, és nyomja tab egyszer,
majd írja printf ("argv [% d], képviseli egy egész értéket,
% s, a string, akkor az új sor karaktert.
Aztán biztosítani printf i az aktuális iteráció a hurok
és argv [i] a karakteres ábrázolása az aktuális parancssori argumentum.
Amikor futtatni két érv, akkor nézze meg az érveket jelenik meg a terminálon.
Korábban azt mondtuk, hogy az argv tartott egy sor char mutatókat.
>> Tehát, ha ez a helyzet, hogyan tudjuk majd elérni egyes karakterek minden érvelés?
Például, mi van, ha akartam nézni egy adott karakter az első argumentum?
Nos, a válasz az, hogy meg kell alkalmazni a beágyazott hurok
hogy majd halad végig az egyes elemek az argumentum sztring.
Ezt hogyan csinálod.
>> Először is, mi megy, hogy egy másolatot example2.c.
Aztán, belül az első a hurok,
fogunk egy további a hurok.
Így for (int j = 0, n = strlen (argv [i]),
amely ezután megadja a hossza a jelenlegi érvelés,
J <n, j + +)
Fogunk nyomtatni a helyét minden egyes karakter
belül a jelenlegi érvelés segítségével printf.
Tehát printf ("argv [% d], hogy képviselje az index a jelenlegi érvelés,
majd a [% d] ismételten, hogy képviselje az aktuális karakter a jelenlegi érvelés,
jelentése:% c, az aktuális karakter az érvelés.
Végül, mi az printf az index a külső hurok, i,
akkor az index a belső hurok.
>> És az utolsó argumentum printf a tényleges karakter az érvet szolgáltatott
a parancssorban.
Nos, azért, mert használják a string funkció strlen így a string hossza,
Azt is meg kell hozzá a string.h könyvtár a tetején található.
Szóval, hogy ezt megtehessük, megyünk fel, és alig stdio.h, fogunk csinálni
# Include .
>> Nos, nézzük fordításához és futtatásához, és ez egy valódi érv.
>> És mint látjuk, most már a pontos helyét az egyes char az érvelést.
Szóval ennyi. Én Christopher Bartholomew, ez CS50.
[CS50.TV]