Probléme avec la sauvegarde sur C (Fichier...
jacked
-
fiddy Messages postés 11653 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11653 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
je voudrai faire un programme sur "C" qui compte le nombre de fois que le programme est
exécuté , pour ça j'ai utiliser la ( lecture / écriture) dans les fichier avec une variable "compteur" qui s'incrémente
chaque foi que le programme est exécuté . mais sa ne marche pas !
si quelqu'un a une idée , merci de me faire part de votre connaissance .
je voudrai faire un programme sur "C" qui compte le nombre de fois que le programme est
exécuté , pour ça j'ai utiliser la ( lecture / écriture) dans les fichier avec une variable "compteur" qui s'incrémente
chaque foi que le programme est exécuté . mais sa ne marche pas !
si quelqu'un a une idée , merci de me faire part de votre connaissance .
A voir également:
- Probléme avec la sauvegarde sur C (Fichier...
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier epub - Guide
- Logiciel de sauvegarde gratuit - Guide
- Fichier rar - Guide
5 réponses
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
jacked
sayé je poster le code
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);
}
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
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 ^^.