C++ getopt参数依赖于另一个参数
在使用getopt时,是否有一种内置方法使参数依赖于另一个参数?例如,我有开关盒设置,一切正常,但在读取文本文件(-I)之前,我需要-m参数(马尔可夫链的长度) 换句话说,我想确保在处理输入arg时没有设置其他参数 小摘录:C++ getopt参数依赖于另一个参数,c++,c,command-line-arguments,getopt,getopt-long,C++,C,Command Line Arguments,Getopt,Getopt Long,在使用getopt时,是否有一种内置方法使参数依赖于另一个参数?例如,我有开关盒设置,一切正常,但在读取文本文件(-I)之前,我需要-m参数(马尔可夫链的长度) 换句话说,我想确保在处理输入arg时没有设置其他参数 小摘录: while ((opt = getopt_long(argc, argv, "i:shm:", long_options, &option_index)) != -1) { switch (opt) { case 'i'
while ((opt = getopt_long(argc, argv, "i:shm:", long_options, &option_index))
!= -1)
{
switch (opt) {
case 'i':
inputEnglish.ReadFile((string)optarg);
break;
case 'm':
inputEnglish.setMarkovLength(atoi(optarg));
break;
case 's':
break;
case 'h':
printHelp();
break;
case '?':
cout << "dfgdfgdf" << endl;
return 0;
break;
default:
printHelp();
return 0;
break;
}
}
while((opt=getopt_long(argc,argv,“i:shm:”,long_选项和选项索引))
!= -1)
{
开关(opt){
案例“i”:
ReadFile((字符串)optarg);
打破
案例“m”:
输入英语setMarkovLength(atoi(optarg));
打破
案例s:
打破
案例“h”:
打印帮助();
打破
案例“?”:
cout保存文件名并仅在处理完所有命令行参数后处理它。这通常是最好的方法——getopt代码应该只解析,而不是处理
或者,这是大多数命令的工作方式,不要对文件名使用标志…因此使用的是pgm-m foo filename。然后您只需处理其余的参数(argv[optin]到argv[argc-1])处理完所有标志后,将其作为文件名。这有助于根据标志值处理文件的常见情况(如您的情况)。还有两种可能性:(1)在运行处理代码的-i
选项中的操作之前,检查-m
选项是否已设置,以及(2)在使用-i
指定文件之前,如果不使用-m
定义一个合适的默认马尔可夫长度,请定义一个合适的默认马尔可夫长度。不过,总的来说,最好处理选项(和默认值)然后处理文件。GNU有一种模式,返回文件名就像它们是选项参数一样;我还没有测试getopt_long()
是否有类似的行为。非常感谢!我觉得这样做是正确的,但不太确定该怎么做。回答和评论很好。