2016-04-08 49 views
1

實際上我麻煩,我想解析多個參數線像一個:解析多參數在線

./a.out -a 0 L 
./a.out -ab 
./a.out -abc 

我試着用getopt的,以做到了,但我沒有成功。事實是,我不能處理多個參數,如

./a.out -abc 
./a.out -edg 

有沒有辦法以我想要的方式使用像getopt這樣的函數?

或者我應該考慮做(與getopt的):

./a.out -a -b 
./a.out -a -b -c 
+1

嘗試使用getopt時遇到了什麼問題? – danielfranca

+0

問題是: 「./a.out -a 0 J」 是我的程序的第一個選項,它帶有兩個參數。 「./a.out -abc」 是另一個選項,它不會在' - '之後使用任何其他參數。所以我的問題是,我實際上無法將它們兩者合併爲解析我的命令行。 – Exho

+0

爲什麼你需要2個參數?爲什麼不使用不同的語法?即:「./a -a 0,J-abc」 – danielfranca

回答

1

「一::」 讓-a與可選參數。 -a本身設置options標誌以獲得兩個獨立的參數。 - 選擇帶附加選項接受opt

#include <stdio.h> 
#include <unistd.h> 
#include <stdlib.h> 
#include <string.h> 

int main(int argc, char *argv[]) 
{ 
    int c = 0; 
    int each = 0; 
    int options = 0; 

    if (!(argc == 2 || argc == 4)) { 
     fprintf(stderr, "Usage:\t%s -aopt\n or\n\t%s -a opt1 opt2\n", argv[0], argv[0]); 
     return 1; 
    } 
    while((c = getopt(argc, argv, "a::")) != -1) { 

     switch(c) { 
      case 'a': 
       if (optarg) {// -aopt 
        printf ("%s\n", optarg); 
       } 
       else { 
        options = 1;// -a by itself 
       } 
       break; 
      default: 
       fprintf(stderr, "Usage:\t%s -aopt\n or\n\t%s -a opt1 opt2\n", argv[0], argv[0]); 
       return 1; 
     } 
    } 
    if (optind + 2 == argc) { 
     if (options) { 
      for (each = optind; each < argc; each++) { 
       if ((argv[each][0] != '-')) { 
        printf ("found argument %s\n", argv[each]); 
       } 
      } 
     } 
     else { 
      fprintf(stderr, "Usage:\t%s -aopt\n or\n\t%s -a opt1 opt2\n", argv[0], argv[0]); 
      return 1; 
     } 
    } 

    return 0; 
} 
+0

這正是我一直在尋找的東西,非常感謝! – Exho