好きな個数の配列に値を格納する方法【C言語】

好きな個数の配列に値を格納する方法

▷好きな数だけ値を読み込んで要素数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個コピーすることになるので非常に効率が悪い

コメントを残す

あなたのメールアドレスは公開されません。必須項目には印がついています *