bonjour,
je voudrai mettre le curseur de mon fichier au début
je fais comme ça
mais ça ne marche pas est se que vous pouvez m'aidez SVP ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part fseek(fichier, 0, SEEK_SET);
bonjour,
je voudrai mettre le curseur de mon fichier au début
je fais comme ça
mais ça ne marche pas est se que vous pouvez m'aidez SVP ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part fseek(fichier, 0, SEEK_SET);
Bonjour,
La fonction fseek est bien utilisée. Peux-tu nous montrer un peu plus de code pour voir si le problème ne vient pas d'une autre ligne ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 fseek(fichier, 0, SEEK_SET); do { fgets(ligneFichier, NB_BLOCS_LARGEUR * NB_BLOCS_HAUTEUR + 1, fichier); for (i = 0 ; i < NB_BLOCS_LARGEUR ; i++) { for (j = 0 ; j < NB_BLOCS_HAUTEUR ; j++) { switch (ligneFichier[(i * NB_BLOCS_LARGEUR) + j]) { case '0': niveau[j][i] = 0; break; case '1': niveau[j][i] = 1; break; case '2': niveau[j][i] = 2; break; case '3': niveau[j][i] = 3; break; case '4': niveau[j][i] = 4; break; } } }
Bonjour,
Que veut dire "ça ne marche pas" ?
Est-ce que tu as une erreur de segmentation? Est-ce que ça ne compile pas ? Est-ce que tu ne te retrouve pas à la bonne position dans ton fichier ?
Bref, comment vois-tu que ceci ne marche pas ?
As tu essayé de vérifier où se trouve ton curseur après le fseek avec la fonction ftell ?
prototype :
long ftell (FILE *stream);
que je mette
ou rien c'est la même chose
Code : Sélectionner tout - Visualiser dans une fenêtre à part fseek(fichier, 0, SEEK_SET);
mais quand je met
il m'affiche "Position courante du cuseur : 0
Code : Sélectionner tout - Visualiser dans une fenêtre à part printf ("Position courante du cuseur : %ld\n", ftell(fichier));
je veux lire le début du fichier mais quand je le lance ça ne lis pas le fichier au début.
Relis les réponses qui t'avaient été apportées dans ton précédant sujet et vire-moi ce switch
Ensuite es-tu sûr que le début du fichier n'est pas lu ?
Ne serais-ce pas plutôt que tu essaye de lire et d'écrire avec deux méthodes différentes ?
Et puisqu'on est dans les questions bêtes :
- Est-ce que tu as au moins ouvert ton fichier ?
A priori oui, sinon ftell() renverrait « -1 ». À part cela,
- Que contient ton fichier ?
- Es-tu sûr que tu n'écrases pas ton fichier à l'ouverture à cause de mauvais flags (auquel cas il aurait une taille nulle) ?
- As-tu essayé de placer ftell() après fgets() ?
- Que valent NB_BLOCS_LARGEUR et NB_BLOCS_HAUTEUR ?
En plus de ce que te demande Obsidian, tu peux faire la chose suivante pour voir comment se passe la lecture :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 fseek(fichier, 0, SEEK_SET); do { fgets(ligneFichier, NB_BLOCS_LARGEUR * NB_BLOCS_HAUTEUR + 1, fichier); printf ("DEBUG : [%s]\n", ligneFichier); /* la suite de ton code */
çaQue contient ton fichier ?
111110011111111114000001111100011001111101011011111100001011111101000011111100011211111111111001111130000001111111111111111111111111111111111111
111110011111111114000001111100011201110301011011110000000011110001000011111100011211111111111001111130000001111111111111111111111111111111111111
111110011111111114000001111100011201113301011011110000000011110001200011111100011211111111111001111130000001111111111111111111111111111111111111
111110011111111114000001111100011201113301011011110000000011113001200011111100011211111112111001111130000001111111111111111111111111111111111111
111110011111111114000001111100011201113301011011110000000011103301200011100000011211102112111001100130000001111111111111111111111111111111111111
111110011111111114000001111100011201113301011011110000000011103300200011100000011211002012111001020000300001110011111111110000003111111111111111
non parce que quand je met
Code : Sélectionner tout - Visualiser dans une fenêtre à part Es-tu sûr que tu n'écrases pas ton fichier à l'ouverture à cause de mauvais flags (auquel cas il aurait une taille nulle) ?il m'affiche le contenu du fichier
Code : Sélectionner tout - Visualiser dans une fenêtre à part printf ("DEBUG : [%s]\n", ligneFichier);
ouiAs-tu essayé de placer ftell() après fgets() ?
je ne comprend pas vraiment la question.Que valent NB_BLOCS_LARGEUR et NB_BLOCS_HAUTEUR ?
NB_BLOCS_LARGEUR et NB_BLOCS_HAUTEUR sont des define non?
Qu'as-tu mis à droite de NB_BLOCS_LARGEUR et NB_BLOCS_HAUTEUR lorsque tu les as déclarés ? (= sur la ligne où tu as mis #define )
ici
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 #define NB_BLOCS_LARGEUR 12 #define NB_BLOCS_HAUTEUR 12
Donc tu lis bien ton fichier à partir du début. Dont le fseek() fonctionne bien. Donc le problème initial est résolu.
et...? sous-entendu "voudrais-tu faire l'effort de nous en dire un peu plus comme par exemple la valeur renvoyée par ftell() (qui normalement doit ici donner 0)...?"
Hum, t'as joué dans Kaamelott toi non ?![]()
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Et surtout :
- Peut-on voir également la ligne ou tu appelles fopen() ?
Il serait bien possible que tu l'aies ouvert en mode "a".
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
voici le code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68 /* fichiers.c ---------- Par mateo21 Rôle : fonctions de lecture / écriture de fichiers de niveau. */ #include <stdlib.h> #include <stdio.h> #include <SDL/SDL.h> #include <SDL/SDL_image.h> #include "constantes.h" //#include "fichiers.h" int chargerNiveau(int niveau[][NB_BLOCS_HAUTEUR]) { FILE* fichier = NULL; char ligneFichier[NB_BLOCS_LARGEUR * NB_BLOCS_HAUTEUR + 1] = {0}; int i = 0, j = 0; fichier = fopen("niveaux.lvl", "r+"); if (fichier == NULL) return 0; int ligneActuel= 0; fseek(fichier, 0, SEEK_SET); do { fgets(ligneFichier, NB_BLOCS_LARGEUR * NB_BLOCS_HAUTEUR + 1, fichier); for(i = 0; i < NB_BLOCS_LARGEUR; i++) { for(j = 0; j < NB_BLOCS_HAUTEUR; j++) { niveau[j][i] = ligneFichier[(i * NB_BLOCS_LARGEUR) + j] - '0'; } } ligneActuel = fgetc(fichier); }while (ligneActuel != EOF); fclose(fichier); return 1; } int sauvegarderNiveau(int niveau[][NB_BLOCS_HAUTEUR]) { FILE* fichier = NULL; int i = 0, j = 0; fichier = fopen("editeur.lvl", "w"); if (fichier == NULL) return 0; for (i = 0 ; i < NB_BLOCS_LARGEUR ; i++) { for (j = 0 ; j < NB_BLOCS_HAUTEUR ; j++) { fprintf(fichier, "%d", niveau[j][i]); } } fclose(fichier); return 1; }Ce que je veux dire c'est qu'il y à plusieurs lignes dans mon fichier et que je lis la dernière ligne.Es-tu sûr que tu n'écrases pas ton fichier à l'ouverture à cause de mauvais flags (auquel cas il aurait une taille nulle) ?non parce que quand je met
Code : Sélectionner tout - Visualiser dans une fenêtre à part printf ("DEBUG : [%s]\n", ligneFichier);Donc tu lis bien ton fichier à partir du début. Dont le fseek() fonctionne bien. Donc le problème initial est résolu.il m'affiche le contenu du fichier
voici le fichier.
Partager