我是编程新手,我想添加一个可以接受选项案例的开关,例如-aa
,-aaa
,-aaaaaa
等这三种案例中的每一种除了案例a
?
我在想......
int option = getopt (argc, argv, "abcd");
switch(option){
case 'a': BLAH = TRUE;
break;
case 'b': FOO = TRUE;
break;
case 'c': BAR = TRUE;
break;
case 'd': BAZ = TRUE;
break;
}
for(int i = 1; i<argc; i++){
if ( argv[i][0] == '-' && argv[i][1] == 'a' && argv[i][i+2] == 'a' )
myOption =TRUE;
}
但是这会有效吗? 谢谢你的阅读。
答案 0 :(得分:3)
getopt_long(3)
函数为许多程序提供命令行解析,通常使用如下调用:
struct option long_options[] = {
{"add", 0, 0, 'a'},
{"binary", 0, 0, 'B'},
{"base", 1, 0, 'b'},
...
{"Optimize", 1, 0, 'O'},
{"preprocess", 0, 0, 'p'},
{NULL, 0, 0, 0},
};
while ((c = getopt_long(argc, argv, "adf:h::rRVvI:b:BCD:NSm:qQn:XKTWkO:po:", long_options, &o)) != -1)
{
switch (c) {
case 0:
PERROR("Assert, in getopt_long handling\n");
display_usage(progname);
exit(0);
break;
case 'a':
count++;
option = OPTION_ADD;
break;
case 'd':
debug++;
skip_read_cache = 1;
break;
/* ... and so forth */
您可以使用getopt_long(3)
扫描输入数组,以查找来自add
的多个输入(请binary
,long_options[]
等)映射到一个简短选项(a
或B
)。
但如果你对你想要完成的事情更具体,那么可能会有更好的机制。
答案 1 :(得分:3)
不,这可能不起作用。 C中的最佳方法(假设您使用Linux)是使用GNU C库提供的一些getopt函数。如果您只需要处理一个或两个长选项,也可以使用if..else if
和strcmp()
。
上次我检查了BSD的libc也存在相似的功能(虽然可能有点不同)。
答案 2 :(得分:1)
'aaa'
不是整数,不是char,而不是C语言中的任何类型。传递给switch语句的表达式应该返回一个整数。所以,switch语句会在那里抱怨。
对于非整数比较,例如您列出的比较,使用if-else应该是好的。