Probléme avec la sauvegarde sur C (Fichier...
Fermé
jacked
-
23 déc. 2008 à 14:21
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 23 déc. 2008 à 22:52
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 23 déc. 2008 à 22:52
A voir également:
- Probléme avec la sauvegarde sur C (Fichier...
- Fichier rar - Guide
- Fichier host - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier iso - Guide
- Logiciel de sauvegarde - Guide
5 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 835
23 déc. 2008 à 14:37
23 déc. 2008 à 14:37
Salut,
Je pense que l'erreur vient de ton code ;). Donc si tu pouvais le poster (utilise la balise de code, à droite de souligner pour la lisibilité), on pourrait sûrement t'aider.
Cdlt
Je pense que l'erreur vient de ton code ;). Donc si tu pouvais le poster (utilise la balise de code, à droite de souligner pour la lisibilité), on pourrait sûrement t'aider.
Cdlt
oui voila :
#include <cstdlib> #include <iostream> using namespace std ; int main(int argc, char *argv[]) { FILE* fichier = NULL; long compteur=0; fichier = fopen("save.sys", "w"); if (fichier != NULL) { fscanf(fichier, "%ld", compteur); compteur++ ; fprintf(fichier, "%ld ",compteur); fclose(fichier); } system("pause"); return (0); }
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 835
23 déc. 2008 à 15:22
23 déc. 2008 à 15:22
Normal que ça ne marche pas, tu cherches à lire dans un fichier ouvert en écriture seulement. Et t'as aussi oublié dans fscanf ne passer le pointeur. Et enfin, il faut replacer l'indicateur de position de flux en début de fichier avant de récrire.
Ce qui donne :
De plus, dans ton programme tu mélanges C et C++. Ce qui n'est pas très bon. Par exemple tu utilises iostream (C++) au lieu de stdio.h (C). Même remarque pour stdlib.h.
Cdlt
Ce qui donne :
#include <cstdlib> #include <iostream> using namespace std ; int main(int argc, char *argv[]) { FILE* fichier = NULL; long compteur=0; fichier = fopen("save.sys", "w+"); if (fichier != NULL) { fscanf(fichier, "%ld", &compteur); fseek(fichier,0,SEEK_SET); compteur++ ; fprintf(fichier, "%ld",compteur); fclose(fichier); } return 0; }
De plus, dans ton programme tu mélanges C et C++. Ce qui n'est pas très bon. Par exemple tu utilises iostream (C++) au lieu de stdio.h (C). Même remarque pour stdlib.h.
Cdlt
déja merci pour ta réponce , mais sa ne marche pas aussi , le compteur réste sur 0 si en veu l'afficher
et pour la fonction : fseek(fichier,0,SEEK_SET);
elle fait quoi ? ,et je croi pas qu'elle est néssécére !.
et pour les lib <iostream> c'est vrais que je mélange c et cpp mais je ne risque pas de confondre .
enfin j'voulé juste te remercier pour ta réponce et te demmander si tu pouvé juste dévlopé un peu sur
la fonction :fseek(fichier,0,SEEK_SET);
elle sére a quoi ?!!!! , et le code ne change pas le compteur réste sur "0" .
et pour la fonction : fseek(fichier,0,SEEK_SET);
elle fait quoi ? ,et je croi pas qu'elle est néssécére !.
et pour les lib <iostream> c'est vrais que je mélange c et cpp mais je ne risque pas de confondre .
enfin j'voulé juste te remercier pour ta réponce et te demmander si tu pouvé juste dévlopé un peu sur
la fonction :fseek(fichier,0,SEEK_SET);
elle sére a quoi ?!!!! , et le code ne change pas le compteur réste sur "0" .
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 835
23 déc. 2008 à 22:52
23 déc. 2008 à 22:52
Oups, j'ai fait une boulette dans mon code. Le droit n'est pas "w+" mais "r+".
Voici, ce que ça donne (avec stdio.h et stdlib.h)
Sinon, si fseek(fichier,0,SEEK_SET); tu en as besoin dans ton code. En fait, ça te permet de repositionner l'indicateur de position en début de fichier. Lors de ton fscanf, tu vas lire le nombre, ce qui va déplacer cet indicateur à la fin du nombre. Si tu écris immédiatement avec fprintf, tu placeras un nombre à côté et non à la place. Donc ton fichier contiendra : 0, puis 01, puis 012, etc.
D'ailleurs, à la place de fseek(fichier,0,SEEK_SET), tu aurais pu mettre tout simplement rewind(fichier); Ca fait exactement la même chose, mais c'est plus court ^^.
Voici, ce que ça donne (avec stdio.h et stdlib.h)
#include <stdio.h> #include <stdlib.h> int main(void) { FILE* fichier = NULL; long compteur=0; fichier = fopen("save.sys", "r+"); if (fichier != NULL) { fscanf(fichier, "%ld", &compteur); fseek(fichier,0,SEEK_SET); compteur++ ; fprintf(fichier, "%ld",compteur); fclose(fichier); fichier=NULL; } return 0; }
Sinon, si fseek(fichier,0,SEEK_SET); tu en as besoin dans ton code. En fait, ça te permet de repositionner l'indicateur de position en début de fichier. Lors de ton fscanf, tu vas lire le nombre, ce qui va déplacer cet indicateur à la fin du nombre. Si tu écris immédiatement avec fprintf, tu placeras un nombre à côté et non à la place. Donc ton fichier contiendra : 0, puis 01, puis 012, etc.
D'ailleurs, à la place de fseek(fichier,0,SEEK_SET), tu aurais pu mettre tout simplement rewind(fichier); Ca fait exactement la même chose, mais c'est plus court ^^.
23 déc. 2008 à 14:48