如何使用getopt仅解析一个选项

时间:2015-09-03 00:26:35

标签: c getopt getopt-long

我想解析一个选项ONLY ONCE和跳过它或发生错误当有两个不同的选项在参数中输入时相互冲突。

例如,

./a.out --install --remove //i dont want this to work...

我正在考虑将var设置为存储是否已读取选项 类似的东西:

case 'i': install_opt=1; install_arg=optarg; break;

稍后解析所有内容..

我完全走错了路吗? 如果是这样,请指导我如何正确使用getopt ....

感谢:)

1 个答案:

答案 0 :(得分:0)

您可以在开关案例选项中使用条件检查,如下例所示。

#include<stdio.h>
int select=0;
int main(int argc, char *argv[])
{
        int opt;
        while((opt = getopt(argc, argv, "ab")) != EOF)
        {
                switch(opt)
                {
                        case 'a' :
                                if(select == 0)
                                {
                                        printf("The a option is given\n");
                                        select=1;
                                }
                                break;

                        case 'b' :

                                if(select == 0)
                                {
                                        printf("The b option is given\n");
                                        select=1;
                                }
                                break;
                }
        }
}

输出: -

$ ./a.out -a

给出了a选项

$ ./a.out -b

给出了b选项

$ ./a.out -b -a

给出了b选项

$ ./a.out -a -b

给出了a选项

在此示例中,同一命令行参数中的a或b选项仅在它到来时。

如果输入任何选项,则select变量变为1,否则为零,如果输入一个选项,则将select设置为1.因此,它使用if条件跳过下一个选项。

只有在跳过所有参数后才会获取第一个参数。 如果要产生错误,可以在if条件中使用else部分。