0

行列と関数を使用して 0 から 20 までの乱数を入力し、値を画面に表示する学校の演習を行っていますが、最初の関数が終了した後、行列のサイズを格納する変数の値が変更されます、参照によって渡されない場合でも、常に 0 から 20 の間の数値であるため、これは乱数に関連しています。これは、行列のサイズが 3x4 または 4x3 よりも大きい場合 (4x4 以上など) にのみ発生します。

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

void creaMatrix(int base, int height, int matrix[base][height]){
  for (int i = 0; i < base; i++) {

    for (int j = 0; j < height; j++) {

      matrix[i][j] = rand()%21;

    }
  }
}

void visualizzaMatrix(int base, int height, int matrix[base][height]){
  for (int i = 0; i < base; i++) {

    for (int j = 0; j < height; j++) {

      printf("%d\t",matrix[i][j]);

    }

    printf("\n");

  }
}

int main(int argc, char const *argv[]) {
  int n = 0 , m = 0;
  int matrix[n][m];

  srand((unsigned)time(NULL));

  printf("base:\n");
  scanf("%d",&n);
  printf("height:\n");
  scanf("%d",&m);

  creaMatrix(n,m,matrix);
  printf("n: %d m: %d\n",n, m); // here n and m change value for some reason
  visualizzaMatrix(n,m,matrix);
  return 0;
}
4

0 に答える 0