如何使用getopt()限制c中命令行选项的使用



我正在进行一个c项目我正在尝试编写一个程序,允许用户使用其中一个命令行选项来调用该程序。例如

./program [-a or -b or -c] [-f filename] [-l length]

其中[-a or -b or -c]是强制性的,而-f-l不是。

我的问题是,如果用户同时选择任意两个或多个[-a or -b or -c],如何返回错误?

这是允许的

./program -a -f -l 

但不是

./program -a -b -f -l

我的想法是使用getopt()来验证选项,但我不确定如何做到这一点。

感谢您抽出时间!对不起,如果我问了一些愚蠢的问题。

getopt所做的只是让解析命令行选项变得简单——它不会为您做任何验证。您需要跟踪是否设置了abc中的任何一个:

bool abcSet = false;
while( (c = getopt( argc, argv, "abcf:l:" )) != -1 )
{
switch( c )
{
case 'a':
if ( !abcSet )
{
// processing for a
abcSet = true;
}
else
// error, b or c already set
break;

case 'b':
// same as above
break;
case 'c':
// same as above
break;
...
}

你可以考虑测试的感觉,或者你想如何跟踪设置了哪个选项,但你必须以某种方式跟踪这些信息。

getopt不允许这种程度的控制。

有两种方法可以处理:

  1. 每当您阅读其中一个选项时,请检查其他选项是否已阅读
  2. 阅读完所有选项后,检查是否给出了更多选项

最新更新