如果用户选择req.user.email
而不是-p
,我必须打印两个不同的输出。一个有参数,另一个没有参数。如果我尝试:
-pc
然后while( (arg = getopt_long(argc, argv, "p:")) != -1 )
{
switch (arg)
{
case 'p':
p = optarg;
if (p=='')
sflag = true;
if (p=='c')
oflag = true;
break;
}
有效,但是如果我尝试-pc
,我会收到一条错误,说是期待参数。如何处理可选的选项参数?
答案 0 :(得分:1)
您使用的是GNU吗?如果是这样,你很幸运。来自docs:
options 参数是一个字符串,它指定对此程序有效的选项字符。此字符串中的选项字符后面可以跟冒号(
:
),表示它需要一个必需的参数。 如果选项字符后跟两个冒号(::
),则其参数是可选的;这是一个GNU扩展。
因此,您需要:
while( (arg = getopt_long(argc, argv, "p::")) != -1 )
答案 1 :(得分:0)
我在这里发布我的代码,我在代码中使用了两个冒号
int main(int argc, char **argv){
char op= '\0';
char arg = '\0';
while( (arg = getopt(argc, argv, "p::")) != -1 ){
switch (arg){
case 'p': op = *optarg;
if (op=='c')
flagp = true;
else if (op=='')
flago = true;
else
cout<<"Invalid parameter"<<endl;
}}
I am getting a empty character constant as an error and if I leave it blank as shown above
如果我不使用其他的话,`和其他方法如下所示。
case 'p': op = *optarg;
flagp = true;
}
It does not take -p as an argument. Compiler gives me a segmentation dump error. But if i use any argument like px then it sets the flagp as true.