Помощничек
Главная | Обратная связь


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

Використання циклів для роботи з аргументами командного рядка



Доступ до argv і argc

Якщо ви запускаєте програму із системної підказки, командний рядок, що ви вводите, стає вашим командним рядком:

С:\> COPY SOURCE.DOC TARGET.DOC <ENTER>

У цьому випадку командний рядок вказує команду (COPY) і два аргументи (ім'я файлів SOURCE. DOC і TARGET. DOC). Щоб дозволити вашій програмі доступ до командного рядка, C++ передає два параметри у функцію main:

 

void main(int argc, char *argv[])

 

Перший параметр argc містить кількість елементів у масиві argv. Наприклад, у випадку попередньої команди COPY параметр argc повинен містити значення 3 (він включає ім'я команди й два аргументи). Наступна програма SHOWARGC.CPP використовує параметр argc для виводу кількості аргументів командного рядка:

 

#include <iostream.h>

void main(int argc, char *argv[])

{

cout << "Кількість аргументів командного рядка дорівнює " << argc << endl;

}

 

Розглянемо приклад запуску такої програми з консолі:

 

С:\> SHOWARGC А В С <ENTER>

 

Кількість аргументів командного рядка дорівнює 4

Залежно від типу компілятор може розглядати аргументи, які групуються усередині подвійних лапок, у якості одного аргументу:

 

С:\> SHOWARGC "Another argument" <ENTER>

 

Кількість аргументів командного рядка дорівнює 2

Рис.1 - Масив argv містить аргументи командного рядка.

Другий параметр функції main — argv являє собою масив вказівників на символьні рядки, які містять індивідуальні частини командного рядка. Наприклад, рис. 1 ілюструє, як елементи масиву argv могли б містити записи командного рядка.

Наступна програма SHOWARGV.CPP використовує оператор for для виводу елементів масиву argv (командний рядок програми). Програма запускається з першого елемента масиву (ім'я програми) і потім виводить кожний елемент, поки значення змінної циклу не стане більше, ніж argc:

 

#include <iostream.h>

void main(int argc, char *argv[]) {

int i;

for (i = 0; i < argc; i++) cout << "argv[" << i << "] містить " << argv[i] << endl;

}

 

Відкомпілюйте й запустіть цю програму, використовуючи командний рядок, подібний до такого:

 

С:\> SHOWARGV А В С <ENTER>

argv[0] містить SHOWARGV.EXE

argv[l] містить А

argv[2] містить В

argv[3] містить С

 

Доступ до аргументів командного рядка

Для збільшення кількості завдань, виконуваних програмою, C++ дозволяє вашій програмі звертатися до аргументів командного рядка, використовуючи два параметри, які C++ передає в main. Перший параметр argc містить кількість аргументів командного рядка (включаючи ім'я програми). Другий параметр argv являє собою масив вказівників на символьні рядки. Кожний символьний рядок відповідає аргументу командного рядка. Щоб звернутися до аргументів командного рядка, зміните заголовок функції main, як показано нижче:

void main(int argc, char *argv[])

 

Використання циклів для роботи з аргументами командного рядка

Як ви вже знаєте, програми C++ використають символ NULL для завершення символьного рядка. Подібним способом C++ використає символ NULL, щоб відзначити останній елемент масиву argv. Наступна програма ARGVNULL.CPP змінює оператор for попередньої програми, щоб виконувати цикл по елементах argv, поки поточний елемент argv не буде дорівнює NULL:

#include <iostream.h>

void main(int argc, char *argv[]) {
int i;
for (i = 0; argv[i] != NULL; i++) cout << "argv[" << i << "] містить " << argv[i] <<

endl;
}

Трактування argv як вказівника

Як ви вже знаєте, C++ дозволяє вам звертатися до елементів масивів, використовуючи вказівники. Наступна програма ARGVPTR.CPP трактує argv як вказівник на вказівник символьного рядка (інакше кажучи, вказівник на вказівник), щоб вивести вміст командного рядка:

 

#include <iostream.h>

void main(int argc, char **argv)

{
int i = 0;
while (*argv) cout << "argv[" << i++ << "] містить " << *argv++ << endl;
}

Зверніть увагу на виклик головної функції:

 

void main(int argc, char **argv)

 

Перша зірочка в оголошенні повідомляє компіляторові C++, що argv являє собою вказівник. Друга зірочка повідомляє компіляторові, що argv являє собою вказівник на вказівник — у цьому випадку вказівник на вказівник типу char. Представте argv як масив вказівників. Кожний елемент масиву в цьому випадку вказує на масив типу char.

 

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.