2016-10-29 24 views
0

私はCプログラミングの初心者ですが、私はC++に関するいくつかの経験を持っていますが、C言語については何も経験していません。getopt optarg引数については文字列です。 -xフラグの入力引数が "dog"と等しいかどうか確認したい私の現在のコードは次のようになります。Optarg文字列比較C

要約
int main(int argc, char** argv){ 
    int c; 
    extern char *optarg; 
    extern int optind; 
    extern int optopt; 
    int sum=0; 
    while ((c = getopt(argc, argv, ":x:h")) != -1) { 
    switch (c) { 
     case 'h': getHelp(); 
        break; 
     case 'x': if(strcmp("dog", optarg)== 0){ 
         sum = 1; 
        } else { 
         sum = 0; 
        } 
        break; 
    } 
} 

、私は-xフラグのための入力変数が(その場合、変数の和が0に変更)犬であるかどうかを確認したいです。私の場合、sum変数は入力が './main -x dog'であっても常に0です。 ありがとうございます!

+0

私がコンパイルされ、猫の入力のための0として犬と値の入力を1として、あなたのコードとIを参照の合計値を試してみました:ここ

[tmp]$./a.out -x cat Sum = 0 [tmp]$./a.out -x dog Sum = 1 

はコードです。 –

答えて

2

コメントで出力をインデントできませんでした。だからここに答えがある。私は質問のコードを試して、私は正しい出力を参照してください。

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

int main(int argc, char** argv){ 
    int c; 
    extern char *optarg; 
    extern int optind; 
    extern int optopt; 
    int sum=0; 
    while ((c = getopt(argc, argv, ":x:h")) != -1) { 
     switch (c) { 
      case 'h': 
       break; 
      case 'x': 
       if(strcmp("dog", optarg)== 0){ 
        sum = 1; 
       } else { 
        sum = 0; 
       } 
       break; 
     } 
    } 

    printf("Sum = %d\n", sum); 
} 
+0

私はJayに同意します。私は同じことを試していて、印刷ステートメントも追加していました。 'foo -x dog'を実行すると期待どおりに動作します – selbie

+0

ありがとうございました。私はパラメータの読みの順序に問題があるようです。 – ZPA