【问题标题】:how to use getopt to parse one option only once如何使用 getopt 只解析一个选项一次
【发布时间】:2015-09-03 00:26:35
【问题描述】:

我只想解析一个选项一次并让它跳过或出错当在参数中输入了两个相互冲突的不同选项时。

例如,

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

我正在考虑设置 var 来存储选项是否已被读取 类似:

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

稍后再解析所有内容..

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

谢谢:)

【问题讨论】:

  • 是的,您正朝着正确的方向前进。您需要在内部保留已经解析/处理的选项,并检查冲突的选项

标签: c getopt getopt-long


【解决方案1】:

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

#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.out -b

给出了b选项

$ ./a.out -b -a

给出了b选项

$ ./a.out -a -b

给出一个选项

在此示例中,同一命令行参数中的 a 或 b 选项仅出现一次。

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

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

【讨论】:

  • 我不想要这样的小事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-06
  • 1970-01-01
  • 2018-10-25
  • 1970-01-01
  • 2019-01-24
  • 2023-03-20
  • 1970-01-01
相关资源
最近更新 更多