Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Командний рядок аргументів






Системні засоби для мови С++ дозволяють передавати командний рядок аргументів (параметрів) програмі для виконання. Функція Main до виконання викликається із двома аргументами. Перший аргумент (argc) вказує кількість аргументів у командному рядку, з якими відбувається звернення до програми, а другий (argv) – вказівник на масив символьних рядків, які містять ці аргументи (по одному в рядку). Робота з такими рядками – це і є використання багаторівневих вказівників.

Розглянемо програму echo (див. ПП6.21 на СD), яка друкує рядок аргументів командного рядка. Отже, якщо дана команда echo Привіт, Київ, то виходом буде Привіт, Київ. За замовчуванням, argv [0] є іменем, за яким викликається програма, тому argc щонайменше дорівнює одиниці. У прикладі argc = 3, а argv [0], arg v[1] і argv [2] дорівнюють відповідно «echo», «Привіт,» і «Київ». Першим фактичним аргументом є argv [1], а останнім – argv [ argc –1]. Якщо argc = 1, то за ім’ям програми немає ніякого командного рядка аргументів.

Оскільки argv є вказівником на масив вказівників, то існує кілька способів написання цієї програми, які використовують роботу з вказівником. Розглянемо два варіанти: програми ПП6.22 і ПП6.23. (див. на СD) аргумент аrgv є вказівником на початок масиву рядків-аргументів, тому, збільшивши його на 1 (++ argv), він вказує на аргумент argv [1], а не на argv [0]. Кожне наступне збільшення пересуває його на наступний аргумент, при цьому * argv стає вказівником на цей аргумент. Одночасно величина argc зменшується, і коли вона дорівнює нулю, всі аргументи будуть уже надруковані. Версія друга показує, що аргументом формату функції printf є вираз.

Розглянемо другий приклад – удосконалення програми пошуку заданої комбінації символів, де шукану комбінація було розміщено всередині програми. Змінимо програму так, щоб ця комбінація вказувалася як перший аргумент рядка (див. ПП6.24 на СD).

Далі розглянемо основну модель, яка ілюструє подальше використання вказівників. Припустімо, що треба передбачити два необов’язкові аргументи. Один стверджує: «надрукувати всі рядки за винятком тих, які містять дану комбінацію», другий: «перед кожним виведеним рядком потрібно друкувати його номер».

Загальноприйнято, що у мові С++ аргумент, який починається зі знака мінус, уводить необов’язкову ознаку або параметр. Якщо для повідомлення про інверсії вибрати – x, а для вказівки про нумерацію потрібних рядків вибрати – n («номер»), то команда

find -x -n the

при вхідних даних

now is the time

for all good men

to come to the aid

of their party.

має видати

2: for all good men

Необов’язкові аргументи потрібно розташовувати довільно, інша частина програми не залежить від кількості фактично нявних аргументів. Зокрема, виклик функції Index не повинен містити посилання на argv [2], коли є один необов’язковий аргумент, і на argv [1], коли його немає. Більш того, необов’язкові аргументи можна об’єднати у вигляді:

find -nx the

Розглянемо програму ПП6.25 (див. на СD). Аргумент argv збільшується перед кожним необов’язковим аргументом, тоді як аргумент argc зменшується. Якщо немає помилок, то наприкінці циклу величина argc дорівнюватиме одиниці, а * argv вказуватиме на задану комбінацію. Зауважимо, що *++ argv є вказівником аргументного рядка, де (*++ argv)[0] – його перший символ. Круглі дужки тут потрібні, оскільки без них вираз буде неправильним: *++(argv [0]). Інша правильна його форма така: **++ argv.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.