2011-10-06 81 views
0

我想看看getopts如何工作。我寫了下面的代碼,但不知道我做錯了什麼。請指點我:getopt給-1作爲返回值

#include<unistd.h> 
.. 
.. 
int main(int argc, char *argv[]) 
{ 
    int ch=0; 
    while((ch=getopt(argc, argv, "ltR:")!=-1) // 0 here was by mistake. Changed to -1 
    { 
     printf("%d",ch); //This prints -1 
     switch(ch) 
       { 
       case 'l': 
       printf("l"); 
       break; 
       case 't': 
       printf("t"); 
       break; 
       case 'R': 
       printf("R"); 
       break; 
       } 
    } 
    return 0; 
} 

$ ./a.out -ltR 
$ -1 
$ ./a.out -l 
$ -1 

可能是我在做一個真正的錯誤或錯過了我對getopt的理解的某些方面。

做出改變,但仍然給出了同樣的結果:(

感謝, Faizan

+1

該代碼在while循環的括號中也有問題。你能否粘貼你的實際代碼,因爲a)不能編譯,b)可能會給你的實際問題提供線索。 –

+0

哦..那是在一個不同的機器上,我沒有互聯網接入..多數民衆贊成爲什麼必須鍵入..比較兩者,但不會注意到任何差異在while循環..再次檢查 –

回答

1

我想你的,而表述應該是

while((ch=getopt(argc, argv, "ltR")!=-1) 
{..} 

和選項應該結束 ':'

while((ch=getopt(argc, argv, "ltR:")!=-1) 
{..} 

或兩個 ':' 如果開關是可選的。

+0

0是錯誤的。 Orignally我有-1,但在這裏打字時,我做到了0.還添加了「ltR:」,但給出了相同的結果 –

1

從手冊頁-1指示所有參數已經完成,而不是0,你似乎在檢查對。

man 3 getopt 

如果成功地發現了一個選項,則getopt說明()返回的選項字符。如果所有的命令行選項已經被解析,那麼getopt說明()返回-1 。

您的問題中的代碼並不是開箱即解析的,所以它看起來並不是一個適當的複製粘貼,這使得更容易發現錯誤。 while循環中的括號可能是您的問題的原因,但很難說。如果我複製粘貼示例並更正括號問題,則代碼將按預期工作。

+0

如果我傳遞參數然後它不應該是-1是對的嗎?運行它爲./a.out -l,但仍然給-1 –

+0

正確的Colin ..這是複製錯誤錯誤在這裏,並在實際的程序中也有一個錯誤。更正的括號,它的工作。謝謝 –