Remplir un tableau à partir d'un fichier

Remplir un tableau à partir d'un fichier - C - Programmation

Marsh Posté le 16-02-2010 à 23:09:41    

Bonjour,
J'ai un fichier qui contient
>>
//commentaire
abba*
a b c e
9 2 << taille du tableau
2 2
2 1
1 2
2 2
2 3
4 5
5 1
4 7
8 6
1 3 4
<<
 
 
La 4ème ligne représente la taille du tableau
Le reste des lignes du ligne n°5 jusqu'à ligne n°13 sont
les valeurs à remplir dans le tableau  :whistle:  
 
Je veux lire ces entiers et les mettre dans le tableau,
mais j'ai pas arriver et surtout mettre les bonnes boucles
convenablement pour cette opération, je crois que le programme
entre dans une boucle infini  :heink: où l'exécution du corps des boucles entraîne
un erreur et l'arrêt de l'exécution  :pfff:  
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.     FILE *fichier = NULL;
  6.     fichier = fopen("d:\\a.txt", "r" );
  7.     if (fichier != NULL)
  8.     {
  9.     char ligne[32];
  10.         char space,un_char_de_ligne=' ';
  11.         int convertion,m=0,n=0,f=0,nb_line_tab,
  12.         nb_col_tab,nb_line_fichier = 0,i,
  13.         tab_t[nb_line_tab][nb_col_tab];
  14.         while(nb_line_fichier<4)
  15.         {
  16.             nb_line_fichier++;
  17.             /* lecture de la premiere ligne */
  18.             fgets (ligne, sizeof ligne, fichier);
  19.             /* Affichage de la premiere ligne */
  20.         }
  21.         nb_line_tab=ligne[0] - '0';
  22.         nb_col_tab=ligne[2] - '0';
  23.         int j;
  24.         //  allocation dynamique de tab_t
  25.         tab_t = malloc(nb_line_tab* sizeof(int*));
  26.          for(j=0;j<nb_line_tab;j++)
  27.              tab_t[j]=malloc(nb_col_tab * sizeof(int));
  28.                 printf("\nallocation tab des trans" );
  29.         //fin allocation
  30.         printf("\ndimension de tab des trans [%d][%d] ", nb_line_tab,nb_col_tab);
  31.     //operation
  32.             puts("" );
  33.         for(i=nb_line_fichier ;i<=3+nb_line_tab;i++)
  34.             {
  35.       fgets (ligne, sizeof ligne, fichier);  // on lit une ligne à partir du ligne n°5
  36.             printf("trans %s", ligne);
  37.                 while( f<(nb_col_tab+nb_col_tab/2) && n<nb_col_tab && m<nb_line_tab )
  38.                     {
  39.                         un_char_de_ligne=ligne[f];
  40.                             if (un_char_de_ligne!=space)  // si un char de ligne != " "
  41.                                 {
  42.                                     convertion=un_char_de_ligne - '0';  //char converti en int
  43.                               tab_t[m][n]=convertion; // mettre le int ( char converti) dans le tab
  44.                                     n++;  // ++ colonne
  45.                                 }
  46.                         f++;   // ++ dans ligne pour le char suiv
  47.                     }
  48.                     n=0;    // revenir au colonne 0
  49.                     m++;    //passer au ligne suiv
  50.                 }
  51.         fclose(fichier);
  52.     }
  53.     return 0;
  54. }


 
 
 
 
S'il vous plaît vous pouvez m'aidez corriger ce code,
ou vous pouvez me renseigner sur une autre solution.
Merci d'avance.
Cordialement,

Reply

Marsh Posté le 16-02-2010 à 23:09:41   

Reply

Marsh Posté le 17-02-2010 à 11:55:43    

Alors je suis pas un pro du C mais quelques remarques en vrac:
-Il me semble que ta déclaration de tab_t est incorrecte  
-la façon dont tu convertis une lettre en nombre ne marche que parce que tes nombres sont composé d'une lettre -> et si le tableau comporte des valeurs >= 10?
-Tu ne fais pas de contrôle d'erreur sur la lecture du fichier (ai je bien lu un nombre, suis je à la fin du fichier?)
-il y a des fonctions pour lire des nombres et d'autre alors pour convertir une chaine de caractère en nombre


Message édité par breizhbugs le 17-02-2010 à 12:02:46
Reply

Sujets relatifs:

Leave a Replay

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