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]