Лекции.ИНФО


Длина строки ПРИВЕТ ВСЕМ равна: 11



В качестве упражнения вам стоило бы попытаться самостоятельно реализовать другие строковые функции, например strcpy() или strcat(). Этот тест позволит узнать, насколько хорошо вы освоили такие элементы языка C++, как массивы, строки и указатели.

Аргументы функции main(): argc и argv

Аргумент командной строки представляет собой информацию, задаваемую в командной строке после имени программы.

Иногда возникает необходимость передать информацию программе при ее запуске. Как правило, это реализуется путем передачи аргументов командной строки функции main(). Аргумент командной строки представляет собой информацию, указываемую в команде (командной строке), предназначенной для выполнения операционной системой, после имени программы. (В Windows команда "Run" (Выполнить) также использует командную строку.) Например, С++-программы можно компилировать путем выполнения следующей команды,

cl prog_name

Здесь элемент prog_name — имя программы, которую мы хотим скомпилировать. Имя программы передается С++-компилятору в качестве аргумента командной строки.

В C++ для функции main() определено два встроенных, но необязательных параметра, argc и argv, которые получают свои значения от аргументов командной строки. В конкретной операционной среде могут поддерживаться и другие аргументы (такую информацию необходимо уточнить по документации, прилагаемой к вашему компилятору). Рассмотрим параметры argc и argv более подробно.

На заметку. Формально для имен параметров командной строки можно выбирать любые идентификаторы, однако имена argc и argv используются по соглашению уже в течение нескольких лет, и поэтому имеет смысл не прибегать к другим идентификаторам, чтобы любой программист, которому придется разбираться в вашей программе, смог быстро идентифицировать их как параметры командной строки.

Параметр argc имеет целочисленный тип и предназначен для хранения количества аргументов командной строки. Его значение всегда не меньше единицы, поскольку имя программы также является одним из учитываемых аргументов. Параметр argv представляет собой указатель на массив символьных указателей. Каждый указатель в массиве argv ссылается на строку, содержащую аргумент командной строки. Элемент argv[0] указывает на имя программы; элемент argv[1] — на первый аргумент, элемент argv[2] — на второй и т.д. Все аргументы командной строки передаются программе как строки, поэтому числовые аргументы необходимо преобразовать в программе в соответствующий внутренний формат.

Важно правильно объявить параметр argv. Обычно это делается так.

char *argv[];

Доступ к отдельным аргументам командной строки можно получить путем индексации массива argv. Как это сделать, показано в следующей программе. При ее выполнении на экран выводится приветствие ("Привет" ), а за ним — ваше имя, которое должно быть первым аргументом командной строки.

#include <iostream>

using namespace std;

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

{

 if(argc!=2) {

  cout << "Вы забыли ввести свое имя.";

  return 1;

 }

 cout << "Привет, " << argv[1] << '';

 return 0;

}

Предположим, что вас зовут Том и что вы назвали эту программу именем name. Тогда, если запустить эту программу, введя команду name Том, результат ее работы должен выглядеть так: Привет, Том. Например, вы работаете с диском А, и в ответ на приглашение на ввод команды должны ввести упомянутую выше команду и получить следующий результат.

A>name Том

Привет, Том

А>

В C++ точно не оговорено, как должны быть представлены аргументы командной строки, поскольку среды выполнения (операционные системы) имеют здесь большие различия. Однако чаще всего используется следующее соглашение: каждый аргумент командной строки должен быть отделен пробелом или символом табуляции. Как правило, запятые, точки с запятой и тому подобные знаки не являются допустимыми разделителями аргументов. Например, строка

Один, два и три

Состоит из четырех строковых аргументов, в то время как строка

Один, два, три

Включает только два, поскольку запятая не является допустимым разделителем.

Если необходимо передать в качестве одного аргумента командной строки набор символов, который содержит пробелы, то его нужно заключить в кавычки. Например, этот набор символов будет воспринят как один аргумент командной строки:

"это лишь один аргумент"

Следует иметь в виду, что представленные здесь примеры применимы к широкому диапазону сред, но это не означает, что ваша среда входит в их число.

Чтобы получить доступ к отдельному символу в одном из аргументов командной строки, при обращении к массиву argv добавьте второй индекс. Например, при выполнении приведенной ниже программы посимвольно отображаются все аргументы, с которыми она была вызвана.

/* Эта программа посимвольно выводит все аргументы командной строки, с которыми она была вызвана.

*/

#include <iostream>

using namespace std;

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

{

 int t, i;

 for(t=0; t<argc; ++t) {

  i = 0;

  while(argv[t][i]) {

   cout << argv[t][i];

   ++i;

  }

  cout << ' ';

 }

 return 0;

}

Нетрудно догадаться, что первый индекс массива argv позволяет получить доступ к соответствующему аргументу командной строки, а второй — к конкретному символу этого строкового аргумента.

Обычно аргументы argc и argv используются для ввода в программу начальных параметров, исходных значений, имен файлов или вариантов (режимов) работы программы. В C++ можно ввести столько аргументов командной строки, сколько допускает операционная система. Использование аргументов командной строки придает программе профессиональный вид и позволяет использовать ее в командном файле (исполняемом текстовом файле, содержащем одну или несколько команд).

Передача числовых аргументов командной строки

Как упоминалось выше, при передаче программе числовых данных в качестве аргументов командной строки эти данные принимаются в строковой форме. В программе должно быть предусмотрено их преобразование в соответствующий внутренний формат с помощью одной из стандартных библиотечных функций, поддерживаемых C++. Например, при выполнении следующей программы выводится сумма двух чисел, которые указываются в командной строке после имени программы. Для преобразования аргументов командной строки во внутреннее представление здесь используется стандартная библиотечная функция atof(). Она преобразует число из строкового формата в значение типа double.

/* Эта программа отображает сумму двух числовых аргументов командной строки.

*/

#include <iostream>

#include <cstdlib>

using namespace std;

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

{

 double a, b;

 if(argc!=3) {

  cout << "Использование: add число число";

  return 1;

 }

 a = atof(argv[1]);

 b = atof(argv[2]);

 cout << a + b;

 return 0;

}

Чтобы сложить два числа, используйте командную строку такого вида (предполагая, что эта программа имеет имя add).

C>add 100.2 231

Преобразование числовых строк в числа

Стандартная библиотека C++ включает несколько функций, которые позволяют преобразовать строковое представление числа в его внутренний формат. Для этого используются такие функции, как atoi(), atol() и atof(). Они преобразуют строку в целочисленное значение (типа int), длинное целое (типа long) и значение с плавающей точкой (типа double) соответственно. Использование этих функций (для их вызова необходимо включить в программу заголовочный файл <cstdlib>) демонстрируется в следующей программе.

// Демонстрация использования функций atoi(), atol() и atof().

#include <iostream>

#include <cstdlib>

using namespace std;

Int main()

{

 int i;

 long j;

 double k;

 i = atoi ("100");

 j = atol("100000");

 k = atof("-0.123");

 cout << i << ' ' << j << ' ' << k;

 cout << ' ';

 return 0;

}

Результаты выполнения этой программы таковы.

100 100000 -0.123

Функции преобразования строк полезны не только при передаче числовых данных программе через аргументы командной строки, но и в ряде других ситуаций.

Инструкция return

До сих пор (начиная с главы 2) мы использовали инструкцию return без подробных разъяснений. Напомним, что инструкция return выполняет две важные операции. Во-первых, она обеспечивает немедленное возвращение управления к инициатору вызова функции. Во-вторых, ее можно использовать для передачи значения, возвращаемого функцией. Именно этим двум операциям и посвящен данный раздел.

Завершение функции

Как вы уже знаете, управление от функции передается инициатору ее вызова в двух ситуациях: либо при обнаружении закрывающейся фигурной скобки, либо при выполнении инструкции return. Инструкцию return можно использовать с некоторым заданным значением либо без него. Но если в объявлении функции указан тип возвращаемого значения (т.е. не тип void), то функция должна возвращать значение этого типа. Только void-функции могут использовать инструкцию return без какого бы то ни было значения.

Для void-функций инструкция return главным образом используется как элемент программного управления. Например, в приведенной ниже функции выводится результат возведения числа в положительную целочисленную степень. Если же показатель степени окажется отрицательным, инструкция return обеспечит выход из функции, прежде чем будет сделана попытка вычислить такое выражение. В этом случае инструкция return действует как управляющий элемент, предотвращающий нежелательное выполнение определенной части функции.









Читайте также:

  1. WORLD WIDE WEB (ВСЕМИРНАЯ ИНФОРМАЦИОННАЯ СЕТЬ)
  2. А. ВСЕМИРНАЯ ОРГАНИЗАЦИЯ ИНТЕЛЛЕКТУАЛЬНОЙ СОБСТВЕННОСТИ (ВОИС)
  3. Аквабайкинг - Преднамеренное катание в аццкий дождь со всеми вытекающими. Традиционно все участники при этом остаются крайне довольны катушкой
  4. АКТИВИЗАЦИЯ ЭНЕРГИИ ВО ВСЁМ ТЕЛЕ В ПОЛОЖЕНИИ ЛЁЖА
  5. В данную подрубрику включаются случаи, которые не полностью соответствуют всем критериям делирия, описываемым в МКБ-10 (F05.-).
  6. В качестве дополнительной литературы ко всем темам рекомендуется
  7. В ЧЕСТЬ ВСЕМИЛОСТИВОГО СПАСА В УРЕНЕ
  8. В.Н. Татищев. Теоретико-методологические основы исторических взглядов. Движущие силы истории. Причины возникновения государств и формы государственного устройства. Периодизация всемирной истории.
  9. Вот как выглядит версия программы разбиения строки на слова с использованием арифметики указателей.
  10. Всем социальным нормам присущи общие черты:
  11. Всемирная (Женевская) конвенция об авторских правах
  12. Всемирная торговая организация (ВТО)


Последнее изменение этой страницы: 2016-03-17; Просмотров: 108;


lektsia.info 2017 год. Все права принадлежат их авторам! Главная