端末の引数が正しいことを確認するプログラムを作成するにはどうすればよいですか?
たとえば、プログラムがhello.cpp
あり、それを次のように呼び出したいとします。
./hello yes 10
最初の引数が yes または no で、2 番目の引数が 1 ~ 10 の数字であることをプログラムに確認してもらいたいです。では、これらの引数をプログラムに読み込んでチェックを行うにはどうすればよいでしょうか?
ありがとう!
コマンド ライン引数は、argc
およびargv
引数内のカウントおよび個々の文字列として に渡されmain()
ます。
int main(int argc, char *argv[])
{
...
}
適切な値の値argc
と文字列をチェックするだけです。argv
あなたはこのように実行するつもりでした./hello yes 10
c にはオプション argc と argv があり、argc は渡された引数の数であり、インデックス付きの argv は渡された引数自体を示します。
すべての引数を反復処理するための以下のコードを見てください。
int main(int argc, char *argv[]){
int i = 0;
for (i = 0; i < argc; i++) {
printf("argv[%d] = %s\n", i, argv[i]);
}
return 0;
}
他のユーザーが述べたように、main
関数はプログラムのエントリ ポイントであり、コマンド ラインからデータを取得する方法はパラメータを使用することです。
最初のint
引数は、プログラム名を含む、渡されたすべての引数の数です。2 番目のchar **
引数は、プログラム名を含む、渡された各パラメーターへのポインターです。
int main
(
int argc, // <-- how many parameters has been provided?
char **argv, // <-- what values has each parameter?
)
{
...
return 0;
}
したがって、それを知っていると、呼び出し./hello yes 10
は次のようになります。
argc = 3
argv[0] = "./hello"
argv[1] = "yes"
argv[2] = "10"
名前argc
とargv
は単なる慣例です。自由に名前を付けることができますが、誰もが使用している名前を保持することをお勧めします。
そして、この回答int, char **
から借りた、非常に厳格な規則に従わなければならないという議論は強制されません:
型 int の戻り値の型を持つ必要がありますが、それ以外の場合、その型は実装定義です。すべての実装では、main の次の定義の両方が許可されます: int main() および int main(int argc, char* argv[])
それを知って、あなたの質問に焦点を当てましょう:
まず、2 つの引数が渡されていることを確認する必要があるため、argc
値を確認して、正確に等しいことを確認する必要があります3
。
最初の引数は yes または no
次に、argv[1]
(プログラム名が含まれているため) を文字列に格納し、値と0
比較する必要があります。"yes"
"no"
std::string YesOrNo(argv[1]);
if (YesOrNo == "yes" || YesOrNo == "no")
最後に、 をargv[2]
整数に格納し、それが と等しいかそれ以下かどうかを確認する必要があり10
ます。
std::stringstream Stream;
int Value = 0;
Stream << argv[2];
Stream >> Value;
if (Value <= 10)
したがって、結果は次のとおりです。
int main(int argc, char **argv)
{
if (argc == 3)
{
std::string YesOrNo(argv[1]);
if (YesOrNo == "yes" || YesOrNo == "no")
{
std::stringstream Stream;
int Value = 0;
Stream << argv[2];
Stream >> Value;
if (Value <= 10)
{
// Your stuff..
}
}
}
return 0;
}
大文字と小文字、および数値引数の誤検知はすべてあなたに任せます。少なくとも、私はあなたのすべての宿題をするつもりはありません ;)