Язык программирования C++. Вводный курс


Функция main(): разбор параметров командной строки - часть 3


переменным, отражающим внутреннее состояние:

// если ofi1e_on==true,

// следующий параметр - имя выходного файла

bool ofi1e_on = false;

 

// если ofi1e_on==true,

// следующий параметр - максимальный размер

bool limit_on = false;

Вот обработка опций -l и -o в нашей инструкции switch:

case 'l':

  limit_on = true;

  break;

 

case 'o':

  ofile_on = true;

  break;

Встретив строку, не начинающуюся с дефиса, мы с помощью переменных состояния можем узнать ее содержание:

// обработаем максимальный размер для опции -1

//            имя выходного файла для       -o

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

default: {

   // ofile_on включена, если -o встречалась

   if ( ofile_on ) {

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

     // выключим ofile_on

   }

   else if ( limit_on ) { // если -l встречалась

     // обработаем максимальный размер

     // выключим limit_on

   } else {

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

   }

}

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

if ( ofile_on ) {

  ofile_on = false;

  ofile = pchar;

}

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

(также существует функция atof(), возвращающая double). Для использования atoi()

включим заголовочный файл ctype.h. Нужно проверить, что значение максимального размера неотрицательно и выключить limit_on:

// 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 );

  }

}

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

else

<


Начало  Назад  Вперед