Programmation C: Initialise un tableau 2D de chiffres 1, 2, 3… etc.

Je ne parviens pas à créer un tableau 2D de taille définie par l’utilisateur, avec les nombres 1, 2, 3.etc

Si l’utilisateur choisit par exemple: a = 2 and b = 2 , le programme produit:

 3 4 3 4 

au lieu de:

 1 2 3 4 

Mon programme ressemble à:

 #include  int main() { int a = 0; int b = 0; int Array[a][b]; int row, column; int count = 1; /*User Input */ printf("enter a and b \n"); scanf("%d %d", &a, &b); /* Create Array */ for(row = 0; row < a; row++) { for(column = 0; column <b; column++) { Array[row][column] = count; count++; } } /* Print Array*/ for(row = 0; row<a; row++) { for(column = 0; column<b; column++) { printf("%d ", Array[row][column]); } printf("\n"); } return 0; } 

 int a, b; 

les variables a et b sont pas initialisées et leur valeur est indéterminée par le langage C

 int Array[a][b]; 

Vous déclarez un tableau de taille [a, b]. Le problème est que a et b sont indéterminés et que les utiliser à ce stade est un comportement indéfini.

 scanf("%d %d", &a, &b); 

vous obtenez les valeurs a et b – mais le Array rest le même!

Solution la plus simple: essayez de mettre la déclaration Array après scanf . Votre compilateur peut le permettre (je pense que C99 est requirejs pour le faire).

Le tableau de longueur variable n’est pas pris en charge dans la norme c89.

int Array[a][b]; est sans signification. Parce que les valeurs de a et b sont inconnues à ce moment-là. alors changez-le en Array[2][2] .

Étant donné que la taille de votre tableau n’est pas connue au moment de la compilation, vous devrez allouer le tableau de manière dynamic après la connaissance de a et b. comme code comme suit:

 int **allocate_2D_array(int rows, int columns) { int k = 0; int **array = malloc(rows * sizeof (int *) ); array[0] = malloc(columns * rows * sizeof (int) ); for (k=1; k < rows; k++) { array[k] = array[0] + columns*k; bzero(array[k], columns * sizeof (int) ); } bzero(array[0], columns * sizeof (int) ); return array; } 

Étant donné que la taille de votre tableau n’est pas connue au moment de la compilation, vous devrez allouer le tableau de manière dynamic après la connaissance de a et b .

Voici un lien qui décrit comment allouer le tableau multidimensionnel (en réalité un tableau de tableaux): http://www.eskimo.com/~scs/cclass/int/sx9b.html

En appliquant l’exemple de code de ce lien, vous pouvez procéder comme suit:

 int **Array; /* Instead of int Array[a][b] */ ... /* Create Array */ Array = malloc(a * sizeof(int *)); for(row = 0; row < a; row++) { Array[row] = malloc(b * sizeof(int)); for(column = 0; column