problème sur les fichiers (ouverture, fermeture, etc.) [résolu]

problème sur les fichiers (ouverture, fermeture, etc.) [résolu] - C++ - Programmation

Marsh Posté le 15-10-2002 à 17:40:49    

bonjour
 
J'ai dans un fichier *.txt (ici mnt.txt) une suite d'entiers séparés par des espaces ou des retour-chariots.
J'aimerais ouvrir le fichier et récupérer les entiers qui sont dedans afin de les mettre dans une matrice (pour pouvoir ainsi les manipuler).
Le prog. compile mais à l'éxécution j'ai une matrice remplie de 0.
Il y a quelquechose qui m'échappe dans la fonction mnt.

Code :
  1. /*==============================
  2. Travaux pratiques 2, exercice 1
  3. ===============================*/
  4. #include <stdio.h>
  5. #define TAILLE 12
  6. typedef int matrice[TAILLE][TAILLE];
  7. void mnt(matrice tab)
  8. {
  9. FILE *f;
  10. int i;
  11. int j;
  12. if ((f=fopen("mnt.txt","rt" ))==NULL)
  13.  printf("Ouverture non correcte.\n" );
  14. else
  15. {
  16.  for (i=1;i<TAILLE-2;i++)
  17.   for (j=1;j<TAILLE-2;j++)
  18.   {
  19.    if (fscanf(f,"%rd",&tab[i][j])==-1)
  20.     printf("erreur.\n" );
  21.   }
  22. }
  23. fclose(f);
  24. }
  25. int main(void)
  26. {
  27. matrice tab;
  28. int i;
  29. int j;
  30. for (i=0;i<TAILLE;i++)
  31.  for (j=0;j<TAILLE;j++)
  32.   tab[i][j]=0;
  33. mnt(tab);
  34. for (i=0;i<TAILLE;i++)
  35. {
  36.  for (j=0;j<TAILLE;j++)
  37.   printf("%d ",tab[i][j]);
  38.  printf("\n" );
  39. }
  40. return(0);
  41. }


Message édité par gobbaf le 15-10-2002 à 18:09:38
Reply

Marsh Posté le 15-10-2002 à 17:40:49   

Reply

Marsh Posté le 15-10-2002 à 17:49:55    

c'est quoi "rt" pour le mode de lecture. c'est quoi le "%rd" ?


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 15-10-2002 à 17:53:45    

y'avait des erreurs (elles sont écrites en rouge)
 

Code :
  1. void mnt(matrice tab)
  2. {
  3. FILE *f;
  4. int i;
  5. int j;
  6. if ((f=fopen("mnt.txt","rt" ))==NULL)
  7.  printf("Ouverture non correcte.\n" );
  8. else
  9. {
  10.  for (i=1;i<TAILLE-1;i++)
  11.   for (j=1;j<TAILLE-1;j++)
  12.   {
  13.    if (fscanf(f,"%d",&tab[i][j])==-1)
  14.     printf("erreur.\n" );
  15.   }
  16. }
  17. fclose(f);
  18. }

Reply

Marsh Posté le 15-10-2002 à 17:55:56    

je connais toujours pas le "rt" et pourquoi par tu de 1 dans tes boucles?


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 15-10-2002 à 17:56:16    

Taz@PPC a écrit a écrit :

c'est quoi "rt" pour le mode de lecture. c'est quoi le "%rd" ?




rt pour le mode de lecture c'est 'r' pour lire et 't' pour dire qu'on a un fichier de texte composé de caractères ASCII
 
merci pour le "%rd" c'était bien "%d" pour afficher l'entier
(il a compilé quand même, c'est bizarre).
 :jap:

Reply

Marsh Posté le 15-10-2002 à 17:57:43    

le "t" est pas standard du tout.


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 15-10-2002 à 17:58:02    

Taz@PPC a écrit a écrit :

je connais toujours pas le "rt" et pourquoi par tu de 1 dans tes boucles?




je pars de 1 et finis à TAILLE-1
parce que je dois mettre des 0 en bordure de matrice

Reply

Marsh Posté le 15-10-2002 à 18:00:57    

gobbaf a écrit a écrit :

 
merci pour le "%rd" c'était bien "%d" pour afficher l'entier
(il a compilé quand même, c'est bizarre).




en C, tout compile :D

Reply

Marsh Posté le 15-10-2002 à 18:04:56    

oki. chez moi tout fonctionne parfaitement.


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 15-10-2002 à 18:07:14    

Taz@PPC a écrit a écrit :

le "t" est pas standard du tout.




 :??:  
j'ai mon cours sous les yeux :
 
"fonction fopen(const char *nom,const char *mode)
le paramètre mode est une chaîne de caractères qui indique le mode d'accès, et qu idoit être composée de deux caractères :
- le premier caractère indique si le fichier doit être ouvert en mode lecture (r pour read), en écriture (w pour write) ou en écriture en fin de fichier (a pour append).
- le deuxième carctère indique si le fichier doit être considéré comme un fichier de texte, composé de caractères ASCII (t pour text) ou comme un fichier binaire (b pour binary) quant aux opérations de lecture ou d'écriture qui y seront faites."
 
je fais du C ANSI (peut-être que ça explique, j'en sais rien du tout).

Reply

Marsh Posté le 15-10-2002 à 18:07:14   

Reply

Marsh Posté le 15-10-2002 à 18:11:52    

ben c'est pas du C ANSI désolai.
 

Citation :

K&R page 158, 7.4
 
Les modes autorisés sont la lecture ("r" ), l'ecriture ("w" ) et l'ajout ("a" ). Certains systèmes font la distinction entre les fichiers en mode texte ou binaire; pour ces derniers, il faut ajouter un "b" à la fin de la chaîne de caractères de mode.


 
"Certains systèmes" désigne par exemple Windows


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 15-10-2002 à 18:13:50    

Taz@PPC a écrit a écrit :

ben c'est pas du C ANSI désolai.
 

Citation :

K&R page 158, 7.4
 
Les modes autorisés sont la lecture ("r" ), l'ecriture ("w" ) et l'ajout ("a" ). Certains systèmes font la distinction entre les fichiers en mode texte ou binaire; pour ces derniers, il faut ajouter un "b" à la fin de la chaîne de caractères de mode.


 
"Certains systèmes" désigne par exemple Windows




 
merci faudra que le dise à mes profs
 
ça marche aussi chez moi  
 :)

Reply

Marsh Posté le 15-10-2002 à 18:16:13    

j'ai vérifé aussi sur internet: le mode "t" existe mais n'est pas standard bien qu'il soit décrit comme tel dans certains manuels.


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 15-10-2002 à 18:21:58    

merci  
donc c'est pas standard
le t y est donc par défaut.
Si l'on travaille sur des fichiers binaires il faut bien mettre le b?

Reply

Marsh Posté le 15-10-2002 à 18:23:25    

gobbaf a écrit a écrit :

merci  
donc c'est pas standard
le t y est donc par défaut.
Si l'on travaille sur des fichiers binaires il faut bien mettre le b?




 
oui c'est une maniere portable meme si certains systemes n'en ont pas besoin


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 15-10-2002 à 18:28:26    

merci
j'ai encore appris des choses aujourd'hui.

Reply

Marsh Posté le 15-10-2002 à 18:30:44    

:hello:


---------------
du bon usage de rand [C] / [C++]
Reply

Sujets relatifs:

Leave a Replay

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