Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ getopt参数依赖于另一个参数_C++_C_Command Line Arguments_Getopt_Getopt Long - Fatal编程技术网

C++ getopt参数依赖于另一个参数

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'

在使用getopt时,是否有一种内置方法使参数依赖于另一个参数?例如,我有开关盒设置,一切正常,但在读取文本文件(-I)之前,我需要-m参数(马尔可夫链的长度)

换句话说,我想确保在处理输入arg时没有设置其他参数

小摘录:

    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()
是否有类似的行为。非常感谢!我觉得这样做是正确的,但不太确定该怎么做。回答和评论很好。