|
Программирование >> Инициализация объектов класса, структура
обработаем максимальный размер для опции -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:
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |