2015-09-03 28 views
1

我想解析一個選項ONLY ONCE和使其跳過或出現錯誤當有兩個不同的選項相互衝突輸入參數。如何使用getopt解析一個選項只有一次

例如,

./a.out --install --remove //i dont want this to work... 

我想設置VAR存儲選項是否已讀 類似的:後來

case 'i': install_opt=1; install_arg=optarg; break; 

和分析一切..

是我完全走錯路? 如果是的話,請指導我如何正確使用getopt的....

謝謝:)

+2

是的,你正朝着正確的方向前進。您需要在內部保留已經解析/處理過的選項,並檢查軌道上的衝突選項 – Joao

回答

0

您可以使用條件,如下面例子中,交換機的情況下選擇內部檢查。

#include<stdio.h> 
int select=0; 
int main(int argc, char *argv[]) 
{ 
     int opt; 
     while((opt = getopt(argc, argv, "ab")) != EOF) 
     { 
       switch(opt) 
       { 
         case 'a' : 
           if(select == 0) 
           { 
             printf("The a option is given\n"); 
             select=1; 
           } 
           break; 

         case 'b' : 

           if(select == 0) 
           { 
             printf("The b option is given\n"); 
             select=1; 
           } 
           break; 
       } 
     } 
} 

輸出: -

$ ./a.out -a

的一個選項給出

$ ./a.out -b

在B選項給出

$ ./a.out -b -a

在B給出選項

$ ./a.out -a -b

的一個選項給出

在本例中在同一命令行參數的a或b的選擇,只一旦它來了。

如果輸入任何選項,select變量將變爲1,否則爲0,如果輸入了一個選項,則將select設置爲1.因此,它會使用if條件跳過下一個選項。

它只有在它跳過所有參數後才接受第一個參數。 如果你想產生錯誤,你可以在if條件中使用else部分。

+0

我不希望這樣的瑣事。 – hoholee12

相關問題