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

このQ&Aに関連する最新のQ&A

A 回答 (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の入力に対してエラーチェックを厳重にしないと
ひどいことになると思います~。
    • good
    • 0

C言語上でこのような場合には、配列は使わず


「ポインタ」なるものを使用します。

但し、「ポインタ」の要素数、値などは、
プログラム内部で厳密に管理する必要があります。

「ポインタ」に関しては皆が引っかかる箇所なので
しっかり勉強してください。

余談ですが、C++言語では可能です。
    • good
    • 0

C言語では、配列変数の大きさはコンパイル前に決定しておく必要


があります。ですから、配列変数の大きさを実行時に与えることは
できません。

しかし、malloc() や calloc() 等で、必要な大きさのメモリを実
行時に確保し、ポインタ変数にその先頭アドレスを与えてやれば、
配列と同じように参照することができます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報