[Powered by Google Translate] [Příkazového řádku Argumenty]
[Christopher Bartoloměje - Harvard University]
[To je CS50 - CS50.TV]
Užitečná funkce pro program je přijmout vstup od uživatele.
Dosud jsme prozkoumali některé funkce v rámci CS50 knihovně
přijímat vstup uživatele, jako je například "dostat řetězec,"
které vyzve uživatele, zatímco je aplikace spuštěna, pro řetězec.
>> Nicméně, existují případy, kdy chcete, aby váš program vstup
předtím, než je ve skutečnosti běží.
Tímto způsobem, nemusíte se ptát další informace z vašeho uživatele
Při provádění jednoduchý úkol.
Vezměme si například, MV nebo přesunout příkaz v UNIXu.
Tento příkaz umožňuje uživateli přesunout soubor z jednoho místa na druhé.
Podle manuálových stránek, mv přijímá dva argumenty příkazového řádku:
soubor, který se přesouvá a umístění souboru je přesunuta do.
Takže tento příklad má příkaz se dvěma argumenty.
Tak jak jsme se říci, náš C program využít tyto argumenty příkazového řádku?
>> No, ukázalo se, že hlavní, které používáme ve všech programech C, má nějaké tajemství.
Hlavní přijímá dva parametry: argc a argv.
Pojďme nad těmito podmínkami.
>> První parametr, argc, což je zkratka pro počet argumentů,
má datový typ integer.
The argc parametr obsahuje počet argumentů, včetně příkazu.
V našem pohybu příkazu, i když máme jen dva argumenty zobrazí,
argc je hodnota bude 3.
Druhý parametr, argv, což je zkratka pro argumentu vektoru,
je pole char ukazatelů, které ukazují na řetězce.
>> To znamená, že každý prvek v argv, počínaje od nuly,
obsahuje příkaz a argumenty.
Například, argv [0], které budu odkazovat jako argv nulové,
bude vždy obsahovat příkaz, který je spuštěn -
v tomto případě, mv.
argv [1] bude obsahovat první argument, soubor.txt,
a argv [2] bude obsahovat druhý argument, ~ / cs50 /.
Poslední argument argv bude vždy null.
Takže pojďme zavést tyto argumenty příkazového řádku.
V předchozích cvičeních, jsme umístili neplatné, což znamená, nic, je jako parametr hlavní je.
Aby se však pro nás používat argumenty příkazového řádku,
musíme odstranit neplatné a místo uvnitř hlavního int argc, char * argv [].
Nyní, přístup na celý prvek z argv, které jsou vaše argumenty,
můžete jednoduše iteraci, nebo smyčka, přes pole, jako je to.
Takže, uvnitř těla hlavních je, že budeme pokračovat a zadejte pro smyčce:
for (int i = 0; i <argc; i + +).
>> My nepotřebujeme složená závorka tady, protože jsme jen vykonávající jeden řádek kódu
v těle tohoto smyčky.
Budeme pokračovat a stiskněte kartu jednou,
zadejte printf ("argv [% d], představují celočíselnou hodnotu,
% s, pro řetězec, pak nového řádku.
Pak nabízíme printf i pro aktuální iteraci smyčky
a argv [i] pro řetězcové vyjádření současného argument příkazového řádku.
Když jsme se spustit s dvěma argumenty, uvidíme argumenty jsou zobrazené v terminálu.
Dříve jsme si řekli, že argv držel řadu char ukazatelů.
>> Takže, pokud je to váš případ, jak jsme pak přístup k jednotlivým znaky v každém argumentu?
Například, co když jsem chtěl hledat konkrétní znak v prvním argumentu?
No, odpověď je, že musíme použít vnořené smyčky
že se pak iteraci každý z prvků v argumentu řetězce.
To je, jak to udělat.
>> Za prvé, budeme dělat kopii example2.c.
Pak, uvnitř první pro smyčce,
budeme přidávat další smyčky for.
Tak pro (int j = 0, n = strlen (argv [i]),
který pak nám dává délku aktuálního argumentu,
; J <n, j + +)
Budeme vytisknout umístění každého znaku
uvnitř stávajícího argumentu pomocí printf.
Takže, printf ("argv [% d], reprezentovat index aktuálního argumentu,
pak [% d] a znovu se představují aktuální charakter současného argumentu,
je:% c, pro aktuální znak v argumentu.
Konečně, zajišťujeme printf s indexem vnějšího cyklu, i,
pak index vnitřní smyčce.
>> A naše poslední argument funkce printf je skutečná postava z poskytnutých argumentu
na příkazovém řádku.
Teď, protože jsem použil řetězec funkce strlen získat délku řetězce,
Musím také přidat string.h knihovnu na vrchol našeho obsahuje.
Takže, k tomu, že, půjdeme nahoru, a těsně pod stdio.h, budeme dělat
# Include .
>> Takže, pojďme kompilovat a spouštět, a poskytne mu skutečnou argumentaci.
>> A jak vidíme, máme nyní přesnou polohu jednotlivých char v argumentu.
Tak to je to. Jsem Christopher Bartoloměj, to je CS50.
[CS50.TV]