22

プログラムが実行される前に、プログラムが任意の 2 つの整数入力を読み取る場所を作成するにはどうすればよいですか? x と y が入力された任意の変数である (私は Cygwin を使用しています)。

$ ./axy

x と y の積

x と y の合計

使用しint main(int argc, char *argv[])ました。と に代入しようとしましargv[2]xargv[3]yプログラムをコンパイルすると、代入はキャストなしでポインターから整数になると表示されます。これは何を意味し、どうすれば修正できますか?

4

7 に答える 7

56

C 言語を想定すると、次のようになります。

  • コマンド ライン引数は、argv 配列 (argv[1]、argv[2] など) にあります。
  • 文字列引数を整数に変換するには、atoi 関数を使用します。
  • printf関数で出力できます。

【魚を提供するのではなく、釣り方を教えようとする。幸運を!]

于 2009-02-07T06:12:07.767 に答える
29

bash を使用していると仮定すると、これらの引数には $1、$2 などを使用できます。ただし、C を使用している場合、コードは次のようになります。

#include <stdio.h>
#include <stdlib.h>

main(int argc, char *argv[]) {
    if(argc<=1) {
        printf("You did not feed me arguments, I will die now :( ...");
        exit(1);
     }  //otherwise continue on our merry way....
     int arg1 = atoi(argv[1]);  //argv[0] is the program name
                                //atoi = ascii to int
     //Lets get a-crackin!
 }

お役に立てれば。

于 2009-02-07T06:14:59.117 に答える
5

まず、C プログラムを次のように実行すると、

./axy

C 配列は 0 ベースであるため (つまり、配列の最初の項目は 0 でインデックス付けされるため)、a は argv[0]、x は argv[1]、y は argv[2] です。

argv は、文字列ポインターの配列 (または、ARGument 値の配列と考えるかもしれませんが、私は常に ARGument ベクトルと考えてきました) であることを理解してください。したがって、文字列を整数に変換する必要があります。幸いなことに、C には ASCII を整数に変換するライブラリ関数があります。stdlib.h のドキュメントを見てください。

幸運を!

于 2009-02-07T08:01:00.947 に答える