0

getopt を使用するときに引数を別の引数に依存させる組み込みの方法はありますか? たとえば、switch case のセットアップがあり、すべて正常に動作しますが、テキスト ファイル (-i) を読み取る前に -m 引数 (マルコフ チェーンの長さ) が必要です。

つまり、入力引数を処理するときに他の引数が設定されていないことを確認したいと思います。

小さな抜粋:

    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 filename です。次に、すべてのフラグを処理した後、残りの引数 (argv[optind] から argv[argc-1] まで) をファイル名として処理します。これは、フラグ値に応じてファイルを処理するという、あなたのような一般的な状況に役立ちます。

于 2014-03-04T05:49:30.977 に答える