web-dev-qa-db-ja.com

コマンド引数として数値を読み取る方法は?

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

$ ./a x y

xとyの積

xとyの合計

int main(int argc, char *argv[])を使用しました。割り当てようとしましたargv[2]からxおよびargv[3]からyまでですが、プログラムをコンパイルすると、代入はキャストせずにポインタから整数を作成すると表示されます。これはどういう意味ですか、どうすれば修正できますか?

17
Kaity

C言語を想定:

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

[魚を提供するのではなく、魚を教えることを試みる。幸運を!]

44
Paul Beckingham

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!
 }

お役に立てれば。

22
Mike

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

./a x y

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

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

幸運を!

5
PTBNL

私のコードは次のようになります。

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

int main(int argc, char *argv[])
{
    // argc is number of arguments given including a.out in command line
    // argv is a list of string containing command line arguments
    int total = 0;
    int i;
    char *value;
    for(i = 1; i < argc; i++)
    {
        // The integers given is read as (char *)
        value = argv[i];
        printf("Command line index: %d value: %s in ascii: %d\n", i, value, *value);

        // Convert ascii to integer.
        // atoi function is defined in stdlib.h
        total += atoi(value);
    }
    // .2f limits the decimals to two digits after '.'
    printf("Total of given integers is %d\n", total);
}

enter image description here

3
theBuzzyCoder

コマンドライン引数では、char * argv []は文字列型です。それを整数に変換する必要があります。これは型キャストによって行われますが、oopではこれをatoi関数(メソッド)によって行います。これは、typecasting(1つのデータ型を別のデータ型に変換する方法を意味します)のように機能します。

0