Langage C : lecture, écriture dans un fichier

Fermé
vali6 - 28 avril 2008 à 13:12
 yumburgk - 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.
A voir également:

5 réponses

kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
28 avril 2008 à 13:41
Tu enregistres avec fprintf, pourquoi ne pas lire avec fscanf ?
1
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...
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
29 avril 2008 à 08:41
ç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))
1
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...
:-(
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
28 avril 2008 à 16:36
et fscanf(f,"%d\r\n",t[i]) ?
0
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++;
}
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
30 avril 2008 à 08:28
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
0