入力個数が、実行スタートしてみないと分からない場合、
配列で何個の要素を用意したら分からないので、必要以上に十分な記憶域になる数で用意しなければなりません。
配列は、プログラムを作る時に定数で用意するもので、実行スタート後に変更することができないからです。
このような場合、malloc関数で、必要な記憶域をシステムに要求し、
それで得られたポインタを記憶し、そのポインタを使って配列のようにアクセスします。
そして、その情報が要らなくなった時点で、freeで再び記憶を別の用途で使えるように開放すれば、
メモリを効率よく使えます。
以下で簡単な例を示します。
#include <stdio.h>
#include <stdlib.h> /* malloc利用のためインクルード */
main()
{
int *a;/* 配列の代わり使うポインタ */
int count;/* 使うデータ数 */
int i;
printf("入力数>");
scanf("%d", &count);
a = malloc( count * sizeof(int) ); /* 必要なサイズの記憶域を要求 */
for( i = 0; i < count; i++){
printf("データ入力>");
scanf("%d", a + i );
}
for( i = 0; i < count; i++){
printf("%d番目のデータ:%d\n", i+1 , a[i]);
}
free(a); /* メモリの開放(プロセスが終了する時、開放されるので無くてもよいが・・) */
}
実行例
入力数>6 データ入力>1 データ入力>2 データ入力>3 データ入力>4 データ入力>5 データ入力>6 1番目のデータ:1 2番目のデータ:2 3番目のデータ:3 4番目のデータ:4 5番目のデータ:5 6番目のデータ:6