我可以在C ++中使用getopt来读取带有和不带参数的字符吗?

时间:2016-03-13 19:59:51

标签: c++ c++11 command-line-arguments getopt

如果用户选择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,我会收到一条错误,说是期待参数。如何处理可选的选项参数?

2 个答案:

答案 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.