プログラムが実行される前に、プログラムが2つの整数入力を読み取るようにするにはどうすればよいですか?出力を次のようにしたいのですが、xとyは入力した変数です(Cygwinを使用しています)。
$ ./a x y
xとyの積
xとyの合計
int main(int argc, char *argv[])
を使用しました。割り当てようとしましたargv[2]
からx
およびargv[3]
からy
までですが、プログラムをコンパイルすると、代入はキャストせずにポインタから整数を作成すると表示されます。これはどういう意味ですか、どうすれば修正できますか?
C言語を想定:
[魚を提供するのではなく、魚を教えることを試みる。幸運を!]
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!
}
お役に立てれば。
まず、Cプログラムを次のように実行すると、
./a x y
次に、aはargv [0]、xはargv [1]、yはargv [2]です。これは、C配列が0ベースであるためです(つまり、配列の最初の項目には0のインデックスが付けられます)。
Argvが文字列ポインタの配列(または、ARGument値の配列と考えるかもしれませんが、常にARGument Vectorと考えていました)であることを理解してください。したがって、文字列を整数に変換する必要があります。幸い、CにはASCIIを整数に変換するライブラリ関数があります。stdlib.hのドキュメントをご覧ください。
幸運を!
私のコードは次のようになります。
#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);
}
コマンドライン引数では、char * argv []は文字列型です。それを整数に変換する必要があります。これは型キャストによって行われますが、oopではこれをatoi関数(メソッド)によって行います。これは、typecasting(1つのデータ型を別のデータ型に変換する方法を意味します)のように機能します。