Posez votre question Signaler

Langage C : lecture, écriture dans un fichier

vali6 - Dernière réponse le 8 mai 2010 à 07:31
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.
Lire la suite 
Réponse
+1
moins plus
Tu enregistres avec fprintf, pourquoi ne pas lire avec fscanf ?
vali6- 28 avril 2008 à 15:23
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...
Répondre
Ajouter un commentaire
Annonces
 
moins plus
Réponse
+1
moins plus
ç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))
vali6- 29 avril 2008 à 16:58
j'ai essayé while(!feof(f)) mais ca buguait..
je pense pas que le problème vienne de ce feof.
En effet avant l'execution j'ai 3 temps dans mon fichier, et après j'en ai toujours 3. le problème, c'est que l'entier que je modifie est corretc mais les 2 autres sont des caractères illisibles...
:-(
Répondre
Ajouter un commentaire
Annonces
 
moins plus
Réponse
+0
moins plus
et fscanf(f,"%d\r\n",t[i]) ?
vali6- 28 avril 2008 à 17:58
pas mieu... a moins que j'écrive pas ce qu'il faut.
j'ai mis ça a la place de la boucle avec le fgetc.
while(feof(f))
{
fscanf(f,"%d\r\n",t[i]);
i++;
}
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
bonjour j'ai un probleme sur l'enregistrement des etudiants.
j'aimerai enregistré ,listé afficher,et sauvegardé mes enregistrements dans un fichier et je ne m'en sor pas.svp aidez moi avec les codes sources en langage c
Ajouter un commentaire
Ce document intitulé «  langage C : lecture, écriture dans un fichier  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.