1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Аргументы каманднага радка] 2 00:00:02,000 --> 00:00:04,000 [Крыстафер Варфаламея - Гарвардскі універсітэт] 3 00:00:04,000 --> 00:00:07,000 [Гэта CS50 - CS50.TV] 4 00:00:07,000 --> 00:00:11,000 Карысная функцыя для праграмы з'яўляецца ўвод дадзеных карыстальнікам. 5 00:00:11,000 --> 00:00:15,000 Да гэтага часу мы разгледзелі некаторыя функцыі ў бібліятэцы CS50 6 00:00:15,000 --> 00:00:18,000 прымаць карыстацкі ўвод, такія як "атрымаць радок" 7 00:00:18,000 --> 00:00:23,000 якая запытвае ў карыстальніка, у той час як дадатак запушчана, для радка. 8 00:00:23,000 --> 00:00:28,000 >> Тым не менш, бываюць выпадкі, калі вы хочаце забяспечыць вашу праграму ўваход 9 00:00:28,000 --> 00:00:30,000 Перад яно на самай справе працуе. 10 00:00:30,000 --> 00:00:34,000 Такім чынам, вам не трэба прасіць дадатковую інфармацыю ад вашых карыстальнікаў 11 00:00:34,000 --> 00:00:38,000 Пры выкананні простых задач. 12 00:00:38,000 --> 00:00:42,000 Возьмем, да прыкладу, ЬІ або рух каманды ў UNIX. 13 00:00:42,000 --> 00:00:49,000 Гэтая каманда дазваляе карыстачу перамяшчаць файлы з аднаго месца ў іншае. 14 00:00:49,000 --> 00:00:55,000 Па словах кіраўніцтва старонак, М. В. прымае два аргументу каманднага радка: 15 00:00:55,000 --> 00:01:00,000 файл, які ў цяперашні час пераехаў і размяшчэнне файла перамяшчаецца ст. 16 00:01:00,000 --> 00:01:06,000 Так што гэты прыклад мае каманду з двума аргументамі. 17 00:01:06,000 --> 00:01:14,000 Такім чынам, як мы кажам нашым C праграмы, каб выкарыстоўваць гэтыя аргументы каманднага радка? 18 00:01:14,000 --> 00:01:20,000 >> Што ж, аказваецца, што галоўны, які мы выкарыстоўваем ва ўсіх праграмах C, ёсць сакрэт. 19 00:01:20,000 --> 00:01:26,000 Галоўная прымае два параметру: ARGC і ARGV. 20 00:01:26,000 --> 00:01:28,000 Давайце разбярэм гэтыя тэрміны. 21 00:01:28,000 --> 00:01:33,000 >> Першы параметр, агдс, што азначае колькасць аргументаў, 22 00:01:33,000 --> 00:01:36,000 мае тып дадзеных цэлае лік. 23 00:01:36,000 --> 00:01:42,000 Агдс параметр утрымоўвае лік аргументаў, у тым ліку каманды. 24 00:01:42,000 --> 00:01:47,000 У нашай каманды перамяшчэння, хоць мы толькі два аргументу адлюстроўваецца, 25 00:01:47,000 --> 00:01:50,000 Значэнне ARGC будзе 3. 26 00:01:50,000 --> 00:01:56,000 Другі параметр, ARGV, якая выступае за аргумент вектару, 27 00:01:56,000 --> 00:02:01,000 ўяўляе сабой масіў сімвалаў паказальнікаў, якія паказваюць на радка. 28 00:02:01,000 --> 00:02:06,000 >> Гэта азначае, што кожны элемент у ARGV, пачынаючы з нуля, 29 00:02:06,000 --> 00:02:09,000 змяшчае каманду і аргументы. 30 00:02:09,000 --> 00:02:16,000 Напрыклад, ARGV [0], якога я буду называць ARGV нуля, 31 00:02:16,000 --> 00:02:20,000 заўсёды будзе ўтрымліваць каманду, якая ў цяперашні час запуску - 32 00:02:20,000 --> 00:02:22,000 У гэтым выпадку, ЬІ. 33 00:02:22,000 --> 00:02:28,000 ARGV [1] будзе ўтрымліваць першы аргумент, file.txt, 34 00:02:28,000 --> 00:02:37,000 і ARGV [2] будзе ўтрымліваць другі аргумент, ~ / CS50 /. 35 00:02:37,000 --> 00:02:42,000 Апошні аргумент ARGV заўсёды будзе нулявы. 36 00:02:42,000 --> 00:02:46,000 Так што давайце рэалізацыі гэтых аргументаў каманднага радка. 37 00:02:46,000 --> 00:02:53,000 У папярэдніх практыкаваннях, мы размясцілі несапраўднымі, то ёсць нічога, як асноўны параметр ст. 38 00:02:53,000 --> 00:02:57,000 Аднак, для таго, каб мы выкарыстоўвалі аргументы каманднага радка, 39 00:02:57,000 --> 00:03:12,000 нам трэба выдаліць несапраўдным і месца ўнутры асноўнага Int агдс, сімвал * ARGV []. 40 00:03:12,000 --> 00:03:17,000 Зараз, каб атрымаць доступ да ўсяго элементаў з ARGV, якія з'яўляюцца вашымі аргументамі, 41 00:03:17,000 --> 00:03:21,000 Вы можаце проста паўтараць, або пятля, праз масіў, як гэта. 42 00:03:21,000 --> 00:03:27,000 Такім чынам, усярэдзіне цела асноўныя, мы збіраемся пайсці далей і ўвесці для цыкла: 43 00:03:27,000 --> 00:03:37,000 для (INT = 0; I <агдс, я + +). 44 00:03:37,000 --> 00:03:41,000 >> Мы не маем патрэбу ў фігурныя дужкі тут, таму што мы толькі выканаўшы адзін радок кода 45 00:03:41,000 --> 00:03:44,000 у целе гэтага цыклу. 46 00:03:44,000 --> 00:03:47,000 Мы будзем ісці наперад і ўдарыў ўкладцы адзін раз, 47 00:03:47,000 --> 00:03:57,000 затым увядзіце Е ("ARGV [% D], уяўляюць цэлы лік, 48 00:03:57,000 --> 00:04:06,000 з'яўляецца% з, радкі, то сімвал новага радка. 49 00:04:06,000 --> 00:04:12,000 Тады мы прадстаўляем Printf я для бягучай ітэрацыі 50 00:04:12,000 --> 00:04:18,000 і ARGV [я] для радковае ўяўленне бягучага аргументу каманднага радка. 51 00:04:18,000 --> 00:04:25,000 Калі мы запусцім яго з двума аргументамі, то мы ўбачым аргументаў адлюстроўваецца ў тэрмінале. 52 00:04:34,000 --> 00:04:38,000 Раней мы казалі, што ARGV адбылася масіў сімвалаў паказальнікаў. 53 00:04:38,000 --> 00:04:45,000 >> Так што, калі гэта так, то як жа мы тады доступ да асобных сімвалаў у кожны аргумент? 54 00:04:45,000 --> 00:04:51,000 Напрыклад, што калі б я хацеў, каб шукаць спецыфіку ў першы аргумент? 55 00:04:51,000 --> 00:04:55,000 Ну, адказ у тым, што мы павінны ўжыць укладзены цыкл 56 00:04:55,000 --> 00:04:59,000 , Якія затым ітэрацыю кожнага з элементаў у радку аргументу. 57 00:04:59,000 --> 00:05:02,000 Гэта, як вы гэта робіце. 58 00:05:02,000 --> 00:05:10,000 >> Па-першае, мы збіраемся зрабіць копію example2.c. 59 00:05:10,000 --> 00:05:13,000 Затым ўнутры першага цыкла, 60 00:05:13,000 --> 00:05:15,000 Мы збіраемся дадаць дадатковы цыкл. 61 00:05:15,000 --> 00:05:28,000 Такім чынам, для (Int J = 0, п = StrLen (ARGV [я]), 62 00:05:28,000 --> 00:05:32,000 , Які затым дае нам даўжыню бягучага аргументу, 63 00:05:32,000 --> 00:05:39,000 , J <п, J + +) 64 00:05:39,000 --> 00:05:43,000 Мы збіраемся надрукаваць размяшчэнне кожнага знака 65 00:05:43,000 --> 00:05:47,000 Усярэдзіне бягучага аргументу з дапамогай Printf. 66 00:05:47,000 --> 00:05:57,000 Такім чынам, Е ("ARGV [% D], уяўляюць індэкс бягучага аргументу, 67 00:05:57,000 --> 00:06:05,000 Затым [% D] яшчэ раз, каб прадставіць бягучы сімвал бягучага аргументу, 68 00:06:05,000 --> 00:06:13,000 з'яўляецца:% C, на бягучы знак у аргуменце. 69 00:06:13,000 --> 00:06:20,000 Нарэшце, мы прадстаўляем Printf з індэксам вонкавага контуру, я, 70 00:06:20,000 --> 00:06:22,000 то індэкс ўнутранага цыклу. 71 00:06:22,000 --> 00:06:28,000 >> І наш апошні аргумент Printf з'яўляецца фактычным персанаж з аргументаў пры ўмове, 72 00:06:28,000 --> 00:06:31,000 у камандным радку. 73 00:06:31,000 --> 00:06:37,000 Цяпер, таму што я выкарыстаў радкі функцыі StrLen, каб атрымаць даўжыню радка, 74 00:06:37,000 --> 00:06:43,000 Я павінен таксама дадаць string.h бібліятэкі да пачатку нашага ўключае ў сябе. 75 00:06:43,000 --> 00:06:50,000 Такім чынам, каб зрабіць гэта, мы пойдзем, і толькі пад stdio.h, мы збіраемся зрабіць 76 00:06:50,000 --> 00:06:57,000 # Уключыць . 77 00:06:57,000 --> 00:07:02,000 >> Такім чынам, давайце скампіляваць і запусціць і забяспечыць яго фактычнага аргументу. 78 00:07:09,000 --> 00:07:18,000 >> І, як мы бачым, цяпер у нас ёсць дакладнае месцазнаходжанне кожнага асобнага знак у аргуменце. 79 00:07:18,000 --> 00:07:23,000 Дык вось яно што. Я Крыстафера Варфаламей, гэта CS50. 80 00:07:23,000 --> 00:07:26,000 [CS50.TV]