Tom's Guide > Forum > Programmation > C : la fonction de chargement ne marche pas
Mot :    Pseudo :           
 

Bonjours,
je cherche a écrire une fonction qui chargerait le contenu d'un fichier texte dans un tableau a double entrée [15][15].
toutefois, je n'arrive pas a la faire et jusqu'a présent personne n'a su me dire ce qui était faux.
elle charge un fichier dont les info sont mise a la suite sans passer a la ligne.
voici cette fameuse foutue fonction :

Code :
  1. void chargerCarte(char tableauJeu[][NB_CASE])
  2. {
  3.     FILE *fichier = NULL;
  4.     long i=0,j=0;
  5.     fichier = fopen("niveau.txt", "r" );
  6.     if (fichier != NULL)
  7.     {
  8.         do
  9.         {
  10.             printf("[%ld][%ld]  ", i, j);//m'as parmis de voir que le tableau était corectement parcouru
  11.             if(j>13)//j ne doit pas dépasser 14 (15eme case)
  12.             {
  13.                 j=0;
  14.                 i++;
  15.             }
  16.             tableauJeu[i][j] = fgetc(fichier);
  17.             //printf("%c", tableauJeu[i][j]);
  18.             j++;
  19.         }while(tableauJeu[i][j] != EOF && i<15);
  20.     }



et voici, ce qui pourra vous aider la fonction d'enregistrement, qui elle est fonctionnelle (vérifié avec le .txt ;) )

Code :
  1. void sauvegarderCarte(char tableauJeu[][NB_CASE])
  2. {
  3.     FILE *fichier = NULL;
  4.     long i,j;
  5.     fichier = fopen("niveau.txt", "w" );
  6.     if (fichier != NULL)//si le fichier s'ouvre corectement
  7.     {
  8.         for(i=0;i<NB_CASE;i++)//double boucle
  9.         {
  10.             for(j=0;j<NB_CASE;j++)
  11.             {
  12.                 fprintf(fichier, "%ld", tableauJeu[j][i]);//on copie le contenu du tableau dans un fichier texte
  13.             }
  14.         }
  15.         fclose(fichier);
  16.     }
  17. }



voila je vous remerçie d'avance de votre aide...

------------------------------ si dieu existe et a inventé la bite, alors il a inventé la masturbation qui va avec. Qu'il ne vienne donc pas se plaindre...
Pour overclocker :
http://www.infos-du-net.com/forum/ [...] pic-unique
Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

bonjour,
lorsque tu vérifies ce que tu as dans ton fichier, tu as les bonnes valeurs?

ton tableau est un tableau de caractères (char tableauJeu)
ce que tu ecrit dans le fichier est un long ("%ld" )

un 0 en char par exemple correspond à 48 en le convertissant en long, et c'est 48 qui sera écrit dans ton fichier (et du coup sera lu comme '4')


Message édité par coca25 le 02-05-2007 à 18:03:48
Répondre à coca25

...
bon de 1), on voit tou de suite les gents compétent...

alors oui, j'en suis absolument sur, les fonctions d'enregistrements marchent tout à fait corectement, les valeures inscrites sont les bonnes, elle varie de 0 a 6 (je les manipule avec une énumération hein ! )

il s'agit d'un double tableau de char en effet...
la solution serait de l'enregistrer sous forme de %d pluto que %ld ?
pourtant j'ai toujours manipulé des %ld avec mes tableaux de char...

ok ben merci beaucoup j'essaye ça et je te dis :)


Message édité par Drife le 02-05-2007 à 18:29:20
------------------------------ si dieu existe et a inventé la bite, alors il a inventé la masturbation qui va avec. Qu'il ne vienne donc pas se plaindre...
Pour overclocker :
http://www.infos-du-net.com/forum/ [...] pic-unique
Répondre à Drife

il semblerait que tu ait réglé un problème, mais il y a semblent-il a la fin du chargement :s
citation du niveau.txt

Citation :

22000000000000000000000000
00000000000000000000000000000000
00000000200000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
000000000000000000000000000000000000222


citation du stdout a ce niveau :

Code :
  1. tableauJeu[i][j] = fgetc(fichier);
  2. printf("%c", tableauJeu[i][j]);


Citation :

22000000000000000000000000
00000000000000000000000000000000
00000000200000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
0000000000000000000000000



hé oui, la fin est bouffé :s
au cas ça ne se voit pas dans le post, je l'est bien vu en faisant le copier coller sur un seule ligne...
mais ceci provoque des problème d'affichage, donc j'en passe...


je ne comprend pas pourquoi, j'ai bien vérifié que tout le tableau était parcouru, et qu'il finissait @ [14][14] ...
sachant que la valeur NB_CASE vaut 15...

comprend pas :/

tu saurais m'expliquer ce mystere :D ?


Message édité par Drife le 02-05-2007 à 19:00:53
------------------------------ si dieu existe et a inventé la bite, alors il a inventé la masturbation qui va avec. Qu'il ne vienne donc pas se plaindre...
Pour overclocker :
http://www.infos-du-net.com/forum/ [...] pic-unique
Répondre à Drife

si NB_CASE vaut 15, pourquoi tu testes si j<13 ??
d'ailleurs:

Code :
  1. // supposant on est à 14
  2. if(j>13)//j ne doit pas dépasser 14 (15eme case)
  3. {
  4.     j=0;
  5.     i++;
  6. }
  7. // la tu te retrouves à j = 0
  8. tableauJeu[i][j] = fgetc(fichier);
  9. // donc 14 n'est jamais remplie



et enfin, la condition du while est mauvaise, car i est incrémenté avant l'initialisation du tableau, donc tu peux toucher le [15][x] avant de sortir

Répondre à coca25

en fait, si je met j>14, j monte jusqu'a 15... hors 15 n'existe pas dans le tableau, vu qu'il il a 15 case on est en C donc la case 0 compte...

c'est surement du a ta 2ème remarque...je vais essayer de corriger ça, merci :)

------------------------------ si dieu existe et a inventé la bite, alors il a inventé la masturbation qui va avec. Qu'il ne vienne donc pas se plaindre...
Pour overclocker :
http://www.infos-du-net.com/forum/ [...] pic-unique
Répondre à Drife

Si tu veux lire des caractères : pourquoi ta fonction de sauvegarde écrit des entiers ?

1. void sauvegarderCarte(char tableauJeu[][NB_CASE])
2. {
3. FILE *fichier = NULL;
4. long i,j;
5.
6. fichier = fopen("niveau.txt", "w" );
7.
8. if (fichier != NULL)//si le fichier s'ouvre corectement
9. {
10. for(i=0;i<NB_CASE;i++)//double boucle
11. {
12. for(j=0;j<NB_CASE;j++)
13. {
14. fprintf(fichier, "%c", tableauJeu[j][i]);//on copie le contenu du tableau dans un fichier texte
15. }
16. }
17. fclose(fichier);
18. }
19. }

et la fonction de lecture symétrique :

1. void chargerCarte(char tableauJeu[][NB_CASE])
2. {
3. FILE *fichier = NULL;
4. long i,j;
5.
6. fichier = fopen("niveau.txt", "r" );
7.
8. if (fichier != NULL)//si le fichier s'ouvre corectement
9. {
10. for(i=0;i<NB_CASE;i++)//double boucle
11. {
12. for(j=0;j<NB_CASE;j++)
13. {
14. tableauJeu[i][j] = fgetc(fichier);
15. }
16. }
17. fclose(fichier);
18. }
19. }

Répondre à chrisz

désolé du retard

comme ça des caractere ?
ma fonction de sauvegarde doit écrire des chiffre de 0 a 5.
ce sont des caracteres ?

je ne comprend plus très bien :s

qu'est ce que je doit enregister alors ?
des %ld ? des %d ? des %c ?
que puis-je manier avec un tabeau de type char ?

merci de vos lumières :)

------------------------------ si dieu existe et a inventé la bite, alors il a inventé la masturbation qui va avec. Qu'il ne vienne donc pas se plaindre...
Pour overclocker :
http://www.infos-du-net.com/forum/ [...] pic-unique
Répondre à Drife

alors?
peu importe comment tu enregistre, prends bien garde au typage de données.

tu as un tableau (de tableau) de caractères.
si tu fais 1 %d, tu enregistrera le code ASCII du caractere.
'0' = 48 en ASCII
'1' = 49 en ASCII
'2' = 50 en ASCII
avec un %c , tu enregistrera le caractere demandé.



il te faut juste être cohérent.


Message édité par elendilm le 12-05-2007 à 11:54:30
Répondre à elendilm

ok, donc moi il faut que j'enregistre des %c, sinon mon tableau sensé contenir des 0,1,2... va contenir des 50 et l'ordi va plus me comprendre :D

donc si j'ai bien compris :

fonction d'enregistrement : %c
fonction chargement : fgets
=> on obtient des 0,1,2...dans mon double tableau.

c'est bien ça (désolé d'insister mais en temps que newbie je veut etre sur :) ) ?

------------------------------ si dieu existe et a inventé la bite, alors il a inventé la masturbation qui va avec. Qu'il ne vienne donc pas se plaindre...
Pour overclocker :
http://www.infos-du-net.com/forum/ [...] pic-unique
Répondre à Drife
Tom's Guide > Forum > Programmation > C : la fonction de chargement ne marche pas
Aller à :

Il y a 1596 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens