2016-02-16 1 views
1

Я работаю над простой программой, которая должна менять строку во всех прописных или строчных строках в зависимости от аргументов. Например, если название программы является изменение:Как использовать getOpt для определения того, не заданы ли параметры в C?

./change -u thiswillbeuppercase

THISWILLBEUPPERCASE

./change -l THISWILLBELOWERCASE

thiswillbelowercase

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

./change thiswillbeuppercase

THISWILLBEUPPERCASE

Вот что моя основная функция выглядит в настоящее время:

int main(int argc, char *argv[]) { 
int c; 
while((c = getopt(argc,argv,"u:s:l:")) != -1){ 
    char *str = optarg; 
    if(c == '?'){ 
     c = optopt; 
     printf("Illegal option %c\n",c); 
    } else{ 

     switch(c){ 
      case 'u': 
       strupper(str); 
       break; 
      case 'l': 
       strlower(str); 
       break; 
      case 's': 
       strswitch(str); 
       break; 
      default: 
       strupper(str); 
       break; 

     } 
    } 

} 
return 0; 

}

Я пробовал называть strupper fu nction в стандартной части оператора switch, но это, похоже, не работает. На данный момент программа ничего не делает, когда нет опций.

Я ищу StackOverflow для подобных вопросов, и я нашел кого-то с same issue, но их вопрос связан с Баш и C.

Если у кого есть какие-либо советы я бы очень признателен. Спасибо.

+0

Либо ваш вопрос название вводит в заблуждение, или я не понимаю, что вы просите в теле вопроса –

+0

Вторая желтая коробка функциональность я Я пытаюсь создать. Если пользователь не вводит никаких параметров, он будет вызывать функцию strupper по умолчанию. Извините, если я не понял этого. – loserman778

+0

Почему вы не положили свой случай 'if (c == '?')' В оператор 'switch'? – e0k

ответ

2

Я хотел бы изменить свой код так:

... several includes here... 
int main(int argc, char *argv[]) { 
    int c; 
    while((c = getopt(argc,argv,"u:s:l:")) != -1){ 
    // ... no changes here ... 
    } 
    if ((argc > 1) && (c == (-1))) { 
     // implement your default action here. Example 
     // for (int i = 1 ; i < argc ; i++) { 
     // strupper (argv[i]) ; 
     // } 
    } 
    return 0; 
} 
+0

Спасибо за ответ. Я отдам это! – loserman778

+1

это было бы хорошо, так как getopt (и getopt_long) обе стягивают массив argv и уменьшают счетчик argc при повторении параметров. – bruceg

Смежные вопросы