Langage C : lecture, écriture dans un fichier
vali6
-
yumburgk -
yumburgk -
Salut à tous,
je suis novice en C, je solicite donc votre aide...
Je suis en train de programmer un démineur en C sous Windows avec Dev C++, et je souhaiterais écrire les meilleurs temps dans un fichier texte.
J'ai utilisé la fonction fgetc pour lire dans le fichier texte, le probleme c'est qu'elle ne récupère qu'un seul caractère. Or j'aimerai pouvoir lire et écrire des temps supérieur à 9 secondes :-)
Voici la fonction que j'ai déjà écrite :
void meilleur_temps(int temps,int rep) // temps = temps d'execution du programme ; rep = niveau de difficulté
{
//t[0] : temps niveau facile
//t[1] : temps niveau moyen
//t[2] : temps niveau dificile
int i=0;
char car,t[3];
FILE *f;
f=fopen("meilleur_temps.txt","r+b");
if(f==NULL)
{
perror("erreur ouverture");
return;
}
// recuperation des meilleurs temps dans le fichier texte
while ((car = fgetc(f)) != EOF)
{
if (car != '\n')
{
t[i]=car;
i++;
}
else i--;
}
//mise a jour du fichier texte contenant les records
if(temps<t[rep])
{
t[rep]=temps; // nouveau temps pour le niveau choisi
rewind(f); // on se place au debut du fichier
for(i=0;i<3;i++)
{
if(i==rep) fprintf(f,"%d",t[i]);
else fprintf(f,"%c",t[i]);
fprintf(f,"\r\n");
}
}
fclose(f);
}
merci de me répondre.
je suis novice en C, je solicite donc votre aide...
Je suis en train de programmer un démineur en C sous Windows avec Dev C++, et je souhaiterais écrire les meilleurs temps dans un fichier texte.
J'ai utilisé la fonction fgetc pour lire dans le fichier texte, le probleme c'est qu'elle ne récupère qu'un seul caractère. Or j'aimerai pouvoir lire et écrire des temps supérieur à 9 secondes :-)
Voici la fonction que j'ai déjà écrite :
void meilleur_temps(int temps,int rep) // temps = temps d'execution du programme ; rep = niveau de difficulté
{
//t[0] : temps niveau facile
//t[1] : temps niveau moyen
//t[2] : temps niveau dificile
int i=0;
char car,t[3];
FILE *f;
f=fopen("meilleur_temps.txt","r+b");
if(f==NULL)
{
perror("erreur ouverture");
return;
}
// recuperation des meilleurs temps dans le fichier texte
while ((car = fgetc(f)) != EOF)
{
if (car != '\n')
{
t[i]=car;
i++;
}
else i--;
}
//mise a jour du fichier texte contenant les records
if(temps<t[rep])
{
t[rep]=temps; // nouveau temps pour le niveau choisi
rewind(f); // on se place au debut du fichier
for(i=0;i<3;i++)
{
if(i==rep) fprintf(f,"%d",t[i]);
else fprintf(f,"%c",t[i]);
fprintf(f,"\r\n");
}
}
fclose(f);
}
merci de me répondre.
A voir également:
- Langage C : lecture, écriture dans un fichier
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage visual basic - Télécharger - Langages
- Langage basic gratuit - Télécharger - Édition & Programmation
5 réponses
Tu enregistres avec fprintf, pourquoi ne pas lire avec fscanf ?
vali6
en fait dans mon fichier "meilleur_temps.txt" il y a un nombre par ligne, donc si j'ecris fscanf(f,"%d",t[i]) le saut de ligne fait merder la lecture...
ça viens peut être de feof() (voir là : http://www.bash-linux.com/unix-man-feof-francais.html )
d'ailleur, dans le while, j'aurai mi : while(!feof(f))
d'ailleur, dans le while, j'aurai mi : while(!feof(f))
faut ire, je ne comprend pas pourquoi u utilise %c au lieu de %d dans le deuxième printf. ça viens eut être de là.
as tu lu la doc de feof ?
La fonction feof() teste l'indicateur de fin de fichier concernant le
flux pointe par stream, et renvoie une valeur non nulle si cet indica-
teur est actif. L'indicateur de fin de fichier ne peut etre reini-
tialise que par la fonction clearerr(). C'est à dire que si tu arrive à la fin du fichier et que tu fait un rewind, feof renverra toujours 1 (du moins c'est comme ça que je le comprend.
as tu lu la doc de feof ?
La fonction feof() teste l'indicateur de fin de fichier concernant le
flux pointe par stream, et renvoie une valeur non nulle si cet indica-
teur est actif. L'indicateur de fin de fichier ne peut etre reini-
tialise que par la fonction clearerr(). C'est à dire que si tu arrive à la fin du fichier et que tu fait un rewind, feof renverra toujours 1 (du moins c'est comme ça que je le comprend.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question