gpt4 book ai didi

c - 使用 getopt() 的单个选项中的多个参数

转载 作者:行者123 更新时间:2023-11-30 17:48:54 25 4
gpt4 key购买 nike

以下是我使用getopt()使用选项的代码。现在,我想为单个选项提供多个参数,为此我使用了 atoi(atgv[i]) ,其中 i= 2,3,4,..... 我的代码显然适用于以下命令行: ./a.out -m 7 3 -f 1 4 5 -M 3 6 5 1
但显然不适用于 ./a.out -f 1 4 5./a.out -M 3 6 5 1./a.out -f 1 4 5 -M 3 6 5 1./a.out -m 7 3 -M 3 6 5 1 。我尝试使用 optarg() ,但它只接受给定选项的单个参数。那么,如何为单个选项提供多个参数呢?我不需要使用 getopt() 。我的代码是:

#include <stdlib.h>
#include <stdio.h>


int main(int argc, char** argv)
{

int opt;
int a,b,c,d,e,f,g,h,i,j,k,x;

while ((opt = getopt(argc, argv, "mfM:")) != -1) {

switch (opt) {


case 'm':
a= atoi(argv[2]);
b= atoi(argv[3]);
c=a+b;
printf("The sum is: %d\n",c);
break;

case 'f':
d= atoi(argv[5]);
e= atoi(argv[6]);
x=atoi(argv[7]);
f=d+e+x;
printf("The sum is: %d\n",f);
break;


case 'M':
g= atoi(argv[9]);
h= atoi(argv[10]);
i=atoi(argv[11]);
j=atoi(argv[12]);
k=g+h+i+j+k;
printf("The add is: %d\n",k);
break;


default: //default case
fprintf(stderr, "Usage: %s [-f or -m or -M] filename\n", argv[0]);
exit(EXIT_FAILURE);

}

}
}

最佳答案

类似的构造:

case 'm': 
a= atoi(argv[2]);
b= atoi(argv[3]);

违背了 getopt() 的全部目的。

如果您有一个使用 getopt() 的命令指定参数“mfM:”,则意味着您可以接受某人指定其中一个

program -m -f -M 3

program -f -M 3 -m

等等。

其次,如果您想要单个选项有多个参数并且想要使用 getopt,那么您确实应该指定:

program -M 3 -M 4 -M 5

等等。

这是我重写你的程序的方法。

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

int main(int argc, char** argv)
{

int opt;
int mv = 0, fv = 0, Mv = 0;

while ((opt = getopt(argc, argv, "m:f:M:")) != -1) {

switch (opt) {

case 'm':
mv = mv + atoi(optarg);
break;

case 'f':
fv = fv + atoi(optarg);
break;


case 'M':
Mv = Mv + atoi(optarg);
break;

default: //default case
fprintf(stderr, "Usage: %s [-f or -m or -M] filename\n", argv[0]);
exit(EXIT_FAILURE);

}
}

printf ( "-m sum %d\n", mv );
printf ( "-f sum %d\n", fv );
printf ( "-M sum %d\n", Mv );
return 0;
}

并以这种方式运行它。

amrith@amrith-vbox:~/so$ ./go -m 3 -m6 -m 14 -f 2 -M 1 -M6 -M12 -M 18
-m sum 23
-f sum 2
-M sum 37
amrith@amrith-vbox:~/so$

关于c - 使用 getopt() 的单个选项中的多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18251242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com