web-dev-qa-db-fra.com

Créer une matrice de base en C (saisie par l'utilisateur!)

J'essaie de demander à l'utilisateur de saisir le nombre de colonnes et de lignes qu'il souhaite dans une matrice, puis de saisir les valeurs dans la matrice ... Je vais lui permettre d'insérer des nombres, une ligne à la fois.

Comment puis-je créer une telle fonction?

#include<stdio.h>
main(){

int mat[10][10],i,j;

for(i=0;i<2;i++)
  for(j=0;j<2;j++){
  scanf("%d",&mat[i][j]);
  } 
for(i=0;i<2;i++)
  for(j=0;j<2;j++)
  printf("%d",mat[i][j]);

}

Cela fonctionne pour entrer les nombres, mais il les affiche tous sur une seule ligne ... Le problème ici est que je ne sais pas combien de colonnes ou de lignes l’utilisateur veut, je ne peux donc pas imprimer% d% d% d dans un forme matricielle ...

Des pensées?

Merci :)

6
NLed

Que diriez-vous de ce qui suit?

Demandez d’abord à l’utilisateur le nombre de lignes et de colonnes, stockez-le dans nrows et ncols (c.-à-d. scanf("%d", &nrows);), puis allouez de la mémoire pour un tableau 2D de taille nrows x ncols. Ainsi, vous pouvez avoir une matrice d'une taille spécifiée par l'utilisateur, et non fixée à une dimension que vous avez codée en dur!

Puis stockez les éléments avec for(i = 0;i < nrows; ++i) ... et affichez-les de la même manière, sauf que vous ajoutez des nouvelles lignes après chaque ligne, c.-à-d.

for(i = 0; i < nrows; ++i)
{
   for(j = 0; j < ncols ; ++j) 
   {
      printf("%d\t",mat[i][j]);
   }
printf("\n");
}
11
Jacob

Vous devez allouer dynamiquement votre matrice. Par exemple:

int* mat;
int dimx,dimy;
scanf("%d", &dimx);
scanf("%d", &dimy);
mat = malloc(dimx * dimy * sizeof(int));

Cela crée un tableau linéaire pouvant contenir la matrice. À ce stade, vous pouvez décider si vous souhaitez accéder à la colonne ou à la ligne en premier. Je suggère de faire une macro rapide qui calcule le décalage correct dans la matrice. 

3
Yann Ramin

C'est ma réponse

#include<stdio.h>
int main()
{int mat[100][100];
int row,column,i,j;
printf("enter how many row and colmn you want:\n \n");
scanf("%d",&row);
scanf("%d",&column);
printf("enter the matrix:");

for(i=0;i<row;i++){
    for(j=0;j<column;j++){
        scanf("%d",&mat[i][j]);
    }

printf("\n");
}

for(i=0;i<row;i++){
    for(j=0;j<column;j++){
        printf("%d \t",mat[i][j]);}

printf("\n");}
}

Je viens de choisir une valeur approximative pour la ligne et la colonne. La ligne ou la colonne sélectionnée ne croise pas la valeur. Je balaie ensuite l'élément de matrice, puis le crée en taille de matrice.

1
TonuSree

besoin d'un 

for(i=0;i<2;i++)
{
  for(j=0;j<2;j++)
  {
     printf("%d",mat[i][j]);
  }
  printf("\n");
}
1
Keith Nicholas
#include<stdio.h>
int main(void)
{  
int mat[10][10],i,j;

printf("Enter your matrix\n");  
for(i=0;i<2;i++)
  for(j=0;j<2;j++)
  {  
    scanf("%d",&mat[i][j]);  
  }  
printf("\nHere is your matrix:\n");   
for(i=0;i<2;i++)    
{  
    for(j=0;j<2;j++)  
    {  
      printf("%d ",mat[i][j]);  
    }  
    printf("\n");  
  }  

}
1
jeff
int rows, cols , i, j;
printf("Enter number of rows and cols for the matrix: \n");
scanf("%d %d",&rows, &cols);

int mat[rows][cols];

printf("enter the matrix:");

for(i = 0; i < rows ; i++)
    for(j = 0; j < cols; j++)
        scanf("%d", &mat[i][j]);

printf("\nThe Matrix is:\n");
for(i = 0; i < rows ; i++)
{
    for(j = 0; j < cols; j++)
    {
        printf("%d",mat[i][j]);
        printf("\t");
    }
    printf("\n");
}

}

0