не работает getopt (решено)

Модератор: Модераторы разделов

Аватара пользователя
kt315e
Сообщения: 318
ОС: Debian 11

не работает getopt

Сообщение kt315e »

Код: Выделить всё

int update_param(int argc, char** argv, parameters& par)
{
int oc;
char *b_opt_arg;

while( oc = getopt(argc, argv, ":o:i:t:") != -1)
   {
     fprintf(stderr,"%d  %d  %d  %d\n",oc,'o','i','t');//Печать значения опции и её ожидаемых значений
   switch (oc)
     {
     //Установка выходного файла
     case 'o':  fprintf(stderr,"option %c  value %s\n", oc, optarg);
                break;
     //Установка входного файла
     case 'i':  fprintf(stderr,"option %c  value %s\n", oc, optarg);
              break;
     //Установка числа иттераций
     case 't':  fprintf(stderr,"option %c  value %s\n", oc, optarg);
              break;
     case ':':  fprintf(stderr,"case :\n");
              break;
     case '?':  fprintf(stderr,"case ?\n");
     default:    fprintf(stderr,"default \n");
     }
   }
exit(0);
}

При таком запуске "proba -o output_file -i input_file -t 1000" выдаёт вывод

Код: Выделить всё

1  111  105  116
default
1  111  105  116
default
1  111  105  116


То есть значение опции почему то не читается в oc, вместо него записывается единица, и естественно идет обработка по умолчанию. В то же время число опций определяется правильно.
Спасибо сказали:
ryuu
Сообщения: 14
ОС: Arch Linux

Re: не работает getopt

Сообщение ryuu »

Код: Выделить всё

--- a   2008-08-15 10:59:58.000000000 +0600
+++ b   2008-08-15 11:00:36.000000000 +0600
@@ -3,7 +3,7 @@ int update_param(int argc, char** argv,
 int oc;
 char *b_opt_arg;

-while( oc = getopt(argc, argv, ":o:i:t:") != -1)
+while( (oc = getopt(argc, argv, ":o:i:t:")) != -1)
    {
      fprintf(stderr,"%d  %d  %d  %d\n",oc,'o','i','t');//Печать значения опции и её ожидаемых значений
    switch (oc)
World Destroyer, The
Спасибо сказали:
Аватара пользователя
kt315e
Сообщения: 318
ОС: Debian 11

Re: не работает getopt

Сообщение kt315e »

ryuu:
Я к сожалению не понял, что хотели сказать :mad:
Спасибо сказали:
Galaxy Master
Сообщения: 142
ОС: Debian GNU/Linux

Re: не работает getopt

Сообщение Galaxy Master »

kt315e писал(а):
15.08.2008 10:31
ryuu:
Я к сожалению не понял, что хотели сказать :mad:



выше хотели сказать, что

замените ваше while( oc = getopt(argc, argv, ":o:i:t:") != -1)

на while( (oc = getopt(argc, argv, ":o:i:t:")) != -1)
Спасибо сказали:
Аватара пользователя
kt315e
Сообщения: 318
ОС: Debian 11

Re: не работает getopt

Сообщение kt315e »

Спасибо! Совсем глупый стал.
Спасибо сказали: