私のコードは getopt を使用して、コマンドラインから引数を取得します。3 つの必須引数とオプションの 4 番目の引数を取得できるようにしたいと考えています。これらの入力をそれぞれ A と B と呼びましょう: ./main string1 string2 filenameまたは./main -n 3 string1 string2 filename .
オプションの引数を最初に配置する必要はないと言われているので、次の方法でも機能するはずです。この入力を Cとしましょう: ./main string1 string2 -n 3 filename . 他の 3 つの引数はこの順序である必要があることに注意してください。これは私が問題を抱えている部分です。
現在、私のコードは次のようになっています。
int c;
int n;
while ((c = getopt(argc,argv,"n:"))!=-1) {
printf("Loop\n");
switch (c) {
case 'n':
cvalue = optarg;
n = atoi(optarg);
break;
case '?':
break;
default:
break;
}
}
入力 B を実行すると、コードが機能します。つまり、ループに入り、入力が n に正しく割り当てられます。ただし、C を入力すると、ループに入ることさえありません。つまり、引数に -n 3 を登録していないようです。これは予期された動作ですか、それともコードに何か不足していますか? どうすれば問題を解決できますか?