3

端末から呼び出すことができるオプションを使用して C プログラムを作成する方法を知りたいです。
例:Person.c

#include <stdio.h>
void main ()
{
     char option;

     if(option == 'f') printf("First Name");
     else if(option == 'l') printf("Last Name");
     else printf("Full Name");
}  

でコンパイルします

cc Person.c -o Person

目的 :
端末からプログラム オプションにアクセスしたい。
例 :

./Person -f

出力: 名

4

7 に答える 7

10

void main ()間違っています。これを本からコピーした場合は、その本を捨ててください

argc は引数の数に設定さint main(int argc, char **argv)れ、argv[1] .... argv[argc-1] は引数文字列です (argv[0] はプログラムの名前です)。

于 2012-06-01T04:50:49.133 に答える
4

ここに私の$ 0.02があります:

#include <stdio.h>
#include <string.h>

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

     if (argc != 2) {
       printf ("USAGE: ./Person [-f|-l]\n");
       return 1;
     }
     if (strcmp (argv[1], "-f") == 0) {
       printf("First Name");
     }
     else if (strcmp (argv[1], "-l") == 0)
       printf("Last Name");
     }
     else {
       printf ("Unknown argument\n");
       return 1;
     }
     return 0;
}

重要なポイント:

1) C では、文字列だけを比較することはできません ("aaa" == "bbb" など)。「strcmp()」(「文字列の比較」) などの特別なライブラリ関数が必要です。

2) ライブラリ関数を使用するには、ヘッダーを #include する必要があります (「printf()」の場合は「stdio.h」、「strcmp()」の場合は「string.h」など)。「man」を使用して、必要なヘッダーを見つけることができます...または関連する呼び出しをグーグルで検索するだけです(「google strcmp」は「man strcmp」と同じ結果を与えるはずです)

3) プログラムの戻り値を使用して「成功」または「失敗」を示すことは、一般的な規則です。「0」は慣例により、通常「成功」を意味します。

4) 最後に、目的のために、「argc」と「argv」を使用してコマンドライン引数にアクセスすることが不可欠です。

5) 上部の "if (argc != 2)" は、少なくとも 1 つのコマンド ライン引数を入力したことを保証します (引数 "0" はプログラム自体の名前です)。持っていない引数を読み取ろうとすると (「配列の末尾を読み取ろうとする」) クラッシュが発生する可能性があるため、これは重要です ;)

「お役に立てば幸いです!

于 2012-06-01T04:56:48.897 に答える
3

次の入力で main を呼び出します。

int main ( int argc, char **argv)

argc は引数の数で、argv はコマンド ライン引数の配列です。argv の最初の引数はプログラム名であることに注意してください。

于 2012-06-01T04:51:44.560 に答える
2

メインプロトタイプを次のように変更してください

int main(int argc, char *argv[])

質問で尋ねられたオプションは、上記のように入力引数を使用してメイン関数に渡すことができます。

argc パラメーターは、端末を介して渡された入力の数を示し、argv は各入力を char * の配列として提供します。最初の入力 (argv[0]) は、デフォルトで実行可能ファイルのフル パスのファイル名になり、残りの入力はそれに続くことに注意してください。

http://www.cprogramming.com/tutorial/c/lesson14.html - このチュートリアルも役に立ちます。

于 2012-06-01T04:50:36.190 に答える
2

オプションを与えることをCに伝える必要があります

int main(int argc, char **argv)

argc は引数の数であり、argv は呼び出す引数です

それでは ./Person -f

あなたはそれを伝える必要があります

if (strncmp(argv[i],"-f",1) == 0) {
于 2012-06-01T04:50:39.787 に答える
2

関数正しい形式mainは次のとおりです。

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

}

次にargv、コマンド ライン引数を保持します。

int main(int argc, char **argv) {
    for(int i = 0; i < argc; ++i) {
        printf("arg %d is %s", i, argv[i]);
    }
    return 0; // indicates that the program completed successfully
}
于 2012-06-01T04:51:18.923 に答える
2

また、そこにある解析ライブラリのいくつかを確認する必要があります。多くの人が、コマンド ライン オプションを解析するための優れたライブラリを作成しているため、オプションを検証するすべての作業を繰り返す必要はありません。ほとんどは非常に使いやすいです。

于 2012-06-01T04:53:01.170 に答える