2016-10-28 4 views
-1

私はCでいくつかのプロジェクトに取り組んでいます。私がこれまで行ってきたことは、コマンドラインから引数を読み込み、最小値または最大値を返すことです。例えば:私は何をしたいかコマンドラインで入力タイプを定義する

./find -m -M 1 3 4 5 
The smallest number is: 1 
The biggest number is 5 

は、私がスクリプトを実行するときに、私は、整数と浮動小数点数の間で選択することができます「T」(スイッチケースでは「T」)フラグを追加することです。たとえば、

./find -m -t float 1.2 4.5 1.9 2.3 
The smallest number is: 1.2 

または整数と同じものです。

ありがとうございました。

ショートフォーマットされたコード:

int main(int argc, char *argv[]){ 
int array[30]; 

int x = 0; 
while ((x = getopt(argc, argv, "htm")) != -1) 
{ 
    switch(x) 
    { 
    case 'h' : 
     printf("Help.\n"); 
     break; 
    case 't': 
     break; 
    case 'm' : 
     for(int a = optind; a < argc; a++) 
     { 
      array[a] = atoi(argv[a]); 
     } 
     for (int i = optind; i < argc; i++) 
     { 
      for (int j = optind; j < argc - 1; j++) 
      { 
       if (array[j] > array[j + 1]) 
       { 
        int temp = arrray[j]; 
        array[j] = array[j + 1]; 
        array[j + 1] = temp; 
       } 
      } 
     } 
     printf("The smallest one: %d\n", array[optind]); 
     break; 
    } 
} 
return 0; 
} 
+1

あなたの質問は本当にです: "コマンドラインオプションCで?ここで使用する標準関数は 'getopt'です。それはあなたを始めるはずです。 –

+0

@JonathonReinhart私はgetoptを 'while((x = getopt(argc、argv、" htmM "))!= -1)' – HC1122

+0

で使用しています。 –

答えて

0

非常に迅速な解決策のようなものが考えられます。

int type = 0; 

// parse the arguments 
if (argc > 1){ 
    for (int i = 0; i < argc; i++){ 
     if (!(strcmp(argv[i],'-t'))) 
      if (!(strcmp(argv[i+1],'float'))) 
       type = 1; 
    } 
} 

タイプが0使用int型であるか、それは1台の使用フロートだ場合ならば、ご確認ください。 argv [i + 1]を盲目的に使うのではなく、チェックをする必要がありますが、書くのは簡単ですし、動作します(かなり速く書いたので、いくつかのタイプミスはありません)。

P.S.私はgetoptを使ったことはありませんでしたが、strcmpを使用する必要がないので、おそらくそれで簡単でしょう。

また、スイッチは文字列でのみ使用できます。文字列[0]で使用しますが、 "int"と "float"だけでなく、 "i"または "f"で始まるすべての文字列を受け入れることになります

関連する問題