C : la fonction de chargement ne marche pas
Forum Programmation : C : la fonction de chargement ne marche pas
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 :
|
et voici, ce qui pourra vous aider la fonction d'enregistrement, qui elle est fonctionnelle (vérifié avec le .txt
)
Code :
|
voila je vous remerçie d'avance de votre aide...
Pour overclocker :
http://www.infos-du-net.com/forum/ [...] pic-unique
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
...
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
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
|
citation du stdout a ce niveau :
Code :
|
| Citation : 22000000000000000000000000
|
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
?
Message édité par Drife le 02-05-2007 à 19:00:53
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 :
|
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
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
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. }
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
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
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
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
) ?
Pour overclocker :
http://www.infos-du-net.com/forum/ [...] pic-unique
Répondre à Drife
Il y a 1814 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.
