好きな個数の配列に値を格納する方法
▷好きな数だけ値を読み込んで要素数10の配列に格納
#include <stdio.h>
#define MAX 10
int main(void) {
int i;
int a[MAX];
int cnt = 0;
int retry;
printf("整数を入力してください。\n");
do {
printf("%d個の整数:", cnt + 1);
scanf("%d", &a[cnt++ % MAX]);
printf("続けますか?(Yes…1/No…0):");
scanf("%d", &retry);
} while (retry == 1);
i = cnt - MAX;
if (i < 0) {
i = 0;
}
for (; i < cnt; i++) {
printf("%2d個目:%d\n", i + 1, a[i % MAX]);
}
return 0;
}
10個の配列を用意し11回目以降に値が入力された場合、剰余演算子%を利用することで要素を順に格納していく。
▷好きな数だけ値を読み込んで要素数10の配列に格納(悪い例)
#include <stdio.h>
#define MAX 10
int main(void) {
int i;
int a[MAX];
int cnt = 0;
int retry;
printf("整数を入力してください。\n");
do {
if (cnt >= MAX) {
for (i = 0; i < MAX - 1; i++) {
a[i] = a[i + 1];
}
}
printf("%d個目の整数:", cnt + 1);
scanf("%d", &a[cnt < MAX ? cnt : MAX - 1]);
cnt++;
printf("続けますか?(Yes…1/ No…0):");
scanf("%d", &retry);
} while (retry == 1);
if (cnt <= MAX) {
for (i = 0; i < cnt; i++) {
printf("%2d個目:%d\n", i + 1, a[i]);
}
}
else {
for (i = 0; i < MAX; i++) {
printf("%2d個目:%d\n", cnt - MAX + 1 + i, a[i]);
}
}
return 0;
}
10個の配列を用意し11回目に値が入力された場合、要素数1~9の配列の値を要素数0~8へコピーし新しく入力された値を要素数9の配列へ格納する。
用意した配列以上の入力があった場合、これを繰り返す。
※1000個の配列の場合では999個コピーすることになるので非常に効率が悪い