0

使用 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;
    }
}

如果没有任何内置方法,您是否有一种干净的方法来执行此操作?干净的代码在这里比效率更重要。感谢您的任何帮助!

4

1 回答 1

1

保存文件名并仅在处理完所有命令行参数后处理它。这通常是最好的方法——getopt 代码应该只解析,而不是处理。

或者,这是大多数命令的工作方式,不要对文件名使用标志......所以用法是 pgm -m foo 文件名。然后,在处理完所有标志后,您只需将剩余的参数(argv[optind] 到 argv[argc-1])作为文件名处理。这有利于根据标志值处理文件的常见情况(如您的情况)。

于 2014-03-04T05:49:30.977 回答