Lecture d'un fichier de valeurs

Lecture d'un fichier de valeurs - C - Programmation

Marsh Posté le 11-06-2004 à 21:17:30    

Salut les gens,  
 
On a un petit souci de lecture de fichier, voilà la gueule du fichier :

Code :
  1. -1 1 200
  2. -1 1 200
  3. 0 0.327195 0.61837 0.841471 0.971938 0.995408 0.909297 0.723086 0.457273 0.14112


 
Etc .. les valeurs continuent, il y en 40 000.
 
Voilà le code censé les lire :
 

Code :
  1. pas calculdata(char filename[])
  2. {
  3.   int i,j,k;
  4.   FILE  *monfichier;
  5.   int xmin,xmax,ymin,ymax;
  6.   pas nb;
  7.  
  8.   monfichier = fopen(filename, "r" );
  9.   if (monfichier == NULL) {
  10.     printf ("Impossible d'ouvrir le fichier '%s'\n", filename);
  11.     exit(1);
  12.   }
  13.  
  14.   fscanf ( monfichier, "%d",&xmin);
  15.   fscanf ( monfichier, "%d",&xmax);
  16.   fscanf ( monfichier, "%d",&nb.nbpasx);
  17.   fscanf ( monfichier, "%d",&ymin);
  18.   fscanf ( monfichier, "%d",&ymax);
  19.   fscanf ( monfichier, "%d",&nb.nbpasy);
  20.   printf("%d %d %d %d %d %d\n",xmin, xmax, nb.nbpasx,ymin,ymax,nb.nbpasy);
  21.   double data[nb.nbpasx*nb.nbpasy];
  22.  
  23.   for ( i = 0 ; i < nb.nbpasx ; i ++ ){
  24.     for ( j = 0 ; j < nb.nbpasy ; j ++ ){
  25.       k = i* nb.nbpasy +j;
  26. /*       printf("%d\n",k); */
  27.       fscanf ( monfichier, "%lf",&data[k]);
  28.       printf("%lf\n" ,data[k]);
  29.       fclose(monfichier);
  30.      
  31. /*       printf("%d %d -> %g\n",i, j, data[k]); */
  32.     }
  33.   }
  34.   return nb;
  35. }


 
Voilà .. je suis un gros newbie en C et c'est un mini-projet à la con, mais ça bug et on trouve pas pourquoi, il lit les valeurs n'importe comment.
Si vous voyez un bug évident là-dedans, on est preneurs.

Reply

Marsh Posté le 11-06-2004 à 21:17:30   

Reply

Marsh Posté le 11-06-2004 à 21:36:57    

double data[nb.nbpasx*nb.nbpasy]; n'est pas valide en C ANSI
 
ça lit n'importe comment ? t'as qu'à pas fermer le fichier après chaque ligne
 
 
   fscanf ( monfichier, "%d",&xmin);
      fscanf ( monfichier, "%d",&xmax);
      fscanf ( monfichier, "%d",&nb.nbpasx);
      fscanf ( monfichier, "%d",&ymin);
      fscanf ( monfichier, "%d",&ymax);
      fscanf ( monfichier, "%d",&nb.nbpasy);
 
-> un seul fscanf :o dont tu __dois__ regarder la valeur de retour

Reply

Marsh Posté le 12-06-2004 à 14:33:02    

En fait les premiers fscanf doivent lire les valeurs -1, 1 et 200 qui sont des paramètres pour ensuite dessiner une image de 200px*200px
Ensuite on lit les valeurs qu'on va attribuer (on envoie vers une fonction qui traduit en niveau de gris) à chaque pixel (les 40 000 valeurs du fichier).
 
Faudrait donc fermer le fichier uniquement à la fin ? Je vais prévenir les auteurs, on va vior ce que ça donne. Merci déjà pour la suggestion ;)

Reply

Marsh Posté le 12-06-2004 à 14:43:46    

Hmm après test il semblerait que ça soit beaucoup mieux :lol:
 
Rétrospectivement, j'aurais du voir la connerie tout de suite .. Un an sans coder ça vide le cerveau.  
 
Merci bien !!

Reply

Sujets relatifs:

Leave a Replay

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