[C] Ecrire le contenu d'une matrice dans un fichier

Ecrire le contenu d'une matrice dans un fichier [C] - C - Programmation

Marsh Posté le 07-12-2004 à 22:26:36    

Code :
  1. #define taille 5
  2.     int **matrice;
  3.     matrice = (int**)malloc(sizeof(int)*taille);
  4.     /* Initialisation */ 
  5.     for (i=0; i<taille; i++)
  6.     {
  7.         matrice[i] = (int*)malloc(sizeof(int)*taille);
  8.         for (j=0; j<taille; j++)
  9.                 matrice[i][j] = rand()/1000;
  10.     }   
  11.     /* Génération du fichier */
  12.     fichier = fopen("fichier.txt","w" );
  13.     if (fichier == NULL) printf("Erreur lors de la création du fichier" );
  14.     for (i=0; i<taille; i++)
  15.     { 
  16.         for (j=0; j<taille; j++)
  17.          {
  18.              fwrite(&(matrice[i][j]), sizeof(int), 1, fichier);
  19.              fwrite(" ", sizeof(int), 1, fichier);
  20.          }       
  21.     }


 
 
VOila, dans l'idéal je voudrai afficher chaque ligne de la matrice sur une ligne dans le fichier, les valeurs étaient séparées par des espaces.
 
Le problème vient de la ligne 21, apparement &(matrice[i][j]) n'est pas valide.
 
J'ai essayé matrice[i][j] sans succès :(


Message édité par compuman101 le 07-12-2004 à 22:28:21

---------------
Comparez DVD Vierges, Graveurs de DVD et Boutiques en ligne
Reply

Marsh Posté le 07-12-2004 à 22:26:36   

Reply

Marsh Posté le 07-12-2004 à 23:55:30    

Ben si tu fais fwrite(&(matrice[i][j]), sizeof(int), 1, fichier), tu ecrit la valeur binaire qui se trouve dans ta matrice... Alors que j'imagine que tu veux ecrire sa representation decimale. Utilises fprint.
 
Et puis une note en passant : sizeof (int) n'est pas forcement egal a sizeof (int *)...

Reply

Marsh Posté le 08-12-2004 à 20:13:22    

compuman101 a écrit :


<snip>
Le problème vient de la ligne 21, apparement &(matrice[i][j]) n'est pas valide.


Ce code ne compile pas pour de nombreuses raisons. Il serait préférable que tu postes du code complet pour qu'on soit dans les mêmes conditions que toi...
 
Après réparations, ce code (à lire avec soin. Poser des questions si nécessaire):

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #define taille 5
  4. int main (void)
  5. {
  6.    int **matrice = malloc (sizeof *matrice * taille);
  7.    if (matrice != NULL)
  8.    {
  9.       /* Initialisation */
  10.       {
  11.          int i;
  12.          for (i = 0; i < taille; i++)
  13.          {
  14.             int j;
  15.             matrice[i] = malloc (sizeof *matrice[i] * taille);
  16.             for (j = 0; j < taille; j++)
  17.             {
  18.                matrice[i][j] = rand () / 1000;
  19.             }
  20.          }
  21.       }
  22.       /* Generation du fichier */
  23. #define FNAME "fichier.txt"
  24.       {
  25.          FILE *fichier = fopen (FNAME, "w" );
  26.          if (fichier == NULL)
  27.          {
  28.             perror (FNAME);
  29.          }
  30.          else
  31.          {
  32.             int i;
  33.             for (i = 0; i < taille; i++)
  34.             {
  35.                int j;
  36.                for (j = 0; j < taille; j++)
  37.                {
  38.                   fprintf (fichier, "%5d", matrice[i][j]);
  39.                }
  40.                fprintf (fichier, "\n" );
  41.             }
  42.          }
  43.       }
  44.       /* Liberation de la matrice */
  45.       {
  46.          int i;
  47.          for (i = 0; i < taille; i++)
  48.          {
  49.             free (matrice[i]), matrice[i] = NULL;
  50.          }
  51.          free (matrice);
  52.       }
  53.    }
  54.    system ("pause" );
  55.    return 0;
  56. }


produit le fichier "fichier.txt" contenant


    0    0   10    1   11
    7   17    6   22   31
    9   14    3   22   18
    1    5   26   22   25
   27   31    7   13   31


et il libère la mémoire correctement...


Message édité par Emmanuel Delahaye le 08-12-2004 à 20:30:58

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed