[Powered by Google Translate] [Аргументы каманднага радка]
[Крыстафер Варфаламея - Гарвардскі універсітэт]
[Гэта CS50 - CS50.TV]
Карысная функцыя для праграмы з'яўляецца ўвод дадзеных карыстальнікам.
Да гэтага часу мы разгледзелі некаторыя функцыі ў бібліятэцы CS50
прымаць карыстацкі ўвод, такія як "атрымаць радок"
якая запытвае ў карыстальніка, у той час як дадатак запушчана, для радка.
>> Тым не менш, бываюць выпадкі, калі вы хочаце забяспечыць вашу праграму ўваход
Перад яно на самай справе працуе.
Такім чынам, вам не трэба прасіць дадатковую інфармацыю ад вашых карыстальнікаў
Пры выкананні простых задач.
Возьмем, да прыкладу, ЬІ або рух каманды ў UNIX.
Гэтая каманда дазваляе карыстачу перамяшчаць файлы з аднаго месца ў іншае.
Па словах кіраўніцтва старонак, М. В. прымае два аргументу каманднага радка:
файл, які ў цяперашні час пераехаў і размяшчэнне файла перамяшчаецца ст.
Так што гэты прыклад мае каманду з двума аргументамі.
Такім чынам, як мы кажам нашым C праграмы, каб выкарыстоўваць гэтыя аргументы каманднага радка?
>> Што ж, аказваецца, што галоўны, які мы выкарыстоўваем ва ўсіх праграмах C, ёсць сакрэт.
Галоўная прымае два параметру: ARGC і ARGV.
Давайце разбярэм гэтыя тэрміны.
>> Першы параметр, агдс, што азначае колькасць аргументаў,
мае тып дадзеных цэлае лік.
Агдс параметр утрымоўвае лік аргументаў, у тым ліку каманды.
У нашай каманды перамяшчэння, хоць мы толькі два аргументу адлюстроўваецца,
Значэнне ARGC будзе 3.
Другі параметр, ARGV, якая выступае за аргумент вектару,
ўяўляе сабой масіў сімвалаў паказальнікаў, якія паказваюць на радка.
>> Гэта азначае, што кожны элемент у ARGV, пачынаючы з нуля,
змяшчае каманду і аргументы.
Напрыклад, ARGV [0], якога я буду называць ARGV нуля,
заўсёды будзе ўтрымліваць каманду, якая ў цяперашні час запуску -
У гэтым выпадку, ЬІ.
ARGV [1] будзе ўтрымліваць першы аргумент, file.txt,
і ARGV [2] будзе ўтрымліваць другі аргумент, ~ / CS50 /.
Апошні аргумент ARGV заўсёды будзе нулявы.
Так што давайце рэалізацыі гэтых аргументаў каманднага радка.
У папярэдніх практыкаваннях, мы размясцілі несапраўднымі, то ёсць нічога, як асноўны параметр ст.
Аднак, для таго, каб мы выкарыстоўвалі аргументы каманднага радка,
нам трэба выдаліць несапраўдным і месца ўнутры асноўнага Int агдс, сімвал * ARGV [].
Зараз, каб атрымаць доступ да ўсяго элементаў з ARGV, якія з'яўляюцца вашымі аргументамі,
Вы можаце проста паўтараць, або пятля, праз масіў, як гэта.
Такім чынам, усярэдзіне цела асноўныя, мы збіраемся пайсці далей і ўвесці для цыкла:
для (INT = 0; I <агдс, я + +).
>> Мы не маем патрэбу ў фігурныя дужкі тут, таму што мы толькі выканаўшы адзін радок кода
у целе гэтага цыклу.
Мы будзем ісці наперад і ўдарыў ўкладцы адзін раз,
затым увядзіце Е ("ARGV [% D], уяўляюць цэлы лік,
з'яўляецца% з, радкі, то сімвал новага радка.
Тады мы прадстаўляем Printf я для бягучай ітэрацыі
і ARGV [я] для радковае ўяўленне бягучага аргументу каманднага радка.
Калі мы запусцім яго з двума аргументамі, то мы ўбачым аргументаў адлюстроўваецца ў тэрмінале.
Раней мы казалі, што ARGV адбылася масіў сімвалаў паказальнікаў.
>> Так што, калі гэта так, то як жа мы тады доступ да асобных сімвалаў у кожны аргумент?
Напрыклад, што калі б я хацеў, каб шукаць спецыфіку ў першы аргумент?
Ну, адказ у тым, што мы павінны ўжыць укладзены цыкл
, Якія затым ітэрацыю кожнага з элементаў у радку аргументу.
Гэта, як вы гэта робіце.
>> Па-першае, мы збіраемся зрабіць копію example2.c.
Затым ўнутры першага цыкла,
Мы збіраемся дадаць дадатковы цыкл.
Такім чынам, для (Int J = 0, п = StrLen (ARGV [я]),
, Які затым дае нам даўжыню бягучага аргументу,
, J <п, J + +)
Мы збіраемся надрукаваць размяшчэнне кожнага знака
Усярэдзіне бягучага аргументу з дапамогай Printf.
Такім чынам, Е ("ARGV [% D], уяўляюць індэкс бягучага аргументу,
Затым [% D] яшчэ раз, каб прадставіць бягучы сімвал бягучага аргументу,
з'яўляецца:% C, на бягучы знак у аргуменце.
Нарэшце, мы прадстаўляем Printf з індэксам вонкавага контуру, я,
то індэкс ўнутранага цыклу.
>> І наш апошні аргумент Printf з'яўляецца фактычным персанаж з аргументаў пры ўмове,
у камандным радку.
Цяпер, таму што я выкарыстаў радкі функцыі StrLen, каб атрымаць даўжыню радка,
Я павінен таксама дадаць string.h бібліятэкі да пачатку нашага ўключае ў сябе.
Такім чынам, каб зрабіць гэта, мы пойдзем, і толькі пад stdio.h, мы збіраемся зрабіць
# Уключыць .
>> Такім чынам, давайце скампіляваць і запусціць і забяспечыць яго фактычнага аргументу.
>> І, як мы бачым, цяпер у нас ёсць дакладнае месцазнаходжанне кожнага асобнага знак у аргуменце.
Дык вось яно што. Я Крыстафера Варфаламей, гэта CS50.
[CS50.TV]