1

こんにちは、私が行っているプロジェクトがあり、プログラムをコマンドラインから実行し、プログラムで使用されるフラグとファイル名を読み取れるようにする必要があります。

これが私の現在のコードです。フラグを入力せずにコンパイルします。私の GetArgs は何もしないと思います。コードのその部分を手伝ってくれました。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 1024
#define IN 1 /* inside a word */ 
#define OUT 0 /* outside a word */
/* count lines, words, and characters in input */

int numInputArgs;
int idx;
void GetArgs (int argc, char **argv){

for (idx = 1; idx < 4;  idx++) {
    if (strcmp(argv[idx], "-c") == 0) {
        printf("Flag -c passed\n");
        break;
    }
    else if (strcmp(argv[idx], "-w") == 0) {
        printf("Flag -w passed\n");
        break;
    }
    else if (strcmp(argv[idx], "-l") == 0) {
        printf("Flag -l passed\n");
        break;
    }
    else if (strcmp(argv[idx], "-L") == 0) {
        printf("Flag -L passed\n");
        break;
    }
    else {
        printf("Error: unknown flag\n");
        exit(-1);
    }
}
 }// end GetArgs

void lineWordCount ( ) {

int c, nl, nw, nc, state;


    state = OUT; nl = nw = nc = 0; 
    while ((c = getchar()) != EOF) {
            ++nc;

        if (c == '\n')
            ++nl; 

        if (c == ' ' || c == '\n' || c == '\t')
            state = OUT; 

        else if (state == OUT) {
            state = IN; ++nw;
        } 
        printf("%d %d %d\n", nl, nw, nc);
    }
 }// end lineWordCount








 int main(int argc, char **argv){

GetArgs(argc, argv);
lineWordCount();
printf("Hello");

//fclose( src );
}
4

2 に答える 2

4

getopt()システムで使用可能な場合は、@ Joachimで説明されているような標準関数を使用するか、自分でコーディングすることができます。複雑なコマンドライン構文がある場合は、getopt()より適している可能性があります。限られたフラグのセットのみをチェックする必要がある場合は、次のように自分でコーディングする方が簡単な場合があります。

void GetArgs (int argc, char **argv){
   int idx = 0;

   for (idx = 1; idx < argc;  idx++) {
       if (strcmp(argv[idx], "-a") == 0) {
          printf("Flag -a passed\n");
       } else if (strcmp(argv[idx], "-b") == 0) {
          printf("Flag -b passed\n");
       } else if (strcmp(argv[idx], "-c") == 0) {
          printf("Flag -c passed\n");
       } else {
          printf("Error: unknown flag %s\n");
       }
    }
}
于 2012-09-18T05:57:52.630 に答える
0

argtable2ライブラリを使用することをお勧めします。長く使っていますが、とても良いと思います。それがどれほど強力で使いやすいかを確認するためのチュートリアルがあります。

于 2012-09-18T06:02:43.787 に答える