我正在进行一个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
所做的只是让解析命令行选项变得简单——它不会为您做任何验证。您需要跟踪是否设置了a
、b
或c
中的任何一个:
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
不允许这种程度的控制。
有两种方法可以处理:
- 每当您阅读其中一个选项时,请检查其他选项是否已阅读
- 阅读完所有选项后,检查是否给出了更多选项