Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
10
Добавлен:
17.04.2015
Размер:
21.56 Кб
Скачать

Аргументы командной строки

В языках C/C++ имеются средства ввода данных посредством командной строки. Аргументами командной строки называются числовые или строковые значения, которые указываются пользователем вслед за именем приложения при запуске его из командной строки. Подобный механизм позволяет передавать программе информацию, избегая выдачи всевозможных подсказок и приглашений. Вот синтаксис командной строки:

имя_программы аргумент1, аргумент2 ...

Аргументы командной строки обрабатываются в функции main(),котoрая принимает два параметра: argc и argv[ ]. Целочисленный параметр а где содержит число аргументов командной строки плюс 1 — с учетом имени программы, которое, в принципе, тоже является аргументом. Вторым параметром является указатель на массив строковых указателей. Все аргументы представляют собой строки, поэтому массив argv[ ] имеет тип char*. Имена параметров — argc и argv— не являются стандартными элементами языка, но называть их именно так — общепринятое соглашение, широко применяемое большинством программистов на C/C++.

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

Текстовые аргументы

Аргументы, задаваемые в командной строке, всегда передаются в программу в виде наборов символов, что облегчает работу с ними. В следующей программе на языке С от пользователя ожидается ввод в командной строке ряда аргументов. При запуске программы проверяется значение параметра argc. Если оно меньше двух, то пользователю будет предложено перезапустить программу.

/*

* sargv.c

* Эта программа на языке С демонстрирует процесс

* считывания строковых аргументов командной строки.

*/

#include <stdio.h>

#include <process.h>

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

int t;

if(argc < 2) {

printf("Необходимо ввести несколько аргументов командной строки.\n");

printf("Повторите запуск программы.\n");

exit (1);

forft =1;t < argc; t++)

. printf("Аргумент№%d — %s\n", t, argv[t] );

exit(0);

}

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

Целочисленные аргументы

Часто в командной строке нужно указывать числовые значения. В таком случае необходимо выполнить преобразование строк в числа. Следующая программа на языке C++ читает из командной строки символьный аргумент и преобразовывает его в целое число с помощью стандартной функции atoi(). Полученное число сохраняется в переменной ivalueи передается в функцию vbinary(), которая выводит его двоичный эквивалент. В функции main() отображаются также восьмеричный и шестнадцатеричный эквиваленты числа.

//

// iargv.cpp

// Эта программа на языке C++ преобразует аргумент

// командной строки в целое число.

//

#include <iostream.h>

#include <stdlib.h>

void vbinary (int idigits);

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

int ivalue;

if (argc != 2) {

cout<< "Введите в командной строке целое число. \n";

cout<< "Это число будет преобразовано в двоичный, \n"

cout<< "восьмеричный и шестнадцатеричный форматы . \n";

return (0);

}

ivalue = atoi(argv[1]);

vbinary(ivalue) ;

cout << "В восьмеричном формате: " << oct << ivalue << "\n";

cout << "В шестнадцатеричном формате: " << hex<< ivalue << "\n"

return(0) ; }

void vbinary (int idigits)

int t = 0;

int iyourarray[50];

while(idigits != 0) {

iyourarray[t]= (idigits % 2);

idigits /= 2;

t++; }

t-- ;

cout<< "В двоичном формате: ";

for(; t >= 0; t--)

cout << dec << iyourarray[t] ; cout << "\n"; }

Функция vbinary() и алгоритм нахождения двоичной формы числа уже были рассмотрены нами, только на примере языка С. Здесь же интересно проанализировать, как происходит преобразование числа в восьмеричную и шестнадцатеричную формы.

Для вывода числа в восьмеричном формате используется следующая запись:

cout<< "В восьмеричном формате: " << oct << ivalue << "\n";

Чтобы вывести то же число в шестнадцатеричном формате, достаточно просто поменять флаг oкна флаг hex:

cout<< "В шестнадцатеричном формате: " << hex << ivalue << "\n";

При отсутствии дополнительного форматирования шестнадцатеричные цифры а, b, с, d, e и f будут отображаться в нижнем регистре. Более подробно о средствах форматирования, используемых в языке C++, рассказано в главе "Основы ввода-вывода в языке C++". Среди прочего в ней объясняется, как управлять выводом шестнадцатиричных цифр в верхнем и нижнем регистре.

Аргументы с плавающей запятой

Следующая программа на языке С принимает в командной строке несколько

значений углов в градусах. Полученные данные используются для вычисления

косинусов.

/*

* fargv.c

* Эта программа на языке С демонстрирует процесс считывания аргументов

* командной строки с плавающей запятой.

*/

#include <stdio.h>

#include <math.h>

#include <process.h>

const double dPi = 3.14159265359;

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

int t;

double ddegree;

if(argc< 2) {

printf("Введите в командной строке значения углов в градусах.\n") ,

printf("Программа вычислит косинусы углов.\n"),•

exit(l);

}

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

ddegree = atof<argv[t]);

printf("Косинус угла %f равен %.3f\n", ddegree, cos((dPi/180.0) * ddegree)); )

exit(0);

}

Функция atof() преобразовывает строковые значения в значения типа double. Для вычисления косинуса используется библиотечная функция cos().