2016-11-09 5 views
-1

私は、ユーザーからのオプションを処理するプログラムと、getoptを使用してプログラムされた関数を記述しています。私の質問は、ユーザーが無効なオプションを入力した場合、どのようにエラーを表示するのですか?また、エラーメッセージに表示するために変数にアクセスする必要があります。ここに私のコードのスナップショットです:getoptを使用したコマンドラインユーザーの引数へのアクセス

#include <unistd.h> 
#include <iostream> 

int main(int argc, char **argv) 
{ 
    enum { 
     WHOLE, PREFIX, ANYWHERE, SUFFIX, EMBEDDED 
    } mode; 
    bool reverse_match = false; 
    bool ignore_case = false; 
    bool specify_length = false; 

    int c; 
    while ((c = getopt(argc, argv, "wpsavein:")) != -1) { 
     switch (c) { 
     case '?': 
      std::cerr << "Unrecognised option " << std::endl; 
      std::cerr << "Usage: match [-OPTION]... PATTERN [FILENAME]..." << std::endl; 
      return 2; 
      break; 
     case 'w': // pattern matches whole word 
      mode = WHOLE; 
      break; 
     case 'p': // pattern matches prefix 
      mode = PREFIX; 
      //cout << "test: " << optarg << endl; 
      break; 
     case 'a': // pattern matches anywhere 
      mode = ANYWHERE; 
      break; 
     case 's': // pattern matches suffix 
      mode = SUFFIX; 
      break; 
     case 'v': // reverse sense of match 
      reverse_match = true; 
      break; 
     case 'e': // pattern matches anywhere 
      mode = EMBEDDED; 
      break; 
     case 'i': // ignore case 
      ignore_case = true; 
      break; 
     case 'n': // specifies length of match 
      specify_length = true; 
     } 
    } 
} 

私はエラーを表示するようにcerrストリームを使用しますが、私はそれはまた、ユーザーの入力を含めるようにしたいと思います。ユーザー入力-t場合たとえば、エラーは次のようになります。

Unrecognised option -t 
Usage: match [-OPTION]... PATTERN [FILENAME]... 

私は何を取得していますが次のとおりです。

invalid option -- 't' 
Unrecognised option -t 
Usage: match [-OPTION]... PATTERN [FILENAME]... 

私はinvalid option -- 't'がデフォルトですが、私は変更またはできる方法があると信じてそれを含まない?また、ユーザー指定のオプションにアクセスできますか? getoptのから

+2

あなたは 'getopt'のマニュアルページを読みしようとしています。これらの質問すべてに答えます。 –

+0

これを実現するには、 'optopt'と' opterr'を読むことができます。 [マンページを見る](https://linux.die.net/man/3/getopt) –

答えて

0

マニュアルの断片に:

のgetopt場合は、()オプション文字を認識しない、それは、stderrに エラーメッセージを出力optoptに文字を格納し、 を返します '?'。呼び出し元のプログラムは、あなたがする必要がどのような0

に OPTERRを設定することにより、エラーメッセージが表示されないことがあります。

#include <unistd.h> 
#include <iostream> 

int main(int argc, char **argv) { 
    opterr = 0; 
    int c; 
    while ((c = getopt(argc, argv, "wpsavein:")) != -1) { 
    switch (c) { 
     case '?': 
     std::cerr << "Unrecognised option -" << static_cast<char>(optopt) 
        << std::endl; 
     std::cerr << "Usage: match [-OPTION]... PATTERN [FILENAME]..." 
        << std::endl; 
     return 2; 
     break; 
    } 
    } 
} 
+0

ありがとう! –

関連する問題