0

同じ種類の複数のコマンド ライン引数を処理する方法について混乱しています。オンラインでいくつかのソリューションを見てきましたが、探しているものが表示されません。

私のコマンドライン引数は次のようになります: myar -q test.a 1-s.txt 2-s.txt 3-s.txt 4-s.txt 5-s.txt

したがって、これらのファイル名はすべて q 入力として処理する必要があります。ただし、これを実行しようとすると、最初の 1 つだけが取得されます。以下を試しましたが、test.aのみをピックアップします:

opt =  getopt(argc, argv, optString);
while (opt != -1) {
    switch (opt) {

         case 'q':
             globalArgs.filename = optarg;
             break;

これをより良くする方法はありますか?私は今、本当に立ち往生しています。

4

1 に答える 1

1

さまざまなオプションがあります。

  • 呼び出し例には、単一の-qオプションとそれに続く多数のファイル名 (非オプション) 引数があります。オプション文字列の一部としてでqはなく使用し、ファイル名をオプション以外の引数として処理します。q:getopt()

  • -qユーザーは、各ファイル名の前にを繰り返す必要があります(so myar -q test.a -q 1-s.txt -q 2-s.txt -q 3-s.txt -q 4-s.txt -q 5-s.txt)。オプション解析ループ内では、 を見つけたときに処理するoptargか、後で処理するために何らかのリストに値を隠します。

  • を使用getsubopt()し、コンマ区切りで引数をリストするようにユーザーに要求します ( myar -q test.a,1-s.txt,2-s.txt,3-s.txt,4-s.txt,5-s.txt)。

最も一般的な手法であり、アーカイブ プログラムに適している可能性が高い手法 ( command name からの推論myar) は最初の手法です。ファイル名は単純にオプションの引数ではありません。

多くのプログラムは、2 番目の手法を使用します。またはまたはオプションを使用して検討ccしてください。または(スキャンする別のメイクファイルを指定します—はい、1回の呼び出しで複数のオプションを指定できます)。-l-I-Lmake-f-f

3 番目の手法は、ファイル名以外のものに役立つ可能性が高くなります。ファイル名にコンマが含まれるリスクが大きすぎます。sortが実際に を使用する可能性は低いですgetsubopt()が、その-k2n,2表記法は似ています。

于 2013-10-28T01:57:55.847 に答える