• 締切済み

C言語のプログラムで配列について教えてください

配列の要素の数をscanf文で入力するためにはどうしたらいいのでしょうか。 x[N]のNの部分です。

みんなの回答

  • y_oku
  • ベストアンサー率62% (25/40)
回答No.3

扱うのが、例えばintの配列ならば、 ------------------------------------------------------- #include<stdio.h> /* printf,scanfとか */ #include<stdlib.h> /* mallocとか */ int main(void){ int i, nb; int *arr=NULL; /* 配列の数入力とか */ printf("nb? >"); scanf("%d", &nb); printf("nb=%d\n", nb); /* メモリ割り当て */ arr = malloc(nb * sizeof(int)); if(!arr){ fprintf(stderr, "can't allocate.\n"); exit(1); } /* 配列の要素入力とか */ for(i=0; i<nb; i++){ printf("arr[%d]? >", i); scanf("%d", &arr[i]); } /* 結果表示 */ for(i=0; i<nb; i++){ printf("arr[%d]=%d\n", i, arr[i]); } } ------------------------------------------------------- みたいにしてやればよいと思いますが、 ただし、scanfの入力に対してエラーチェックを厳重にしないと ひどいことになると思います~。

すると、全ての回答が全文表示されます。
  • selenity
  • ベストアンサー率41% (324/772)
回答No.2

C言語上でこのような場合には、配列は使わず 「ポインタ」なるものを使用します。 但し、「ポインタ」の要素数、値などは、 プログラム内部で厳密に管理する必要があります。 「ポインタ」に関しては皆が引っかかる箇所なので しっかり勉強してください。 余談ですが、C++言語では可能です。

すると、全ての回答が全文表示されます。
回答No.1

C言語では、配列変数の大きさはコンパイル前に決定しておく必要 があります。ですから、配列変数の大きさを実行時に与えることは できません。 しかし、malloc() や calloc() 等で、必要な大きさのメモリを実 行時に確保し、ポインタ変数にその先頭アドレスを与えてやれば、 配列と同じように参照することができます。

すると、全ての回答が全文表示されます。

関連するQ&A