getopt参数依赖于另一个

时间:2014-03-04 04:41:45

标签: 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':
            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;
    }
}

如果没有任何内置方式,你有干净的方法吗?清洁代码比效率更重要。谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

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

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