Программирование >>  Инициализация объектов класса, структура 

1 ... 115 116 117 [ 118 ] 119 120 121 ... 395


обработаем максимальный размер для опции -1 имя выходного файла для -o

имена входных файлов ...

default: {

ofile on вкачена, -o встречалась

if ( ofile on ) {

обработаем имя выходного файла вчим ofile on

else if ( limit on ) { -l встречалась

обработаем максимальный размер / / вчим limit on } else {

обработаем имя входного файла

Если аргумент является именем выходного файла, сохраним это имя и выключим

if ( ofile on ) { ofile on = false; ofile = pchar;

ofile on:

Если аргумент задает максимальный размер, мы должны преобразовать строку встроенного типа в представляемое ею число. Сделаем это с помощью стандартной функции atoi() , которая принимает строку в качестве аргумента и возвращает int (также существует функция atof() , возвращающая double). Для использования atoi() включим заголовочный файл ctype.h. Нужно проверить, что значение максимального

int limit;

else

if ( limit on ) { limit on = false; limit = atoi( pchar );

if ( limit < 0 ) {

cerr << program name << ::

<< program version << : error: << negative value for limit.\n\n ; usage( -2 );

размера неотрицательно и выключить limit on:

Если обе переменных состояния равны false, у нас есть имя входного файла. Сохраним

else

его в векторе строк:

file names.push back( string( pchar ));



prog - d dataOl

будет обработана:

prog -oout file dataOl

(Оба случая мы оставим для упражнений в конце раздела.)

Вот полный текст нашей программы. (Мы добавили инструкции печати для трассировки выполнения.)

При обработке параметров командной строки важен способ реакции на неверные опции. Мы решили, что задание отрицательной величины в качестве максимального размера будет фатальной ошибкой. Это приемлемо или нет в зависимости от ситуации. Также можно распознать эту ситуацию как ошибочную, выдать предупреждение и использовать ноль или какое-либо другое значение по умолчанию.

Слабость нашей реализации становится понятной, если пользователь небрежно относится к пробелам, разделяющим параметры. Скажем, ни одна из следующих двух строк не



#include <string>

С++iдляlнаeинVюItих> 356

#include <ctype.h>

const char *const program name = comline ;

const char *const program version = version 0.01 (08/07/97) ;

inline void usage( int exit value = 0 ) {

печатает отформатированное сообщение о порядке вызова и завершает программу с кодом exit value ...

cerr << порядок вызова:\n << program name <<

<< [-d] [-h] [-v] \n\t

<< [-o output file] [-l limit] \n\t

<< file name\n\t[file name [file name [ ... ]]]\n\n

<< где [] указывает на необязательность опции:\n\n\t

<< -h: справка.\n\t\t

<< печать этого сообщения и вод\n\n\t

<< -v: версия.\n\t\t

<< печать информации о версии программе! и вiход\n\n\t

<< -d: отладка.\n\t\t вкачает отладочную печать \n\n\t

<< -l limit\n\t\t

<< limit доен быть неотрицательна цел числом\n\n\t

<< -o ofile\n\t\t

<< файл, в котор водится результат\n\t\t

<< по умолчанию результат записывается на стандартн вывод\п\п

<< file name\n\t\t

<< имя подлежащего обработке файла\n\t\t

<< должно быть задано хотя бы одно имя -\n\t\t

<< но максимальное число не ограничено\n\n

<< примеры:\n\t\t

<< $comand chapter7.doc\n\t\t

<< $comand -d -l 1024 -o test 7 8

<< chapter7.doc chapter8.doc\n\n ;

exit( exit value );

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

bool debug on = false; bool ofile on = false; bool limit on = false; int limit = -1; string ofile;

vector<string> file names;

<< демонстрация обработки параметров в командной строке:\n << argc: << argc << endl;

cout

argc:

for ( int ix = 1; ix < argc; ++ix )

cout << argv[ << ix << ]:

<< argv[ ix ] << endl;

char *pchar = argv[ ix ]; switch ( pchar[ 0 ] )

case -: {

cout << встретился \-\\n ;

switch( pchar[ 1 ] )

case d:

cout << встретилась -d:

отладочная печать вкчена\n ;

debug on = true;

break;

case v:

cout << встретилась -v:



1 ... 115 116 117 [ 118 ] 119 120 121 ... 395

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика