2017-12-28 37 views
0

は私が書くと言う:int argcとchar * argv []をmain関数に実装するにはどうすればよいですか?

program -x +5 +r 

-x+5+rは、コマンドラインスイッチです。

+5:5秒ごとに、それはメッセージ

+r-xを送信しますもの

は、どのように私はint型のメイン機能でこれを行うに行くかありませんか? プログラムをクラスとして持っていて、クラスのパラメータとして-x,+5+rを持っている必要がありますか、それともそれぞれのクラスは独自のクラスですか?私のような異なる順序でコマンドラインスイッチを、望んでいた場合:私も負と正の符号を占めるだろうか

program +5 +4 -x 

?どんな助けもありがとうございます。

+0

が '(文字** argvの、int型のargc)int型メイン'として宣言されていますそれぞれの 'argv [i]'の値が –

+0

であることを確認してください。getoptsのような標準的な解決策を使うのが良いでしょう。 –

+1

クラス? c?あなたはそれがcだと確信していますか? –

答えて

1

これは、コマンドラインスイッチ処理の私の標準的な方法です+受け入れるように適応して - 数字:あなただけの、メインとして

int main(int argc, char **argv) 
{ 
    int i= 0; 
    char filename[256]; 
    int number; 
    int xOption= 0; 

    /* format: prog -dfilename -xrs -n3 +5 -3 
    * Switch chars are case insensitive and can be in any order 
    */ 
LabelNextSwitch: 
    while (++i < argc) { 
     switch (argv[i][0]) { 
     case '-': 
       while (*++argv[i]) { 
        switch (toupper(*argv[i])) { 
        case 'D': 
          strncpy (filename, argv[i]+1, 256); 
          filename[255]= '\0'; 
          goto LabelNextSwitch; 

        case 'N': 
          ++argv[i]; number = 0; 
          while (isdigit(*argv[i])) 
           number = number *10 + *argv[i]++ - '0'; 
          goto LabelNextSwitch; 

        case 'X': 
          xOption= 1; 
          break; 

        case 'R': 
          // whatever 
          break; 

        case 'S': 
          // whatever 
          break; 

        default: 
          if (isdigit(*++argv[i])) { 
           number = 0; 
           while (isdigit(*argv[i])) 
            number = number *10 + *argv[i]++ - '0'; 
           number = -number; 
           goto LabelNextSwitch; 
          } 
          else 
           printf("Bad argument '%c', ignored.\n",*argv[i]); 
        } /* end switch (*argv[i]) */ 
       } /* end while (*++argv[i]) */ 
       break; 
     case '+': 
       if (isdigit(*++argv[i])) { 
        number = 0; 
        while (isdigit(*argv[i])) 
         number = number *10 + *argv[i]++ - '0'; 
        goto LabelNextSwitch; 
       } 
       else 
        printf("Bad argument +%s, ignored.\n",argv[i]); 
       break; 
     default: 
       printf("Bad argument %s, ignored.\n",argv[i]); 
     } /* switch (argv[i][0]) */ 
    } /* end while (++i < argc) */ 
    return 0; 
} /* end function */ 
関連する問題