2016-10-20 6 views
3

私は、特定の制約の下で0〜9の数字を使用して、考えられるさまざまなパスワードの数を数えるプログラムを作成しようとしています。 1つの必須コマンドライン引数を持つことになります。これはパスワードの桁数になりますが、オプションの引数もあります。これは禁止桁になります。引数が入力されない場合は、すべての数字が許可されます。C/C++にオプションのコマンドライン引数を渡すにはどうすればよいですか?

例えば、私のプログラムが呼び出されるべき組み合わせは:

$ combinations 8 3 #find number of passwords of length 8 with '3' not allowed 

は、私はそれを見て、あなたが例えば

int myfunction(int optional = 3); 

で関数の引数をオプションにすることができますことを発見してみました。しかし、それは何も入力しないとデフォルト値に設定されているようです。私はそれが空白のままになっている場合、すべての数字を許可する必要があります。コマンドライン引数についても私はそれをどうやってやるのだろうか?

+0

プログラムに渡される引数の総数は、 'argc'を使って得ることができます。このカウンタはファイル名を含む引数を与えます。したがって、与えられた例では、 'argc'は3になります。そして、あなたはその周りにロジックの残りの部分を構築することができます。 –

+0

あなたが 'int myfunction(int optional = 3);を使っているなら、あなたはCを書いていません。 C++だけがデフォルトの引数を許可します。しかし、それはコマンドライン引数の解析には関係ありません。基本的には、 'main()'の 'argc'を見て、' argc == 2'は '長さ 'を意味し、' argc == 3'は '長さと禁制数字'を意味します。それ以外のものは、使用法のメッセージ( 'fprintf(stderr、" Usage:%s length [forbidden] \ n "、argv [0]);'またはその前後で拒否されます。また、引数が有効であることを確認します。 –

答えて

3

コマンドライン引数は、main関数のパラメータとしてコマンドラインからプログラムに渡されます。その署名はint main(int argc, char** argv)である必要があります。

第2のパラメータは、プログラムの呼び出しで渡されたすべての引数(プログラムの名前を含む)を保持するヌル終了文字列の配列です。 1つ目は、配列内の文字列の数です。

argc > 2を確認してから、数字としてargv[2]を解析する必要があります。

+0

完全性のために、 'int main(int argc、char * argv [])'も受け入れられます。 –

+0

@DavidBowling、はい、それは代替フォームよりも構文的な砂糖です。 – StoryTeller

関連する問題