0

getopts がどのように機能するかを確認しようとしています。以下のコードを書きましたが、何が間違っているのかわかりません。私を指摘してください:

#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 の理解のいくつかの側面を見逃しているか、本当に間違いを犯している可能性があります。

変更を加えましたが、それでも同じ結果が得られます:(

ありがとう、ファイザン

4

2 に答える 2

1

マニュアルページから-1は、チェックしているように見える0ではなく、すべての引数が実行されたことを示します。

man 3 getopt

オプションが正常に見つかった場合、getopt()はオプション文字を返します。すべてのコマンドラインオプションが解析されている場合、getopt()は-1を返します。

あなたの質問のコードは箱から出して解析されないので、適切なコピーペーストではないように見え、エラーを見つけるのが非常に難しくなります。whileループの角かっこが問題の原因である可能性がありますが、わかりにくいです。例をコピーして貼り付け、ブラケットの問題を修正すると、コードは期待どおりに機能します。

于 2011-10-06T15:55:57.373 に答える
1

あなたのwhile表現は

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

オプションは「:」で終わる必要があります

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

または2つの':'スイッチがオプションの場合。

于 2011-10-06T15:56:56.177 に答える